01 Mar, 2006

35 commits


28 Feb, 2006

5 commits

  • Linus Torvalds
     
  • During testing of SLES10, we encountered a hang in the CFQ io scheduler.
    Turns out the deferred slice expiry logic is buggy, so remove that for
    now. We could be left with an idle queue that would never wake up. So
    kill that logic, always expire immediately. Also fix a potential timer
    race condition.

    Patch looks bigger than it is, because it moves a function.

    Signed-off-by: Jens Axboe
    Signed-off-by: Linus Torvalds

    Jens Axboe
     
  • Before the merge I updated create_pte_mapping() to work for iSeries, by
    calling iSeries_hpte_bolt_or_insert. (4c55130b2aa93370f1bf52d2304394e91cf8ee39)

    Later we changed iSeries_hpte_insert to cope with the bolting case, and called
    that instead from create_pte_mapping() (which was renamed to htab_bolt_mapping)
    (3c726f8dee6f55e96475574e9f645327e461884c).

    Unfortunately that change introduced a subtle bug, where we pass an absolute
    address to iSeries_hpte_insert() where it expects a physical address. This
    leads to us calling phys_to_abs() twice on the physical address, which is
    seriously bogus.

    This only causes a problem if the absolute address from the first translation
    can be looked up again in the chunk_map, which depends on the size and layout
    of memory. I've seen it fail on one box, but not others.

    The minimal fix is to pass the physical address to iSeries_hpte_insert(). For
    2.6.17 we should make phys_to_abs() BUG if we try to double-translate an
    address.

    Signed-off-by: Michael Ellerman
    Signed-off-by: Paul Mackerras

    Michael Ellerman
     
  • This patch fixes a crash in handle_eeh_events,
    but ethtool -t still doesnt work right.

    ...
    pepino:~ # cpu 0x3: Vector: 300 (Data Access) at [c00000005192bbe0]
    pc: c00000000004a380: .handle_eeh_events+0xe0/0x23c
    lr: c00000000004a374: .handle_eeh_events+0xd4/0x23c
    sp: c00000005192be60
    msr: 9000000000009032
    dar: 268
    dsisr: 40000000
    current = 0xc0000001fe7bf1a0
    paca = 0xc00000000048b280
    pid = 16322, comm = eehd
    enter ? for help
    [c00000005192bf00] c00000000004a808 .eeh_event_handler+0xcc/0x130
    [c00000005192bf90] c000000000025e00 .kernel_thread+0x4c/0x68

    ...

    (none):/# /usr/sbin/ethtool -i eth0
    driver: e100
    version: 3.5.10-k2-NAPI
    firmware-version: N/A
    bus-info: 0000:21:01.0
    (none):/# /usr/sbin/ethtool -t eth0
    Call Trace:
    [C00000000F8DEFF0] [C00000000000F270] .show_stack+0x74/0x1b4 (unreliable)
    [C00000000F8DF0A0] [C000000000049D04] .eeh_dn_check_failure+0x290/0x2d8
    [C00000000F8DF150] [C000000000049E58] .eeh_check_failure+0x10c/0x138
    [C00000000F8DF1E0] [C0000000002DFDB0] .e100_hw_reset+0x70/0xf4
    [C00000000F8DF270] [C0000000002E1BBC] .e100_hw_init+0x2c/0x260
    [C00000000F8DF310] [C0000000002E2464] .e100_loopback_test+0x8c/0x220
    [C00000000F8DF3C0] [C0000000002E28DC] .e100_diag_test+0xdc/0x16c
    [C00000000F8DF490] [C000000000420BE0] .dev_ethtool+0xf24/0x14f8
    [C00000000F8DF8F0] [C00000000041F4A8] .dev_ioctl+0x5cc/0x740
    [C00000000F8DFA20] [C00000000040FEFC] .sock_ioctl+0x3d0/0x404
    [C00000000F8DFAC0] [C0000000000D513C] .do_ioctl+0x68/0x108
    [C00000000F8DFB50] [C0000000000D56B0] .vfs_ioctl+0x4d4/0x510
    [C00000000F8DFC10] [C0000000000D5740] .sys_ioctl+0x54/0x94
    [C00000000F8DFCC0] [C0000000000FB6EC] .ethtool_ioctl+0x11c/0x150
    [C00000000F8DFD60] [C0000000000F7E40] .compat_sys_ioctl+0x338/0x3bc
    [C00000000F8DFE30] [C00000000000871C] syscall_exit+0x0/0x40
    EEH: Detected PCI bus error on device 0000:21:01.0
    EEH: This PCI device has failed 1 times since last reboot: -

    modprobe: FATAL: Could not load /lib/modules/2.6.16-rc4-git7/modules.dep: No such file or directory

    Cannot get strings: No such device
    (none):/#
    (none):/# EEH: Unable to configure device bridge (-3) for /pci@400000000110/pci@2,2

    (none):/# Call Trace:
    [C00000000FA17940] [C00000000000F270] .show_stack+0x74/0x1b4 (unreliable)
    [C00000000FA179F0] [C000000000049D04] .eeh_dn_check_failure+0x290/0x2d8
    [C00000000FA17AA0] [C00000000001E114] .rtas_read_config+0x120/0x154
    [C00000000FA17B40] [C000000000049664] .early_enable_eeh+0x274/0x2bc
    [C00000000FA17C00] [C000000000049708] .eeh_add_device_early+0x5c/0x6c
    [C00000000FA17C90] [C000000000049748] .eeh_add_device_tree_early+0x30/0x5c
    [C00000000FA17D20] [C000000000046568] .pcibios_add_pci_devices+0x8c/0x1f8
    [C00000000FA17DD0] [C00000000004A528] .eeh_reset_device+0xe0/0x110
    [C00000000FA17E60] [C00000000004A698] .handle_eeh_events+0x140/0x250
    [C00000000FA17F00] [C00000000004AC7C] .eeh_event_handler+0xe8/0x140
    [C00000000FA17F90] [C000000000025784] .kernel_thread+0x4c/0x68
    EEH: Detected PCI bus error on device
    EEH: This PCI device has failed 1 times since last reboot: -
    EEH: Unable to configure device bridge (-3) for /pci@400000000110/pci@2,2
    Call Trace:
    [C00000000FA17940] [C00000000000F270] .show_stack+0x74/0x1b4 (unreliable)
    [C00000000FA179F0] [C000000000049D04] .eeh_dn_check_failure+0x290/0x2d8
    [C00000000FA17AA0] [C00000000001E114] .rtas_read_config+0x120/0x154
    [C00000000FA17B40] [C000000000049664] .early_enable_eeh+0x274/0x2bc
    [C00000000FA17C00] [C000000000049708] .eeh_add_device_early+0x5c/0x6c
    [C00000000FA17C90] [C000000000049748] .eeh_add_device_tree_early+0x30/0x5c
    [C00000000FA17D20] [C000000000046568] .pcibios_add_pci_devices+0x8c/0x1f8
    [C00000000FA17DD0] [C00000000004A528] .eeh_reset_device+0xe0/0x110
    [C00000000FA17E60] [C00000000004A698] .handle_eeh_events+0x140/0x250
    [C00000000FA17F00] [C00000000004AC7C] .eeh_event_handler+0xe8/0x140
    [C00000000FA17F90] [C000000000025784] .kernel_thread+0x4c/0x68
    EEH: Detected PCI bus error on device
    EEH: This PCI device has failed 1 times since last reboot: -
    EEH: Unable to configure device bridge (-3) for /pci@400000000110/pci@2,2
    Call Trace:
    [C00000000FA17940] [C00000000000F270] .show_stack+0x74/0x1b4 (unreliable)
    [C00000000FA179F0] [C000000000049D04] .eeh_dn_check_failure+0x290/0x2d8
    [C00000000FA17AA0] [C00000000001E114] .rtas_read_config+0x120/0x154
    [C00000000FA17B40] [C000000000049664] .early_enable_eeh+0x274/0x2bc
    [C00000000FA17C00] [C000000000049708] .eeh_add_device_early+0x5c/0x6c
    [C00000000FA17C90] [C000000000049748] .eeh_add_device_tree_early+0x30/0x5c
    [C00000000FA17D20] [C000000000046568] .pcibios_add_pci_devices+0x8c/0x1f8
    [C00000000FA17DD0] [C00000000004A528] .eeh_reset_device+0xe0/0x110
    [C00000000FA17E60] [C00000000004A698] .handle_eeh_events+0x140/0x250
    [C00000000FA17F00] [C00000000004AC7C] .eeh_event_handler+0xe8/0x140
    [C00000000FA17F90] [C000000000025784] .kernel_thread+0x4c/0x68
    EEH: Detected PCI bus error on device
    and so on

    Signed-off-by: Olaf Hering
    Acked-by: Linas Vepstas
    Signed-off-by: Paul Mackerras

    Olaf Hering
     
  • A bug in the assembly code of the vdso can cause gettimeofday() to hang
    or to return incorrect results. The wrong register was used to test for
    pending updates of the calibration variables and to create a dependency
    for subsequent loads. This fixes it.

    Signed-off-by: Benjamin Herrenschmidt
    Signed-off-by: Paul Mackerras

    Benjamin Herrenschmidt