# lspciな具合にIntelの82573E/V/L Gigabit Ethernet Controllersの82573Lが搭載されている。
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
というわけでGigabit EthernetのJumbo Framesにも対応しているハズなのだが、切ない事に
# ifconfig eth0 mtu 7168となる。ちなみに/var/log/messagesには
SIOCSIFMTU: 無効な引数です
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)てな感じでガードしている箇所をCUTしてみたところ、思惑通り設定できるようになった。
{
:
:
/* 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:
暫く使ってみて「普通に使えるじゃん」と喜んでいたのだが、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/
┣Intel® 82573E/V/L Gigabit Ethernet Controllers
┗82573 Family Gigabit Ethernet Controllers Specification Update
●Xilinx https://japan.xilinx.com/
┗AR# 36325: PCI Express のデザイン アシスタント - ASPM をオフにする方法
●Fedora ドキュメント https://docs.fedoraproject.org/ja-JP/
┗3.5. Active-State Power Management
●Wikipedia https://en.wikipedia.org/wiki/
┗Active State Power Management