diff --git a/fix-buslogic.patch b/fix-buslogic.patch new file mode 100644 index 0000000..0862d00 --- /dev/null +++ b/fix-buslogic.patch @@ -0,0 +1,121 @@ +This fixes an oops caused by buslogic driver when initializing a BusLogic +MultiMaster adapter. Initialization code used scope of a variable +incorrectly which created a NULL pointer. Oops message is below: + +BUG: unable to handle kernel NULL pointer dereference at 0000000c +IP: [] blogic_init_mm_probeinfo.isra.17+0x20a/0x583 +*pde = 00000000 +Oops: 002 [#1] PREEMPT SMP +Modules linked in: +CPU: 1 PID: 1 Comm: swapper/0 Not tainted 3.11.1.puz1 #1 +Hardware name: /Canterwood, BIOS 6.00 PG 05/16/2003 +task: f7050000 ti: f7054000 task.ti: f7054000 +EIP: 0060:[] EFLAGS: 00010246 CPU:1 +EIP is at blogic_init_mm_probeinfo.isra.17+0x20a/0x583 +EAX: 00000013 EBX: 00000000 ECX: 00000000 EDX: f8001000 +ESI: f71cb800 EDI: f7388000 EBP: 00007800 ESP: f7055c84 + DS: 007b ES: 007b FS: 00d8 GS: 0000 SS: 0068 +CR0: 8005003b CR2: 0000000c CR3: 0154f000 CR4: 000007d0 +Stack: + 0000001c 00000000 c11a59f6 f7055c98 00008130 ffffffff ffffffff 00000000 + 00000003 00000000 00000000 00000000 00000013 f8001000 00000001 000003d0 + 00000000 00000000 00000000 c14e3f84 f78803c8 00000000 f738c000 000000e9 +Call Trace: + [] ? pci_get_subsys+0x33/0x38 + [] ? blogic_init_probeinfo_list+0x4b/0x19e + [] ? __alloc_pages_nodemask+0xe3/0x623 + [] ? __alloc_pages_nodemask+0xe3/0x623 + [] ? sysfs_link_sibling+0x61/0x8d + [] ? kmem_cache_alloc+0x8b/0xb5 + [] ? blogic_init+0xa1/0x10e8 + [] ? sysfs_add_one+0x10/0x9d + [] ? sysfs_addrm_finish+0x12/0x85 + [] ? sysfs_do_create_link_sd+0x9d/0x1b4 + [] ? blk_register_queue+0x69/0xb3 + [] ? sysfs_create_link+0x1a/0x2c + [] ? add_disk+0x1a1/0x3c7 + [] ? klist_next+0x60/0xc3 + [] ? scsi_dh_detach+0x68/0x68 + [] ? bus_for_each_dev+0x51/0x61 + [] ? do_one_initcall+0x22/0x12c + [] ? __proc_create+0x8c/0xba + [] ? blogic_setup+0x5f6/0x5f6 + [] ? repair_env_string+0xf/0x4d + [] ? do_early_param+0x71/0x71 + [] ? parse_args+0x21f/0x33d + [] ? kernel_init_freeable+0xdf/0x17d + [] ? do_early_param+0x71/0x71 + [] ? kernel_init+0x8/0xc0 + [] ? ret_from_kernel_thread+0x6/0x28 + [] ? ret_from_kernel_thread+0x1b/0x28 + [] ? rest_init+0x6c/0x6c +Code: 89 44 24 10 0f b6 44 24 3d 89 44 24 0c c7 44 24 08 00 00 00 00 c7 44 24 04 38 62 46 c1 c7 04 24 02 00 00 00 e8 78 13 d2 ff 31 db <89> 6b 0c b0 20 89 ea ee + c7 44 24 08 04 00 00 00 8d 44 24 4c 89 +EIP: [] blogic_init_mm_probeinfo.isra.17+0x20a/0x583 SS:ESP 0068:f7055c84 +CR2: 000000000000000c +---[ end trace 17f45f5196d40487 ]--- +Kernel panic - not syncing: Attempted to kill init! exitcode=0x00000009 + +Signed-off-by: Khalid Aziz +Cc: # 3.11.x +Cc: Khalid Aziz +Reported-by: Pierre Uszynski +Tested-by: Pierre Uszynski +--- + drivers/scsi/BusLogic.c | 16 ++++++++-------- + 1 file changed, 8 insertions(+), 8 deletions(-) + +diff --git a/drivers/scsi/BusLogic.c b/drivers/scsi/BusLogic.c +index feab3a5..757eb07 100644 +--- a/drivers/scsi/BusLogic.c ++++ b/drivers/scsi/BusLogic.c +@@ -696,7 +696,7 @@ static int __init blogic_init_mm_probeinfo(struct blogic_adapter *adapter) + while ((pci_device = pci_get_device(PCI_VENDOR_ID_BUSLOGIC, + PCI_DEVICE_ID_BUSLOGIC_MULTIMASTER, + pci_device)) != NULL) { +- struct blogic_adapter *adapter = adapter; ++ struct blogic_adapter *host_adapter = adapter; + struct blogic_adapter_info adapter_info; + enum blogic_isa_ioport mod_ioaddr_req; + unsigned char bus; +@@ -744,9 +744,9 @@ static int __init blogic_init_mm_probeinfo(struct blogic_adapter *adapter) + known and enabled, note that the particular Standard ISA I/O + Address should not be probed. + */ +- adapter->io_addr = io_addr; +- blogic_intreset(adapter); +- if (blogic_cmd(adapter, BLOGIC_INQ_PCI_INFO, NULL, 0, ++ host_adapter->io_addr = io_addr; ++ blogic_intreset(host_adapter); ++ if (blogic_cmd(host_adapter, BLOGIC_INQ_PCI_INFO, NULL, 0, + &adapter_info, sizeof(adapter_info)) == + sizeof(adapter_info)) { + if (adapter_info.isa_port < 6) +@@ -762,7 +762,7 @@ static int __init blogic_init_mm_probeinfo(struct blogic_adapter *adapter) + I/O Address assigned at system initialization. + */ + mod_ioaddr_req = BLOGIC_IO_DISABLE; +- blogic_cmd(adapter, BLOGIC_MOD_IOADDR, &mod_ioaddr_req, ++ blogic_cmd(host_adapter, BLOGIC_MOD_IOADDR, &mod_ioaddr_req, + sizeof(mod_ioaddr_req), NULL, 0); + /* + For the first MultiMaster Host Adapter enumerated, +@@ -779,12 +779,12 @@ static int __init blogic_init_mm_probeinfo(struct blogic_adapter *adapter) + + fetch_localram.offset = BLOGIC_AUTOSCSI_BASE + 45; + fetch_localram.count = sizeof(autoscsi_byte45); +- blogic_cmd(adapter, BLOGIC_FETCH_LOCALRAM, ++ blogic_cmd(host_adapter, BLOGIC_FETCH_LOCALRAM, + &fetch_localram, sizeof(fetch_localram), + &autoscsi_byte45, + sizeof(autoscsi_byte45)); +- blogic_cmd(adapter, BLOGIC_GET_BOARD_ID, NULL, 0, &id, +- sizeof(id)); ++ blogic_cmd(host_adapter, BLOGIC_GET_BOARD_ID, NULL, 0, ++ &id, sizeof(id)); + if (id.fw_ver_digit1 == '5') + force_scan_order = + autoscsi_byte45.force_scan_order; +-- +1.7.10.4 + diff --git a/kernel.spec b/kernel.spec index b74c6d0..a7f66ba 100644 --- a/kernel.spec +++ b/kernel.spec @@ -780,6 +780,9 @@ Patch25131: btrfs-relocate-csums-properly-with-prealloc-ext.patch #rhbz 984696 Patch25132: rt2800usb-slow-down-TX-status-polling.patch +#rhbz 1015558 +Patch25133: fix-buslogic.patch + # END OF PATCH DEFINITIONS %endif @@ -1497,6 +1500,9 @@ ApplyPatch btrfs-relocate-csums-properly-with-prealloc-ext.patch #rhbz 984696 ApplyPatch rt2800usb-slow-down-TX-status-polling.patch +#rhbz 1015558 +ApplyPatch fix-buslogic.patch + # END OF PATCH APPLICATIONS %endif @@ -2339,6 +2345,7 @@ fi # || || %changelog * Thu Oct 17 2013 Josh Boyer +- Add patch to fix BusLogic error (rhbz 1015558) - Fix rt2800usb polling timeouts and throughput issues (rhbz 984696) * Wed Oct 16 2013 Josh Boyer