ThinkPad T60とJumbo Frames

ThinkPad T60には

# lspci
02:00.0 Ethernet controller: Intel Corporation 82573L Gigabit Ethernet Controller
        Subsystem: Lenovo ThinkPad T60
        Flags: bus master, fast devsel, latency 0, IRQ 11
        Memory at ee000000 (32-bit, non-prefetchable) [size=128K]
        I/O ports at 3000 [size=32]
        Capabilities: [c8] Power Management version 2
        Capabilities: [d0] Message Signalled Interrupts: 64bit+ Queue=0/0 Enable-
        Capabilities: [e0] Express Endpoint IRQ 0
        Capabilities: [100] Advanced Error Reporting
        Capabilities: [140] Device Serial Number 24-75-0b-ff-ff-58-15-00

な具合にIntelの82573E/V/L Gigabit Ethernet Controllers82573Lが搭載されている。

というわけでGigabit EthernetのJumbo Framesにも対応しているハズなのだが、切ない事に

# ifconfig eth0 mtu 7168
SIOCSIFMTU: 無効な引数です

となる。ちなみに/var/log/messagesには

kernel: e1000: eth0: e1000_change_mtu: **Jumbo Frames not supported**.

と吐き出されており、切ない事この上ない。

drivers/net/e1000/e1000_main.cをチェックしたら、ASPMが無効になっている時以外はJumbo Framesに設定できないような造りになっている事がわかったので、

static int e1000_change_mtu(struct net_device *netdev, int new_mtu)
{
  :
  :
  /* Adapter-specific max frame size limits. */
  switch (adapter->hw.mac.type) {
  case e1000_undefined:
  :
  :
  case e1000_82573:
    /* Jumbo Frames not supported if:
     * - this is not an 82573L device
     * - ASPM is enabled in any way (0x1A bits 3:2) */
**#if CUT
**
    e1000_read_nvm(&adapter->hw, NVM_INIT_3GIO_3, 1, &eeprom_data);
    if ((adapter->hw.device_id != E1000_DEV_ID_82573L) ||
        (eeprom_data & NVM_WORD1A_ASPM_MASK)) {
        if (max_frame > ETH_FRAME_LEN + ETHERNET_FCS_SIZE) {
            DPRINTK(PROBE, ERR,
                    "Jumbo Frames not supported.\n");
            return -EINVAL;
        }
        break;
    }
**#endif // CUT
**
    /* ERT will be enabled later to enable wire speed receives */
    /* fall through to get support */
  case e1000_ich9lan:

てな感じでガードしている箇所をCUTしてみたところ、思惑通り設定できるようになった。

暫く使ってみて「普通に使えるじゃん」と喜んでいたのだが、ASPMが有効だとどんな問題があるのだろうか?と思って調べてみたところ、82573 Family Gigabit Ethernet Controllers Specification Update に**「ASPM/Jumbo Frames Disabled Due to Early Receive Threshold Overrun Buffer」**というレポートが上がっており、

The Jumbo Frames feature uses the Early Receive Threshold (ERT) in the 82573 when ASPM is enabled. When ERT is enabled, Jumbo Frames may possibly corrupt system memory.

とサラッと書いてあったのだが、要するに「システムメモリを破壊するかもしれない」という深刻な障害じゃないですか!

まぁASPMを無効にすればいいんですね、と思ったものの無効にする方法がわかんないんだよなぁ…

参照

Intel® http://www.intel.com/

Xilinx https://japan.xilinx.com/

Fedora ドキュメント https://docs.fedoraproject.org/ja-JP/

Wikipedia https://en.wikipedia.org/wiki/