PCI: Clean up build for CONFIG_PCI_QUIRKS unset
PATCH 1/1 PCI: Clean up build for CONFIG_PCI_QUIRKS unset
From: Rafael J. Wysocki <[email protected]>
Currently, drivers/pci/quirks.c is built unconditionally, but if CONFIG_PCI_QUIRKS is unset, the only things actually built in this file are definitions of global variables and empty functions (due to the #ifdef CONFIG_PCI_QUIRKS embracing all of the code inside the file). This is not particularly nice and if someone overlooks the #ifdef CONFIG_PCI_QUIRKS, build errors are introduced.
To clean that up, move the definitions of the global variables in quirks.c that are always built to pci.c, move the definitions of the empty functions (compiled when CONFIG_PCI_QUIRKS is unset) to headers (additionally make these functions static inline) and modify drivers/pci/Makefile so that quirks.c is only built if CONFIG_PCI_QUIRKS is set.
---
I thought it might be useful to do something like this.
Please let me know what you think.
Rafael
--- drivers/pci/Makefile | 4 +++- drivers/pci/pci.c | 7 ++++++- drivers/pci/pci.h | 7 +++++++ drivers/pci/quirks.c | 14 ++------------ include/linux/pci.h | 6 +++++- 5 files changed, 23 insertions(+), 15 deletions(-)
drivers/pci/Makefile +3 -1
@@ -2,12 +2,14 @@ # Makefile for the PCI bus specific drivers. # -obj-y += access.o bus.o probe.o remove.o pci.o quirks.o \ +obj-y += access.o bus.o probe.o remove.o pci.o \ pci-driver.o search.o pci-sysfs.o rom.o setup-res.o \ irq.o obj-$(CONFIG_PROC_FS) += proc.o obj-$(CONFIG_SYSFS) += slot.o +obj-$(CONFIG_PCI_QUIRKS) += quirks.o + obj-$(CONFIG_PCI_LEGACY) += legacy.o CFLAGS_legacy.o += -Wno-deprecated-declarations
drivers/pci/pci.c +6 -1
@@ -19,7 +19,6 @@#include <linux/pci-aspm.h> #include <linux/pm_wakeup.h> #include <linux/interrupt.h> -#include <asm/dma.h> /* isa_dma_bridge_buggy */ #include <linux/device.h> #include <linux/pm_runtime.h> #include <asm/setup.h>
@@ -30,6 +29,12 @@ const char *pci_power_names[] = { };EXPORT_SYMBOL_GPL (pci_power_names); +int isa_dma_bridge_buggy; +EXPORT_SYMBOL (isa_dma_bridge_buggy); + +int pci_pci_problems; +EXPORT_SYMBOL (pci_pci_problems); +unsigned int pci_pm_d3_delay;static void pci_dev_d3_sleep (struct pci_dev *dev)
drivers/pci/quirks.c +2 -12
@@ -25,14 +25,9 @@#include <linux/dmi.h> #include <linux/pci-aspm.h> #include <linux/ioport.h> +#include <asm/dma.h> /* isa_dma_bridge_buggy */ #include "pci.h" -int isa_dma_bridge_buggy; -EXPORT_SYMBOL (isa_dma_bridge_buggy); -int pci_pci_problems; -EXPORT_SYMBOL (pci_pci_problems); - -#ifdef CONFIG_PCI_QUIRKS /* * This quirk function disables memory decoding and releases memory resources * of the device specified by kernel's boot parameter 'pci=resource_alignment='.
@@ -2595,6 +2590,7 @@ void pci_fixup_device(enum pci_fixup_pas }pci_do_fixups (dev, start, end); } +EXPORT_SYMBOL (pci_fixup_device);static int __init pci_apply_final_quirks (void ) {
@@ -2706,9 +2702,3 @@ int pci_dev_specific_reset(struct pci_dereturn -ENOTTY ; } - -#else -void pci_fixup_device (enum pci_fixup_pass pass,struct pci_dev *dev) {} -int pci_dev_specific_reset (struct pci_dev *dev,int probe) {return -ENOTTY ; } -#endif -EXPORT_SYMBOL (pci_fixup_device);
include/linux/pci.h +5 -1
@@ -1246,8 +1246,12 @@ enum pci_fixup_pass { DECLARE_PCI_FIXUP_SECTION(.pci_fixup_suspend, \ suspend##vendor##device##hook, vendor, device, hook) - +#ifdef CONFIG_PCI_QUIRKS void pci_fixup_device (enum pci_fixup_pass pass,struct pci_dev *dev); +#else +static inline void pci_fixup_device (enum pci_fixup_pass pass, +struct pci_dev *dev) {} +#endif void __iomem *pcim_iomap (struct pci_dev *pdev,int bar,unsigned long maxlen);void pcim_iounmap (struct pci_dev *pdev,void __iomem *addr);
drivers/pci/pci.h +7 -0
@@ -328,6 +328,13 @@ struct pci_dev_reset_methods { int (*reset)(struct pci_dev *dev, int probe); }; +#ifdef CONFIG_PCI_QUIRKS extern int pci_dev_specific_reset (struct pci_dev *dev,int probe); +#else +static inline int pci_dev_specific_reset (struct pci_dev *dev,int probe) +{ +return -ENOTTY ; +} +#endif #endif /* DRIVERS_PCI_H */
Quoted 16 lines · On Sat, 2 Jan 2010 22:57:24 +0100 "Rafael J. Wysocki" <[email protected]> wrote:
From: Rafael J. Wysocki <[email protected]>
Currently,
drivers/pci/quirks.cis built unconditionally, but ifCONFIG_PCI_QUIRKSis unset, the only things actually built in this file are definitions of global variables and empty functions (due to the #ifdefCONFIG_PCI_QUIRKSembracing all of the code inside the file). This is not particularly nice and if someone overlooks the #ifdefCONFIG_PCI_QUIRKS, build errors are introduced.To clean that up, move the definitions of the global variables in
quirks.cthat are always built topci.c, move the definitions of the empty functions (compiled whenCONFIG_PCI_QUIRKSis unset) to headers (additionally make these functions static inline) and modifydrivers/pci/Makefileso thatquirks.cis only built ifCONFIG_PCI_QUIRKSis set.
Quoted 6 lines
Signed-off-by Rafael J. Wysocki <[email protected]>---
I thought it might be useful to do something like this.
Please let me know what you think.
Thanks Rafael, I actually had a fix for this already from Dexuan, but I guess Linus applied yours instead.
Thanks for the fix.
Signature · 1 line
Jesse Barnes, Intel Open Source Technology Center
Quoted 22 lines · On Mon, 4 Jan 2010 08:34:01 -0800 Jesse Barnes <[email protected]> wrote:
Quoted 19 lines · On Sat, 2 Jan 2010 22:57:24 +0100 "Rafael J. Wysocki" <[email protected]> wrote:
From: Rafael J. Wysocki <[email protected]>
Currently,
drivers/pci/quirks.cis built unconditionally, but ifCONFIG_PCI_QUIRKSis unset, the only things actually built in this file are definitions of global variables and empty functions (due to the #ifdefCONFIG_PCI_QUIRKSembracing all of the code inside the file). This is not particularly nice and if someone overlooks the #ifdefCONFIG_PCI_QUIRKS, build errors are introduced.To clean that up, move the definitions of the global variables in
quirks.cthat are always built topci.c, move the definitions of the empty functions (compiled whenCONFIG_PCI_QUIRKSis unset) to headers (additionally make these functions static inline) and modifydrivers/pci/Makefileso thatquirks.cis only built ifCONFIG_PCI_QUIRKSis set.Signed-off-by Rafael J. Wysocki <[email protected]>---
Quoted 9 lines
Quoted 3 lines
I thought it might be useful to do something like this.
Please let me know what you think.
Thanks Rafael, I actually had a fix for this already from Dexuan, but I guess Linus applied yours instead.
Thanks for the fix.
Oops this is a cleanup of the fix. Will queue it up.
Thanks,
Signature · 1 line
Jesse Barnes, Intel Open Source Technology Center
Jesse Barnes
AppliedQuoted 16 lines · On Sat, 2 Jan 2010 22:57:24 +0100 "Rafael J. Wysocki" <[email protected]> wrote:
From: Rafael J. Wysocki <[email protected]>
Currently,
drivers/pci/quirks.cis built unconditionally, but ifCONFIG_PCI_QUIRKSis unset, the only things actually built in this file are definitions of global variables and empty functions (due to the #ifdefCONFIG_PCI_QUIRKSembracing all of the code inside the file). This is not particularly nice and if someone overlooks the #ifdefCONFIG_PCI_QUIRKS, build errors are introduced.To clean that up, move the definitions of the global variables in
quirks.cthat are always built topci.c, move the definitions of the empty functions (compiled whenCONFIG_PCI_QUIRKSis unset) to headers (additionally make these functions static inline) and modifydrivers/pci/Makefileso thatquirks.cis only built ifCONFIG_PCI_QUIRKSis set.
Quoted 6 lines
Signed-off-by Rafael J. Wysocki <[email protected]>---
I thought it might be useful to do something like this.
Please let me know what you think.
Applied to my linux-next branch, thanks.
Signature · 1 line
Jesse Barnes, Intel Open Source Technology Center