Re: [PATCH] edd: Switch to refcounting PCI APIs
On Mon, 23 Apr 2007 14:52:55 +0100 Alan Cox <[EMAIL PROTECTED]> wrote: > Signed-off-by: Alan Cox <[EMAIL PROTECTED]> > > diff -u --new-file --recursive --exclude-from /usr/src/exclude > linux.vanilla-2.6.21-rc6-mm1/drivers/firmware/edd.c > linux-2.6.21-rc6-mm1/drivers/firmware/edd.c > --- linux.vanilla-2.6.21-rc6-mm1/drivers/firmware/edd.c 2007-04-12 > 14:14:43.0 +0100 > +++ linux-2.6.21-rc6-mm1/drivers/firmware/edd.c 2007-04-23 > 11:50:57.185158272 +0100 > @@ -669,7 +669,7 @@ > struct edd_info *info = edd_dev_get_info(edev); > > if (edd_dev_is_type(edev, "PCI")) { > - return pci_find_slot(info->params.interface_path.pci.bus, > + return pci_get_slot(info->params.interface_path.pci.bus, > > PCI_DEVFN(info->params.interface_path.pci.slot, > info->params.interface_path.pci. > function)); > @@ -682,9 +682,12 @@ > { > > struct pci_dev *pci_dev = edd_get_pci_dev(edev); > + int ret; > if (!pci_dev) > return 1; > - return sysfs_create_link(>kobj,_dev->dev.kobj,"pci_dev"); > + ret = sysfs_create_link(>kobj,_dev->dev.kobj,"pci_dev"); > + pci_dev_put(pci_dev); > + return ret; > } > This escaped notice: drivers/firmware/edd.c: In function 'edd_get_pci_dev': drivers/firmware/edd.c:673: warning: passing argument 1 of 'pci_get_slot' makes pointer from integer without a cast But this didn't: Calling initcall 0xc0534e00: edd_init+0x0/0x2c0() BIOS EDD facility v0.16 2004-Jun-25, 6 devices found BUG: unable to handle kernel NULL pointer dereference at virtual address 0014 printing eip: c029ed16 *pde = Oops: [#1] SMP Modules linked in: CPU:1 EIP:0060:[]Not tainted VLI EFLAGS: 00010286 (2.6.21-mm1 #2) EIP is at pci_get_slot+0x26/0x90 eax: c04e9280 ebx: ecx: 0204 edx: 0001 esi: 0020 edi: c0499789 ebp: c242ff30 esp: c242ff18 ds: 007b es: 007b fs: 00d8 gs: ss: 0068 Process swapper (pid: 1, ti=c242e000 task=c242d550 task.ti=c242e000) Stack: c04ff358 000d c242ff30 c01b8b6f c326ec0c c0568ac1 c242ff70 c053505e c326ec18 c04a2d9a 0081 0006 0001 c326ec18 c0568a92 c0568a92 c242ffe0 c05185c2 Call Trace: [] show_trace_log_lvl+0x1a/0x30 [] show_stack_log_lvl+0xa9/0xd0 [] show_registers+0x1e9/0x2f0 [] die+0x10f/0x240 [] do_page_fault+0x2d9/0x610 [] error_code+0x72/0x78 [] edd_init+0x25e/0x2c0 [] kernel_init+0x122/0x2f0 [] kernel_thread_helper+0x7/0x14 === Code: 5d c3 8d 76 00 55 89 e5 56 89 d6 53 89 c3 83 ec 10 89 e0 25 00 e0 ff ff f7 40 14 00 ff ff 0f 75 46 b8 80 92 4e c0 e8 2a 7b e9 ff <8b> 43 14 8d 4b 14 eb 04 89 f6 89 d0 8b 10 0f 18 02 90 39 c8 74 EIP: [] pci_get_slot+0x26/0x90 SS:ESP 0068:c242ff18 - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [PATCH] edd: Switch to refcounting PCI APIs
On Mon, 23 Apr 2007 14:52:55 +0100 Alan Cox [EMAIL PROTECTED] wrote: Signed-off-by: Alan Cox [EMAIL PROTECTED] diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla-2.6.21-rc6-mm1/drivers/firmware/edd.c linux-2.6.21-rc6-mm1/drivers/firmware/edd.c --- linux.vanilla-2.6.21-rc6-mm1/drivers/firmware/edd.c 2007-04-12 14:14:43.0 +0100 +++ linux-2.6.21-rc6-mm1/drivers/firmware/edd.c 2007-04-23 11:50:57.185158272 +0100 @@ -669,7 +669,7 @@ struct edd_info *info = edd_dev_get_info(edev); if (edd_dev_is_type(edev, PCI)) { - return pci_find_slot(info-params.interface_path.pci.bus, + return pci_get_slot(info-params.interface_path.pci.bus, PCI_DEVFN(info-params.interface_path.pci.slot, info-params.interface_path.pci. function)); @@ -682,9 +682,12 @@ { struct pci_dev *pci_dev = edd_get_pci_dev(edev); + int ret; if (!pci_dev) return 1; - return sysfs_create_link(edev-kobj,pci_dev-dev.kobj,pci_dev); + ret = sysfs_create_link(edev-kobj,pci_dev-dev.kobj,pci_dev); + pci_dev_put(pci_dev); + return ret; } This escaped notice: drivers/firmware/edd.c: In function 'edd_get_pci_dev': drivers/firmware/edd.c:673: warning: passing argument 1 of 'pci_get_slot' makes pointer from integer without a cast But this didn't: Calling initcall 0xc0534e00: edd_init+0x0/0x2c0() BIOS EDD facility v0.16 2004-Jun-25, 6 devices found BUG: unable to handle kernel NULL pointer dereference at virtual address 0014 printing eip: c029ed16 *pde = Oops: [#1] SMP Modules linked in: CPU:1 EIP:0060:[c029ed16]Not tainted VLI EFLAGS: 00010286 (2.6.21-mm1 #2) EIP is at pci_get_slot+0x26/0x90 eax: c04e9280 ebx: ecx: 0204 edx: 0001 esi: 0020 edi: c0499789 ebp: c242ff30 esp: c242ff18 ds: 007b es: 007b fs: 00d8 gs: ss: 0068 Process swapper (pid: 1, ti=c242e000 task=c242d550 task.ti=c242e000) Stack: c04ff358 000d c242ff30 c01b8b6f c326ec0c c0568ac1 c242ff70 c053505e c326ec18 c04a2d9a 0081 0006 0001 c326ec18 c0568a92 c0568a92 c242ffe0 c05185c2 Call Trace: [c0103e2a] show_trace_log_lvl+0x1a/0x30 [c0103ee9] show_stack_log_lvl+0xa9/0xd0 [c01040f9] show_registers+0x1e9/0x2f0 [c010430f] die+0x10f/0x240 [c0116369] do_page_fault+0x2d9/0x610 [c03e38ea] error_code+0x72/0x78 [c053505e] edd_init+0x25e/0x2c0 [c05185c2] kernel_init+0x122/0x2f0 [c0103a53] kernel_thread_helper+0x7/0x14 === Code: 5d c3 8d 76 00 55 89 e5 56 89 d6 53 89 c3 83 ec 10 89 e0 25 00 e0 ff ff f7 40 14 00 ff ff 0f 75 46 b8 80 92 4e c0 e8 2a 7b e9 ff 8b 43 14 8d 4b 14 eb 04 89 f6 89 d0 8b 10 0f 18 02 90 39 c8 74 EIP: [c029ed16] pci_get_slot+0x26/0x90 SS:ESP 0068:c242ff18 - To unsubscribe from this list: send the line unsubscribe linux-kernel in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
[PATCH] edd: Switch to refcounting PCI APIs
Signed-off-by: Alan Cox <[EMAIL PROTECTED]> diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla-2.6.21-rc6-mm1/drivers/firmware/edd.c linux-2.6.21-rc6-mm1/drivers/firmware/edd.c --- linux.vanilla-2.6.21-rc6-mm1/drivers/firmware/edd.c 2007-04-12 14:14:43.0 +0100 +++ linux-2.6.21-rc6-mm1/drivers/firmware/edd.c 2007-04-23 11:50:57.185158272 +0100 @@ -669,7 +669,7 @@ struct edd_info *info = edd_dev_get_info(edev); if (edd_dev_is_type(edev, "PCI")) { - return pci_find_slot(info->params.interface_path.pci.bus, + return pci_get_slot(info->params.interface_path.pci.bus, PCI_DEVFN(info->params.interface_path.pci.slot, info->params.interface_path.pci. function)); @@ -682,9 +682,12 @@ { struct pci_dev *pci_dev = edd_get_pci_dev(edev); + int ret; if (!pci_dev) return 1; - return sysfs_create_link(>kobj,_dev->dev.kobj,"pci_dev"); + ret = sysfs_create_link(>kobj,_dev->dev.kobj,"pci_dev"); + pci_dev_put(pci_dev); + return ret; } static inline void - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
[PATCH] edd: Switch to refcounting PCI APIs
Signed-off-by: Alan Cox [EMAIL PROTECTED] diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla-2.6.21-rc6-mm1/drivers/firmware/edd.c linux-2.6.21-rc6-mm1/drivers/firmware/edd.c --- linux.vanilla-2.6.21-rc6-mm1/drivers/firmware/edd.c 2007-04-12 14:14:43.0 +0100 +++ linux-2.6.21-rc6-mm1/drivers/firmware/edd.c 2007-04-23 11:50:57.185158272 +0100 @@ -669,7 +669,7 @@ struct edd_info *info = edd_dev_get_info(edev); if (edd_dev_is_type(edev, PCI)) { - return pci_find_slot(info-params.interface_path.pci.bus, + return pci_get_slot(info-params.interface_path.pci.bus, PCI_DEVFN(info-params.interface_path.pci.slot, info-params.interface_path.pci. function)); @@ -682,9 +682,12 @@ { struct pci_dev *pci_dev = edd_get_pci_dev(edev); + int ret; if (!pci_dev) return 1; - return sysfs_create_link(edev-kobj,pci_dev-dev.kobj,pci_dev); + ret = sysfs_create_link(edev-kobj,pci_dev-dev.kobj,pci_dev); + pci_dev_put(pci_dev); + return ret; } static inline void - To unsubscribe from this list: send the line unsubscribe linux-kernel in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/