add hook for PCI resource deallocation
Subsystems (7)
PATCH 1/1 add hook for PCI resource deallocation
Hi,
This patch adds a hook 'pcibios_disable_device()' into pci_disable_device() to call architecture specific PCI resource deallocation code. It's a opposite part of pcibios_enable_device(). We need this hook to deallocate architecture specific PCI resource such as IRQ resource, etc.. This patch is just for adding the hook, so pcibios_disable_device() is defined as a null function on all architecture so far.
I tested this patch on i386, x86_64 and ia64. But it has not been tested on other architectures because I don't have these machines.
---
linux-2.6.9-rc2-kanesige/arch/alpha/kernel/pci.c | 5 +++++ linux-2.6.9-rc2-kanesige/arch/arm/kernel/bios32.c | 4 ++++ linux-2.6.9-rc2-kanesige/arch/i386/pci/common.c | 4 ++++ linux-2.6.9-rc2-kanesige/arch/ia64/pci/pci.c | 5 +++++ linux-2.6.9-rc2-kanesige/arch/m68knommu/kernel/comempci.c | 4 ++++ linux-2.6.9-rc2-kanesige/arch/mips/pci/pci.c | 4 ++++ linux-2.6.9-rc2-kanesige/arch/mips/pmc-sierra/yosemite/ht.c | 5 +++++ linux-2.6.9-rc2-kanesige/arch/parisc/kernel/pci.c | 6 ++++++ linux-2.6.9-rc2-kanesige/arch/ppc/kernel/pci.c | 5 +++++ linux-2.6.9-rc2-kanesige/arch/ppc64/kernel/pci.c | 5 +++++ linux-2.6.9-rc2-kanesige/arch/sh/boards/overdrive/galileo.c | 4 ++++ linux-2.6.9-rc2-kanesige/arch/sh/drivers/pci/pci.c | 4 ++++ linux-2.6.9-rc2-kanesige/arch/sh64/kernel/pcibios.c | 5 +++++ linux-2.6.9-rc2-kanesige/arch/sparc/kernel/pcic.c | 4 ++++ linux-2.6.9-rc2-kanesige/arch/sparc64/kernel/pci.c | 4 ++++ linux-2.6.9-rc2-kanesige/arch/v850/kernel/rte_mb_a_pci.c | 6 ++++++ linux-2.6.9-rc2-kanesige/drivers/pci/pci.c | 2 ++ linux-2.6.9-rc2-kanesige/include/linux/pci.h | 1 + 18 files changed, 77 insertions(+)
arch/alpha/kernel/pci.c renamed from arch/alpha/kernel/pci.c~IRQ_deallocation_pci +5 -0
@@ -384,6 +384,11 @@ pcibios_enable_device(struct pci_dev *dereturn 0 ; } +void +pcibios_disable_device (struct pci_dev *dev) +{ +} +/* * If we set up a device for bus mastering, we need to check the latency * timer as certain firmware forgets to set it properly, as seen
arch/arm/kernel/bios32.c renamed from arch/arm/kernel/bios32.c~IRQ_deallocation_pci +4 -0
@@ -672,6 +672,10 @@ int pcibios_enable_device(struct pci_devreturn 0 ; } +void pcibios_disable_device (struct pci_dev *dev) +{ +} +int pci_mmap_page_range (struct pci_dev *dev,struct vm_area_struct *vma,enum pci_mmap_state mmap_state,int write_combine) {
arch/i386/pci/common.c renamed from arch/i386/pci/common.c~IRQ_deallocation_pci +4 -0
@@ -245,3 +245,7 @@ int pcibios_enable_device(struct pci_devreturn pcibios_enable_irq (dev); } + +void pcibios_disable_device (struct pci_dev *dev) +{ +}
arch/ia64/pci/pci.c renamed from arch/ia64/pci/pci.c~IRQ_deallocation_pci +5 -0
@@ -427,6 +427,11 @@ pcibios_enable_device (struct pci_dev *d }void +pcibios_disable_device (struct pci_dev *dev) +{ +} + +void pcibios_align_resource (void *data,struct resource *res,unsigned long size,unsigned long align) {
arch/m68knommu/kernel/comempci.c renamed from arch/m68knommu/kernel/comempci.c~IRQ_deallocation_pci +4 -0
@@ -373,6 +373,10 @@ int pcibios_enable_device(struct pci_devreturn (0 ); } +void pcibios_disable_device (struct pci_dev *dev) +{ +} +/*****************************************************************************/ void pcibios_update_resource (struct pci_dev *dev,struct resource *root,struct resource *r,int resource)
arch/mips/pci/pci.c renamed from arch/mips/pci/pci.c~IRQ_deallocation_pci +4 -0
@@ -226,6 +226,10 @@ int pcibios_enable_device(struct pci_devreturn 0 ; } +void pcibios_disable_device (struct pci_dev *dev) +{ +} +static void __init pcibios_fixup_device_resources (struct pci_dev *dev,struct pci_bus *bus) {
arch/mips/pmc-sierra/yosemite/ht.c renamed from arch/mips/pmc-sierra/yosemite/ht.c~IRQ_deallocation_pci +5 -0
@@ -348,6 +348,11 @@ int pcibios_enable_device(struct pci_dev } +void pcibios_disable_device (struct pci_dev *dev) +{ +} + +void pcibios_update_resource (struct pci_dev *dev,struct resource *root,struct resource *res,int resource)
arch/parisc/kernel/pci.c renamed from arch/parisc/kernel/pci.c~IRQ_deallocation_pci +6 -0
@@ -331,6 +331,12 @@ int pcibios_enable_device(struct pci_dev } +void +pcibios_disable_device (struct pci_dev *dev) +{ +} + +/* PA-RISC specific */ void pcibios_register_hba (struct pci_hba_data *hba) {
arch/ppc64/kernel/pci.c renamed from arch/ppc64/kernel/pci.c~IRQ_deallocation_pci +5 -0
@@ -348,6 +348,11 @@ int pcibios_enable_device(struct pci_devreturn 0 ; } +void +pcibios_disable_device (struct pci_dev *dev) +{ +} +/* * Return the domain number for this bus. */
arch/ppc/kernel/pci.c renamed from arch/ppc/kernel/pci.c~IRQ_deallocation_pci +5 -0
@@ -1430,6 +1430,11 @@ int pcibios_enable_device(struct pci_devreturn 0 ; } +void +pcibios_disable_device (struct pci_dev *dev) +{ +} +struct pci_controller *pci_bus_to_hose (int bus) {
arch/sh64/kernel/pcibios.c renamed from arch/sh64/kernel/pcibios.c~IRQ_deallocation_pci +5 -0
@@ -142,6 +142,11 @@ int pcibios_enable_device(struct pci_devreturn 0 ; } +void +pcibios_disable_device (struct pci_dev *dev) +{ +} +/* * If we set up a device for bus mastering, we need to check and set * the latency timer as it may not be properly set.
arch/sh/boards/overdrive/galileo.c renamed from arch/sh/boards/overdrive/galileo.c~IRQ_deallocation_pci +4 -0
@@ -529,6 +529,10 @@ int pcibios_enable_device(struct pci_dev } +void pcibios_disable_device (struct pci_dev *dev) +{ +} +/* We should do some optimisation work here I think. Ok for now though */ void __init pcibios_fixup_bus (struct pci_bus *bus) {
arch/sh/drivers/pci/pci.c renamed from arch/sh/drivers/pci/pci.c~IRQ_deallocation_pci +4 -0
@@ -127,6 +127,10 @@ int pcibios_enable_device(struct pci_devreturn 0 ; } +void pcibios_disable_device (struct pci_dev *dev) +{ +} +/* * If we set up a device for bus mastering, we need to check and set * the latency timer as it may not be properly set.
arch/sparc64/kernel/pci.c renamed from arch/sparc64/kernel/pci.c~IRQ_deallocation_pci +4 -0
@@ -502,6 +502,10 @@ int pcibios_enable_device(struct pci_devreturn 0 ; } +void pcibios_disable_device (struct pci_dev *pdev) +{ +} +void pcibios_resource_to_bus (struct pci_dev *pdev,struct pci_bus_region *region,struct resource *res) {
arch/sparc/kernel/pcic.c renamed from arch/sparc/kernel/pcic.c~IRQ_deallocation_pci +4 -0
@@ -871,6 +871,10 @@ int pcibios_enable_device(struct pci_devreturn 0 ; } +void pcibios_disable_device (struct pci_dev *pdev) +{ +} +/* * NMI */
arch/v850/kernel/rte_mb_a_pci.c renamed from arch/v850/kernel/rte_mb_a_pci.c~IRQ_deallocation_pci +6 -0
@@ -247,6 +247,12 @@ int __nomods_init pcibios_enable_devicereturn 0 ; } + +void +pcibios_disable_device (struct pci_dev *dev) +{ +} +/* Resource allocation. */ static void __devinit pcibios_assign_resources (void )
drivers/pci/pci.c renamed from drivers/pci/pci.c~IRQ_deallocation_pci +2 -0
@@ -406,6 +406,8 @@ pci_disable_device(struct pci_dev *dev) pci_command &= ~PCI_COMMAND_MASTER ;pci_write_config_word (dev,PCI_COMMAND , pci_command); } + +pcibios_disable_device (dev); }/**
include/linux/pci.h renamed from include/linux/pci.h~IRQ_deallocation_pci +1 -0
@@ -686,6 +686,7 @@ extern struct list_head pci_devices; /*void pcibios_fixup_bus (struct pci_bus *);int pcibios_enable_device (struct pci_dev *,int mask); +void pcibios_disable_device (struct pci_dev *);char *pcibios_setup (char *str);/* Used only when drivers/pci/setup.c is used */
_
Quoted 9 lines · Kenji Kaneshige
Hi,
This patch adds a hook '
pcibios_disable_device()' intopci_disable_device()to call architecture specific PCI resource deallocation code. It's a opposite part ofpcibios_enable_device(). We need this hook to deallocate architecture specific PCI resource such as IRQ resource, etc.. This patch is just for adding the hook, sopcibios_disable_device()is defined as a null function on all architecture so far.
I'd prefer to wait until there was an actual user of this hook before adding it to the kernel. Otherwise someone (likely me) will notice this hook in a few days and go, "hey, no one is using this, let's clean it up" :)
So, how about we wait until you have a patch that needs this before I apply it?
thanks,
greg k-h
Quoted 11 lines · Greg KH
Quoted 9 lines · Kenji Kaneshige
Hi,
This patch adds a hook '
pcibios_disable_device()' intopci_disable_device()to call architecture specific PCI resource deallocation code. It's a opposite part ofpcibios_enable_device(). We need this hook to deallocate architecture specific PCI resource such as IRQ resource, etc.. This patch is just for adding the hook, sopcibios_disable_device()is defined as a null function on all architecture so far.
Quoted 8 lines
I'd prefer to wait until there was an actual user of this hook before adding it to the kernel. Otherwise someone (likely me) will notice this hook in a few days and go, "hey, no one is using this, let's clean it up" :)
So, how about we wait until you have a patch that needs this before I apply it?
Okay.
I'll post a patch that needs this soon.
Thanks,
Kenji Kaneshige
Quoted 11 lines · Greg KH
Quoted 9 lines · Kenji Kaneshige
Hi,
This patch adds a hook '
pcibios_disable_device()' intopci_disable_device()to call architecture specific PCI resource deallocation code. It's a opposite part ofpcibios_enable_device(). We need this hook to deallocate architecture specific PCI resource such as IRQ resource, etc.. This patch is just for adding the hook, sopcibios_disable_device()is defined as a null function on all architecture so far.
Quoted 8 lines
I'd prefer to wait until there was an actual user of this hook before adding it to the kernel. Otherwise someone (likely me) will notice this hook in a few days and go, "hey, no one is using this, let's clean it up" :)
So, how about we wait until you have a patch that needs this before I apply it?
Greg,
Today, we have a PCI IRQ resource deallocation patch (please see the links below). Ia64 portion of IRQ resource deallocation patch is waiting this hook to be applied, because it depends on this hook.
So please apply this hook.
PCI IRQ resource deallocation patches:
http://marc.theaimsgroup.com/?l=linux-kernel&m=109575695503290&w=2
http://marc.theaimsgroup.com/?l=linux-kernel&m=109575695526462&w=2
http://marc.theaimsgroup.com/?l=linux-kernel&m=109575721322332&w=2
http://marc.theaimsgroup.com/?l=linux-kernel&m=109575753325729&w=2
Thanks,
Kenji Kaneshige
Quoted 11 lines · Kenji Kaneshige
Hi,
This patch adds a hook '
pcibios_disable_device()' intopci_disable_device()to call architecture specific PCI resource deallocation code. It's a opposite part ofpcibios_enable_device(). We need this hook to deallocate architecture specific PCI resource such as IRQ resource, etc.. This patch is just for adding the hook, sopcibios_disable_device()is defined as a null function on all architecture so far.
Quoted 5 lines
I tested this patch on i386,
x86_64and ia64. But it has not been tested on other architectures because I don't have these machines.Signed-off-by Kenji Kaneshige <[email protected]>
Hi Kenji
I think instead of modifying all the arch specific code, you could use the __attribute__(weak)
and define a default dummy funcion in drivers/pci/pci.c
void __attribute__((weak)) pcibios_disable_device(struct pci_dev *dev) { }
each arch that really needs this can define the override function. That way you dont need to put the dummy function in several places, containing your changes to a very few set of files.
Cheers,
ashok
Quoted 23 lines · Ashok Raj
Quoted 11 lines · Kenji Kaneshige
Hi,
This patch adds a hook '
pcibios_disable_device()' intopci_disable_device()to call architecture specific PCI resource deallocation code. It's a opposite part ofpcibios_enable_device(). We need this hook to deallocate architecture specific PCI resource such as IRQ resource, etc.. This patch is just for adding the hook, sopcibios_disable_device()is defined as a null function on all architecture so far.Quoted 5 lines
I tested this patch on i386,
x86_64and ia64. But it has not been tested on other architectures because I don't have these machines.Signed-off-by Kenji Kaneshige <[email protected]>Hi Kenji
I think instead of modifying all the arch specific code, you could use the
__attribute__(weak)
and define a default dummy funcion indrivers/pci/pci.c
Quoted 6 lines
void __attribute__((weak))
pcibios_disable_device(struct pci_dev *dev){ }each arch that really needs this can define the override function. That way you dont need to put the dummy function in several places, containing your changes to a very few set of files.
Ohhh, nice. I like that option better. Kenji, care to respin your patches based on this change?
thanks,
greg k-h
Hi Greg and Andrew,
I'm attaching updated patches for adding pcibiod_disable_device() hook based on the feedback from Ashok (Thank you, Ashok!).
I made two patches, one of them is against 2.6.9-rc2-mm1 and the another is against 2.6.9-rc2-mm4 to which the previous version of the patch has already been applyed. Please use the one convenient for you.
Thanks,
Kenji Kaneshige
Quoted 31 lines · Greg KH
Quoted 23 lines · Ashok Raj
Quoted 11 lines · Kenji Kaneshige
Hi,
This patch adds a hook '
pcibios_disable_device()' intopci_disable_device()to call architecture specific PCI resource deallocation code. It's a opposite part ofpcibios_enable_device(). We need this hook to deallocate architecture specific PCI resource such as IRQ resource, etc.. This patch is just for adding the hook, sopcibios_disable_device()is defined as a null function on all architecture so far.Quoted 5 lines
I tested this patch on i386,
x86_64and ia64. But it has not been tested on other architectures because I don't have these machines.Signed-off-by Kenji Kaneshige <[email protected]>Hi Kenji
I think instead of modifying all the arch specific code, you could use the
__attribute__(weak)
and define a default dummy funcion indrivers/pci/pci.cQuoted 6 lines
void __attribute__((weak))
pcibios_disable_device(struct pci_dev *dev){ }each arch that really needs this can define the override function. That way you dont need to put the dummy function in several places, containing your changes to a very few set of files.
Quoted 7 lines
Ohhh, nice. I like that option better. Kenji, care to respin your patches based on this change?
thanks,
greg k-h
Name: add_pcibios_disable_device_hook.patch
Kernel Version: 2.6.9-rc2-mm1
Depends: none
Change Log:
- Chaged to use __attrubute__ ((weak)) instead of modifying all arch specific code.
Description:
This patch adds a hook 'pcibios_disable_device()' into pci_disable_device() to call architecture specific PCI resource deallocation code. It's a opposite part of pcibios_enable_device(). We need this hook to deallocate architecture specific PCI resource such as IRQ resource, etc.. This patch is just for adding the hook, so 'pcibios_disable_device()' is defined as a null function on all architecture so far.
I tested this patch on i386, x86_64 and ia64. But it has not been tested on other architectures because I don't have these machines.
---
linux-2.6.9-rc2-mm1-kanesige/drivers/pci/pci.c | 12 ++++++++++++ 1 files changed, 12 insertions(+)
drivers/pci/pci.c renamed from drivers/pci/pci.c~add_pcibios_disable_device_hook +12 -0
@@ -392,6 +392,16 @@ pci_enable_device(struct pci_dev *dev) }/** +* pcibios_disable_device - disable arch specific PCI resources for device dev +* @dev: the PCI device to disable +* +* Disables architecture specific PCI resources for the device. This +* is the default implementation. Architecture implementations can +* override this. +*/ +void __attribute__ ((weak))pcibios_disable_device (struct pci_dev *dev) {} + +/** * pci_disable_device - Disable PCI device after use * @dev: PCI device to be disabled *
@@ -411,6 +421,8 @@ pci_disable_device(struct pci_dev *dev) pci_command &= ~PCI_COMMAND_MASTER ;pci_write_config_word (dev,PCI_COMMAND , pci_command); } + +pcibios_disable_device (dev); }/**
_
Kernel Version: 2.6.9-rc2-mm4
Depends: none.
Change Log:
- Chaged to use __attrubute__ ((weak)) instead of modifying all arch specific code.
Description:
This patch adds a hook 'pcibios_disable_device()' into pci_disable_device() to call architecture specific PCI resource deallocation code. It's a opposite part of pcibios_enable_device(). We need this hook to deallocate architecture specific PCI resource such as IRQ resource, etc.. This patch is just for adding the hook, so 'pcibios_disable_device()' is defined as a null function on all architecture so far.
I tested this patch on i386, x86_64 and ia64. But it has not been tested on other architectures because I don't have these machines.
---
linux-2.6.9-rc2-mm4-kanesige/arch/alpha/kernel/pci.c | 5 ----- linux-2.6.9-rc2-mm4-kanesige/arch/arm/kernel/bios32.c | 4 ---- linux-2.6.9-rc2-mm4-kanesige/arch/i386/pci/common.c | 4 ---- linux-2.6.9-rc2-mm4-kanesige/arch/ia64/pci/pci.c | 5 ----- linux-2.6.9-rc2-mm4-kanesige/arch/m68knommu/kernel/comempci.c | 4 ---- linux-2.6.9-rc2-mm4-kanesige/arch/mips/pci/pci.c | 4 ---- linux-2.6.9-rc2-mm4-kanesige/arch/mips/pmc-sierra/yosemite/ht.c | 5 ----- linux-2.6.9-rc2-mm4-kanesige/arch/parisc/kernel/pci.c | 6 ------ linux-2.6.9-rc2-mm4-kanesige/arch/ppc/kernel/pci.c | 5 ----- linux-2.6.9-rc2-mm4-kanesige/arch/ppc64/kernel/pci.c | 5 ----- linux-2.6.9-rc2-mm4-kanesige/arch/sh/boards/overdrive/galileo.c | 4 ---- linux-2.6.9-rc2-mm4-kanesige/arch/sh/drivers/pci/pci.c | 4 ---- linux-2.6.9-rc2-mm4-kanesige/arch/sh64/kernel/pcibios.c | 5 ----- linux-2.6.9-rc2-mm4-kanesige/arch/sparc/kernel/pcic.c | 4 ---- linux-2.6.9-rc2-mm4-kanesige/arch/sparc64/kernel/pci.c | 4 ---- linux-2.6.9-rc2-mm4-kanesige/arch/v850/kernel/rte_mb_a_pci.c | 6 ------ linux-2.6.9-rc2-mm4-kanesige/drivers/pci/pci.c | 10 ++++++++++ linux-2.6.9-rc2-mm4-kanesige/include/linux/pci.h | 1 - 18 files changed, 10 insertions(+), 75 deletions(-)
arch/alpha/kernel/pci.c renamed from arch/alpha/kernel/pci.c~add_pcibios_disable_device_hook +0 -5
@@ -381,11 +381,6 @@ pcibios_enable_device(struct pci_dev *dereturn 0 ; } -void -pcibios_disable_device (struct pci_dev *dev) -{ -} -/* * If we set up a device for bus mastering, we need to check the latency * timer as certain firmware forgets to set it properly, as seen
arch/arm/kernel/bios32.c renamed from arch/arm/kernel/bios32.c~add_pcibios_disable_device_hook +0 -4
@@ -672,10 +672,6 @@ int pcibios_enable_device(struct pci_devreturn 0 ; } -void pcibios_disable_device (struct pci_dev *dev) -{ -} -int pci_mmap_page_range (struct pci_dev *dev,struct vm_area_struct *vma,enum pci_mmap_state mmap_state,int write_combine) {
arch/i386/pci/common.c renamed from arch/i386/pci/common.c~add_pcibios_disable_device_hook +0 -4
@@ -249,7 +249,3 @@ int pcibios_enable_device(struct pci_devreturn pcibios_enable_irq (dev); } - -void pcibios_disable_device (struct pci_dev *dev) -{ -}
arch/ia64/pci/pci.c renamed from arch/ia64/pci/pci.c~add_pcibios_disable_device_hook +0 -5
@@ -449,11 +449,6 @@ pcibios_enable_device (struct pci_dev *d }void -pcibios_disable_device (struct pci_dev *dev) -{ -} - -void pcibios_align_resource (void *data,struct resource *res,unsigned long size,unsigned long align) {
arch/m68knommu/kernel/comempci.c renamed from arch/m68knommu/kernel/comempci.c~add_pcibios_disable_device_hook +0 -4
@@ -373,10 +373,6 @@ int pcibios_enable_device(struct pci_devreturn (0 ); } -void pcibios_disable_device (struct pci_dev *dev) -{ -} -/*****************************************************************************/ void pcibios_update_resource (struct pci_dev *dev,struct resource *root,struct resource *r,int resource)
arch/mips/pci/pci.c renamed from arch/mips/pci/pci.c~add_pcibios_disable_device_hook +0 -4
@@ -226,10 +226,6 @@ int pcibios_enable_device(struct pci_devreturn 0 ; } -void pcibios_disable_device (struct pci_dev *dev) -{ -} -static void __init pcibios_fixup_device_resources (struct pci_dev *dev,struct pci_bus *bus) {
arch/mips/pmc-sierra/yosemite/ht.c renamed from arch/mips/pmc-sierra/yosemite/ht.c~add_pcibios_disable_device_hook +0 -5
@@ -348,11 +348,6 @@ int pcibios_enable_device(struct pci_dev } -void pcibios_disable_device (struct pci_dev *dev) -{ -} - -void pcibios_update_resource (struct pci_dev *dev,struct resource *root,struct resource *res,int resource)
arch/parisc/kernel/pci.c renamed from arch/parisc/kernel/pci.c~add_pcibios_disable_device_hook +0 -6
@@ -331,12 +331,6 @@ int pcibios_enable_device(struct pci_dev } -void -pcibios_disable_device (struct pci_dev *dev) -{ -} - -/* PA-RISC specific */ void pcibios_register_hba (struct pci_hba_data *hba) {
arch/ppc64/kernel/pci.c renamed from arch/ppc64/kernel/pci.c~add_pcibios_disable_device_hook +0 -5
@@ -346,11 +346,6 @@ int pcibios_enable_device(struct pci_devreturn 0 ; } -void -pcibios_disable_device (struct pci_dev *dev) -{ -} -/* * Return the domain number for this bus. */
arch/ppc/kernel/pci.c renamed from arch/ppc/kernel/pci.c~add_pcibios_disable_device_hook +0 -5
@@ -1421,11 +1421,6 @@ int pcibios_enable_device(struct pci_devreturn 0 ; } -void -pcibios_disable_device (struct pci_dev *dev) -{ -} -struct pci_controller *pci_bus_to_hose (int bus) {
arch/sh64/kernel/pcibios.c renamed from arch/sh64/kernel/pcibios.c~add_pcibios_disable_device_hook +0 -5
@@ -142,11 +142,6 @@ int pcibios_enable_device(struct pci_devreturn 0 ; } -void -pcibios_disable_device (struct pci_dev *dev) -{ -} -/* * If we set up a device for bus mastering, we need to check and set * the latency timer as it may not be properly set.
arch/sh/boards/overdrive/galileo.c renamed from arch/sh/boards/overdrive/galileo.c~add_pcibios_disable_device_hook +0 -4
@@ -529,10 +529,6 @@ int pcibios_enable_device(struct pci_dev } -void pcibios_disable_device (struct pci_dev *dev) -{ -} -/* We should do some optimisation work here I think. Ok for now though */ void __init pcibios_fixup_bus (struct pci_bus *bus) {
arch/sh/drivers/pci/pci.c renamed from arch/sh/drivers/pci/pci.c~add_pcibios_disable_device_hook +0 -4
@@ -127,10 +127,6 @@ int pcibios_enable_device(struct pci_devreturn 0 ; } -void pcibios_disable_device (struct pci_dev *dev) -{ -} -/* * If we set up a device for bus mastering, we need to check and set * the latency timer as it may not be properly set.
arch/sparc64/kernel/pci.c renamed from arch/sparc64/kernel/pci.c~add_pcibios_disable_device_hook +0 -4
@@ -502,10 +502,6 @@ int pcibios_enable_device(struct pci_devreturn 0 ; } -void pcibios_disable_device (struct pci_dev *pdev) -{ -} -void pcibios_resource_to_bus (struct pci_dev *pdev,struct pci_bus_region *region,struct resource *res) {
arch/sparc/kernel/pcic.c renamed from arch/sparc/kernel/pcic.c~add_pcibios_disable_device_hook +0 -4
@@ -872,10 +872,6 @@ int pcibios_enable_device(struct pci_devreturn 0 ; } -void pcibios_disable_device (struct pci_dev *pdev) -{ -} -/* * NMI */
arch/v850/kernel/rte_mb_a_pci.c renamed from arch/v850/kernel/rte_mb_a_pci.c~add_pcibios_disable_device_hook +0 -6
@@ -247,12 +247,6 @@ int __nomods_init pcibios_enable_devicereturn 0 ; } - -void -pcibios_disable_device (struct pci_dev *dev) -{ -} -/* Resource allocation. */ static void __devinit pcibios_assign_resources (void )
drivers/pci/pci.c renamed from drivers/pci/pci.c~add_pcibios_disable_device_hook +10 -0
@@ -392,6 +392,16 @@ pci_enable_device(struct pci_dev *dev) }/** +* pcibios_disable_device - disable arch specific PCI resources for device dev +* @dev: the PCI device to disable +* +* Disables architecture specific PCI resources for the device. This +* is the default implementation. Architecture implementations can +* override this. +*/ +void __attribute__ ((weak))pcibios_disable_device (struct pci_dev *dev) {} + +/** * pci_disable_device - Disable PCI device after use * @dev: PCI device to be disabled *
include/linux/pci.h renamed from include/linux/pci.h~add_pcibios_disable_device_hook +0 -1
@@ -689,7 +689,6 @@ extern struct list_head pci_devices; /*void pcibios_fixup_bus (struct pci_bus *);int pcibios_enable_device (struct pci_dev *,int mask); -void pcibios_disable_device (struct pci_dev *);char *pcibios_setup (char *str);/* Used only when drivers/pci/setup.c is used */
_
Quoted 9 lines · Kenji Kaneshige
Hi Greg and Andrew,
I'm attaching updated patches for adding
pcibiod_disable_device()hook based on the feedback from Ashok (Thank you, Ashok!).I made two patches, one of them is against 2.6.9-rc2-mm1 and the another is against 2.6.9-rc2-mm4 to which the previous version of the patch has already been applyed. Please use the one convenient for you.
Based on all of the comments, I'll wait for you to incorporate them, so I'm not going to apply this one.
thanks,
greg k-h
Hi Greg,
Quoted 4 lines · Greg KH
Based on all of the comments, I'll wait for you to incorporate them, so I'm not going to apply this one.
Okay.
I'll be able to post an updated set of patches based on all of the comments soon.
Thanks,
Kenji Kaneshige
Quoted 3 lines · Kenji Kaneshige
I'm attaching updated patches for adding
pcibiod_disable_device()hook based on the feedback from Ashok (Thank you, Ashok!).
This appears to be a patch-reversed version of the patch which is already
in -mm:
ftp://ftp.kernel.org/pub/linux/kernel/people/akpm/patches/2.6/2.6.9-rc2/2.6.9-rc2-mm4/broken-out/add-hook-for-pci-resource-deallocation.patch
So I'm not sure what you're trying to do here.
Quoted 10 lines · Andrew Morton
Quoted 3 lines · Kenji Kaneshige
I'm attaching updated patches for adding
pcibiod_disable_device()hook based on the feedback from Ashok (Thank you, Ashok!).This appears to be a patch-reversed version of the patch which is already
in -mm:
ftp://ftp.kernel.org/pub/linux/kernel/people/akpm/patches/2.6/2.6.9-rc2/2.6.9-rc2-mm4/broken-out/add-hook-for-pci-resource-deallocation.patchSo I'm not sure what you're trying to do here.
In the original patch, Kenji added a dummy function in several source files. Instead now the new patch should have a single default implementation with a __attribute__((weak))
As a result its removing all the old additions and now keeping just a single default function.
so yes, its a reverse patch mostly, but there should also be a new function added with the weak attribute.
Signature · 3 lines
Cheers, Ashok Raj - Linux OS & Technology Team
Quoted 11 lines · Ashok Raj
Quoted 9 lines · Andrew Morton
Quoted 3 lines · Kenji Kaneshige
I'm attaching updated patches for adding
pcibiod_disable_device()hook based on the feedback from Ashok (Thank you, Ashok!).This appears to be a patch-reversed version of the patch which is already
in -mm:
ftp://ftp.kernel.org/pub/linux/kernel/people/akpm/patches/2.6/2.6.9-rc2/2.6.9-rc2-mm4/broken-out/add-hook-for-pci-resource-deallocation.patch
Quoted 7 lines
Quoted 1 line
So I'm not sure what you're trying to do here.
In the original patch, Kenji added a dummy function in several source files. Instead now the new patch should have a single default implementation with a __attribute__((weak))
As a result its removing all the old additions and now keeping just a single default function.
Oh. You may as well send a (chagelogged, signed off) new patch against current -linus in that case.
Quoted 15 lines · Andrew Morton
Quoted 14 lines · Ashok Raj
Quoted 10 lines · Andrew Morton
Quoted 3 lines · Kenji Kaneshige
I'm attaching updated patches for adding
pcibiod_disable_device()hook based on the feedback from Ashok (Thank you, Ashok!).This appears to be a patch-reversed version of the patch which is already
in -mm:
ftp://ftp.kernel.org/pub/linux/kernel/people/akpm/patches/2.6/2.6.9-rc2/2.6.9-rc2-mm4/broken-out/add-hook-for-pci-resource-deallocation.patchSo I'm not sure what you're trying to do here.
Quoted 8 lines
Quoted 4 lines
In the original patch, Kenji added a dummy function in several source files. Instead now the new patch should have a single default implementation with a __attribute__((weak))
As a result its removing all the old additions and now keeping just a single default function.
Oh. You may as well send a (chagelogged, signed off) new patch against current -linus in that case.
I'm sorry about that.
Please use the following patch.
Thanks,
Kenji Kaneshige
Name: add_pcibios_disable_device_hook.patch
Kernel Version: 2.6.9-rc2-mm1
Depends: none
Change Log:
- Chaged to use __attrubute__ ((weak)) instead of modifying all arch specific code.
Description:
This patch adds a hook 'pcibios_disable_device()' into pci_disable_device() to call architecture specific PCI resource deallocation code. It's a opposite part of pcibios_enable_device(). We need this hook to deallocate architecture specific PCI resource such as IRQ resource, etc.. This patch is just for adding the hook, so 'pcibios_disable_device()' is defined as a null function on all architecture so far.
I tested this patch on i386, x86_64 and ia64. But it has not been tested on other architectures because I don't have these machines.
---
linux-2.6.9-rc2-mm1-kanesige/drivers/pci/pci.c | 12 ++++++++++++
1 files changed, 12 insertions(+)
drivers/pci/pci.c renamed from drivers/pci/pci.c~add_pcibios_disable_device_hook +0 -0
@@ -392,6 +392,16 @@ pci_enable_device(struct pci_dev *dev)
}
/**
+ * pcibios_disable_device - disable arch specific PCI resources for device dev
+ * @dev: the PCI device to disable
+ *
+ * Disables architecture specific PCI resources for the device. This
+ * is the default implementation. Architecture implementations can
+ * override this.
+ */
+void __attribute__ ((weak)) pcibios_disable_device (struct pci_dev *dev) {} +
+/**
* pci_disable_device - Disable PCI device after use
* @dev: PCI device to be disabled
*
@@ -411,6 +421,8 @@ pci_disable_device(struct pci_dev *dev)
pci_command &= ~PCI_COMMAND_MASTER; pci_write_config_word(dev, PCI_COMMAND, pci_command); }
+
+ pcibios_disable_device(dev);
}
/**
_