YANO's digital garage

Copyright ©YANO All rights reserved. https://www.bravotouring.com/~yano/

Last-modified: 2024-04-17 (水)


[一語一絵/IT系]

VT8251とAPIC error / 2007-10-25 (木)

5月にトライしていた[External]VIA VT8251 southbridgeSerial ATA対応kernel問題。

「VT8251はkernel 2.6.20でfully supported」だと言われていながら2.6.20.4で動かず、少し前の2.6.17に甘んじていたのだが、起動オプションにpci=nomsiを付与する事で2.6.22.10でも動いた

具体的には

kernel /vmlinuz-2.6.22.10 ro root=LABEL=/ rhgb quiet pci=nomsi
な感じ。毎回grub起動時に「e」キーで編集モードに入ってkernel行にpci=nomsiを入力するか、さもなくば/boot/grub/grub.confの該当箇所にガッツリ書いておけばよい。

ちなみにMSI(Message Signaled Interrupts)は、PCIバスのメモリトランザクションとして配送される割り込みの事で、[External]IOAPICにルーティングされリダイレクション・テーブル介してからCPUへ割り込み通知される仕組みだ。

その為、MSIが期待通りに動作しないようだと

libata version 2.00 loaded.
ahci 0000:00:0f.0: version 2.0
ACPI: PCI Interrupt 0000:00:0f.0[B] -> GSI 21 (level, low) -> IRQ 21
input: AT Translated Set 2 keyboard as /class/input/input0
ahci 0000:00:0f.0: AHCI 0001.0000 32 slots 4 ports 3 Gbps 0xf impl IDE mode
ahci 0000:00:0f.0: flags: 64bit ncq pm led clo pmp pio slum part
ata1: SATA max UDMA/133 cmd 0xFFFFC20000004D00 ctl 0x0 bmdma 0x0 irq 511
ata2: SATA max UDMA/133 cmd 0xFFFFC20000004D80 ctl 0x0 bmdma 0x0 irq 511
ata3: SATA max UDMA/133 cmd 0xFFFFC20000004E00 ctl 0x0 bmdma 0x0 irq 511
ata4: SATA max UDMA/133 cmd 0xFFFFC20000004E80 ctl 0x0 bmdma 0x0 irq 511
scsi0 : ahci
ata1: SATA link up 3.0 Gbps (SStatus 123 SControl 300)
APIC error on CPU0: 00(08)
APIC error on CPU1: 00(08)
ata1.00: qc timeout (cmd 0xec)
ata1.00: failed to IDENTIFY (I/O error, err_mask=0x104)
な結果に繋がるわけだ。

そういう観点からすると、.configCONFIG_PCI_MSIを無効にしてkernelを再構築しておけば上記の起動オプションに依らず、MSIを使用しなくなり[External]VIA VT8251 southbridgeSerial ATAが使えるようになるのは言うまでもない。

しかし、2.6.17でもCONFIG_PCI_MSIは有効になっていたので、[External]VIA VT8251 southbridgeMSI(Message Signaled Interrupts)に未対応というわけでも無さそうなのだけどねぇ…

真実はまだ闇の中だ。

【参照】
●VIA Arena Forum http://forums.viaarena.com/


[一語一絵/IT系]

ThinkPad T60とJumbo Frames / 2007-10-25 (木)

[External]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[External]82573E/V/L Gigabit Ethernet Controllers82573Lが搭載されている。

というわけでGigabit EthernetJumbo 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が有効だとどんな問題があるのだろうか?と思って調べてみたところ、[External]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