Skip to contentSkip to conversation

add hook for PCI resource deallocation

PATCH In review Kenji Kaneshige 4 participants 13 messages Sep 16, 2004 – Oct 1, 2004

Subsystems (7)
Arm (32-bit) PCI MIPS SuperH +3 more subsystems
lore
Share & tools
lore
#0 lore raw

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
diff -puN arch/alpha/kernel/pci.c~IRQ_deallocation_pci arch/alpha/kernel/pci.c
@@ -384,6 +384,11 @@ pcibios_enable_device(struct pci_dev *de
 	return 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
diff -puN arch/arm/kernel/bios32.c~IRQ_deallocation_pci arch/arm/kernel/bios32.c
@@ -672,6 +672,10 @@ int pcibios_enable_device(struct pci_dev
 	return 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
diff -puN arch/i386/pci/common.c~IRQ_deallocation_pci arch/i386/pci/common.c
@@ -245,3 +245,7 @@ int pcibios_enable_device(struct pci_dev
 
 	return 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
diff -puN arch/ia64/pci/pci.c~IRQ_deallocation_pci arch/ia64/pci/pci.c
@@ -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
diff -puN arch/m68knommu/kernel/comempci.c~IRQ_deallocation_pci arch/m68knommu/kernel/comempci.c
@@ -373,6 +373,10 @@ int pcibios_enable_device(struct pci_dev
 	return(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
diff -puN arch/mips/pci/pci.c~IRQ_deallocation_pci arch/mips/pci/pci.c
@@ -226,6 +226,10 @@ int pcibios_enable_device(struct pci_dev
 	return 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
diff -puN arch/mips/pmc-sierra/yosemite/ht.c~IRQ_deallocation_pci arch/mips/pmc-sierra/yosemite/ht.c
@@ -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
diff -puN arch/parisc/kernel/pci.c~IRQ_deallocation_pci arch/parisc/kernel/pci.c
@@ -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
diff -puN arch/ppc64/kernel/pci.c~IRQ_deallocation_pci arch/ppc64/kernel/pci.c
@@ -348,6 +348,11 @@ int pcibios_enable_device(struct pci_dev
 	return 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
diff -puN arch/ppc/kernel/pci.c~IRQ_deallocation_pci arch/ppc/kernel/pci.c
@@ -1430,6 +1430,11 @@ int pcibios_enable_device(struct pci_dev
 	return 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
diff -puN arch/sh64/kernel/pcibios.c~IRQ_deallocation_pci arch/sh64/kernel/pcibios.c
@@ -142,6 +142,11 @@ int pcibios_enable_device(struct pci_dev
 	return 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
diff -puN arch/sh/boards/overdrive/galileo.c~IRQ_deallocation_pci arch/sh/boards/overdrive/galileo.c
@@ -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
diff -puN arch/sh/drivers/pci/pci.c~IRQ_deallocation_pci arch/sh/drivers/pci/pci.c
@@ -127,6 +127,10 @@ int pcibios_enable_device(struct pci_dev
 	return 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
diff -puN arch/sparc64/kernel/pci.c~IRQ_deallocation_pci arch/sparc64/kernel/pci.c
@@ -502,6 +502,10 @@ int pcibios_enable_device(struct pci_dev
 	return 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
diff -puN arch/sparc/kernel/pcic.c~IRQ_deallocation_pci arch/sparc/kernel/pcic.c
@@ -871,6 +871,10 @@ int pcibios_enable_device(struct pci_dev
 	return 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
diff -puN arch/v850/kernel/rte_mb_a_pci.c~IRQ_deallocation_pci arch/v850/kernel/rte_mb_a_pci.c
@@ -247,6 +247,12 @@ int __nomods_init pcibios_enable_device 
 	return 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
diff -puN drivers/pci/pci.c~IRQ_deallocation_pci drivers/pci/pci.c
@@ -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
diff -puN include/linux/pci.h~IRQ_deallocation_pci include/linux/pci.h
@@ -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 */

_

#1 lore raw
Quoted 9 lines · Kenji Kaneshige

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'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

#2 lore raw
Quoted 11 lines · Greg KH
Quoted 9 lines · Kenji Kaneshige

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.

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

#3 lore raw
In reply to Greg KH
Quoted 11 lines · Greg KH
Quoted 9 lines · Kenji Kaneshige

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.

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

#4 lore raw
In reply to Kenji Kaneshige
Quoted 11 lines · Kenji Kaneshige

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.

Quoted 5 lines

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.

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

#5 lore raw
Quoted 23 lines · Ashok Raj
Quoted 11 lines · Kenji Kaneshige

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.

Quoted 5 lines

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.

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

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

#6 lore raw

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()' 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.

Quoted 5 lines

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.

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

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.

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
diff -puN drivers/pci/pci.c~add_pcibios_disable_device_hook drivers/pci/pci.c
@@ -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
diff -puN arch/alpha/kernel/pci.c~add_pcibios_disable_device_hook arch/alpha/kernel/pci.c
@@ -381,11 +381,6 @@ pcibios_enable_device(struct pci_dev *de
 	return 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
diff -puN arch/arm/kernel/bios32.c~add_pcibios_disable_device_hook arch/arm/kernel/bios32.c
@@ -672,10 +672,6 @@ int pcibios_enable_device(struct pci_dev
 	return 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
diff -puN arch/i386/pci/common.c~add_pcibios_disable_device_hook arch/i386/pci/common.c
@@ -249,7 +249,3 @@ int pcibios_enable_device(struct pci_dev
 
 	return 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
diff -puN arch/ia64/pci/pci.c~add_pcibios_disable_device_hook arch/ia64/pci/pci.c
@@ -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
diff -puN arch/m68knommu/kernel/comempci.c~add_pcibios_disable_device_hook arch/m68knommu/kernel/comempci.c
@@ -373,10 +373,6 @@ int pcibios_enable_device(struct pci_dev
 	return(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
diff -puN arch/mips/pci/pci.c~add_pcibios_disable_device_hook arch/mips/pci/pci.c
@@ -226,10 +226,6 @@ int pcibios_enable_device(struct pci_dev
 	return 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
diff -puN arch/mips/pmc-sierra/yosemite/ht.c~add_pcibios_disable_device_hook arch/mips/pmc-sierra/yosemite/ht.c
@@ -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
diff -puN arch/parisc/kernel/pci.c~add_pcibios_disable_device_hook arch/parisc/kernel/pci.c
@@ -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
diff -puN arch/ppc64/kernel/pci.c~add_pcibios_disable_device_hook arch/ppc64/kernel/pci.c
@@ -346,11 +346,6 @@ int pcibios_enable_device(struct pci_dev
 	return 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
diff -puN arch/ppc/kernel/pci.c~add_pcibios_disable_device_hook arch/ppc/kernel/pci.c
@@ -1421,11 +1421,6 @@ int pcibios_enable_device(struct pci_dev
 	return 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
diff -puN arch/sh64/kernel/pcibios.c~add_pcibios_disable_device_hook arch/sh64/kernel/pcibios.c
@@ -142,11 +142,6 @@ int pcibios_enable_device(struct pci_dev
 	return 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
diff -puN arch/sh/boards/overdrive/galileo.c~add_pcibios_disable_device_hook arch/sh/boards/overdrive/galileo.c
@@ -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
diff -puN arch/sh/drivers/pci/pci.c~add_pcibios_disable_device_hook arch/sh/drivers/pci/pci.c
@@ -127,10 +127,6 @@ int pcibios_enable_device(struct pci_dev
 	return 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
diff -puN arch/sparc64/kernel/pci.c~add_pcibios_disable_device_hook arch/sparc64/kernel/pci.c
@@ -502,10 +502,6 @@ int pcibios_enable_device(struct pci_dev
 	return 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
diff -puN arch/sparc/kernel/pcic.c~add_pcibios_disable_device_hook arch/sparc/kernel/pcic.c
@@ -872,10 +872,6 @@ int pcibios_enable_device(struct pci_dev
 	return 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
diff -puN arch/v850/kernel/rte_mb_a_pci.c~add_pcibios_disable_device_hook arch/v850/kernel/rte_mb_a_pci.c
@@ -247,12 +247,6 @@ int __nomods_init pcibios_enable_device 
 	return 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
diff -puN drivers/pci/pci.c~add_pcibios_disable_device_hook drivers/pci/pci.c
@@ -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
diff -puN include/linux/pci.h~add_pcibios_disable_device_hook include/linux/pci.h
@@ -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 */

_

#7 lore raw
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

#8 lore raw

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

#9 lore raw
In reply to 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.

#10 lore raw
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.patch

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.

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
#11 lore raw
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.

#12 lore raw
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.patch

So 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
diff -puN drivers/pci/pci.c~add_pcibios_disable_device_hook drivers/pci/pci.c
@@ -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);
}

/**

_