Re: [PATCH] x86/PCI: adjust section annotations

From: Bjorn Helgaas
Date: Wed Jun 20 2012 - 20:07:14 EST


On Mon, Jun 18, 2012 at 4:34 AM, Jan Beulich <JBeulich@xxxxxxxx> wrote:
> DMI tables referenced from __init code only can be __initconst, and as
> a result the functions referenced from there can become __init.
>
> pcibios_setup() can be __init as being a command line parsing function
> only.
>
> A few other variables can then also have their attributes adjusted.

This seems OK as far as it goes.

However, if you're going to make pcibios_setup() __init for x86, I'd
really encourage you to make it consistent across all the other
architectures. And if you do *that*, I think it would be cool if you
supplied a generic do-nothing "weak" version in the PCI core. That
would allow you to remove it altogether from alpha, ia64, microblaze,
mips pmc-sierra, parisc, powerpc, sh, sparc, tile, and xtensa.

CRIS-folk: It would also fix what looks like a bug in cris, which
implements pcibios_setup() such that pci_setup() doesn't even look for
all the supposedly generic options.

> Signed-off-by: Jan Beulich <jbeulich@xxxxxxxx>
>
> ---
>  arch/x86/pci/common.c |   22 +++++++++++-----------
>  1 file changed, 11 insertions(+), 11 deletions(-)
>
> --- 3.5-rc3/arch/x86/pci/common.c
> +++ 3.5-rc3-x86-pci-common-sections/arch/x86/pci/common.c
> @@ -21,10 +21,10 @@
>  unsigned int pci_probe = PCI_PROBE_BIOS | PCI_PROBE_CONF1 | PCI_PROBE_CONF2 |
>                                PCI_PROBE_MMCONF;
>
> -unsigned int pci_early_dump_regs;
> -static int pci_bf_sort;
> -static int smbios_type_b1_flag;
> -int pci_routeirq;
> +unsigned int __initdata pci_early_dump_regs;
> +static int __devinitdata pci_bf_sort;
> +static int __devinitdata smbios_type_b1_flag;
> +int __initdata pci_routeirq;
>  int noioapicquirk;
>  #ifdef CONFIG_X86_REROUTE_FOR_BROKEN_BOOT_IRQS
>  int noioapicreroute = 0;
> @@ -32,7 +32,7 @@ int noioapicreroute = 0;
>  int noioapicreroute = 1;
>  #endif
>  int pcibios_last_bus = -1;
> -unsigned long pirq_table_addr;
> +unsigned long __initdata pirq_table_addr;
>  struct pci_bus *pci_root_bus;
>  const struct pci_raw_ops *__read_mostly raw_pci_ops;
>  const struct pci_raw_ops *__read_mostly raw_pci_ext_ops;
> @@ -80,14 +80,14 @@ struct pci_ops pci_root_ops = {
>  */
>  DEFINE_RAW_SPINLOCK(pci_config_lock);
>
> -static int __devinit can_skip_ioresource_align(const struct dmi_system_id *d)
> +static int __init can_skip_ioresource_align(const struct dmi_system_id *d)
>  {
>        pci_probe |= PCI_CAN_SKIP_ISA_ALIGN;
>        printk(KERN_INFO "PCI: %s detected, can skip ISA alignment\n", d->ident);
>        return 0;
>  }
>
> -static const struct dmi_system_id can_skip_pciprobe_dmi_table[] __devinitconst = {
> +static const struct dmi_system_id can_skip_pciprobe_dmi_table[] __initconst = {
>  /*
>  * Systems where PCI IO resource ISA alignment can be skipped
>  * when the ISA enable bit in the bridge control is not set
> @@ -221,7 +221,7 @@ static int __devinit find_sort_method(co
>  * Enable renumbering of PCI bus# ranges to reach all PCI busses (Cardbus)
>  */
>  #ifdef __i386__
> -static int __devinit assign_all_busses(const struct dmi_system_id *d)
> +static int __init assign_all_busses(const struct dmi_system_id *d)
>  {
>        pci_probe |= PCI_ASSIGN_ALL_BUSSES;
>        printk(KERN_INFO "%s detected: enabling PCI bus# renumbering"
> @@ -230,7 +230,7 @@ static int __devinit assign_all_busses(c
>  }
>  #endif
>
> -static int __devinit set_scan_all(const struct dmi_system_id *d)
> +static int __init set_scan_all(const struct dmi_system_id *d)
>  {
>        printk(KERN_INFO "PCI: %s detected, enabling pci=pcie_scan_all\n",
>               d->ident);
> @@ -238,7 +238,7 @@ static int __devinit set_scan_all(const
>        return 0;
>  }
>
> -static const struct dmi_system_id __devinitconst pciprobe_dmi_table[] = {
> +static const struct dmi_system_id __initconst pciprobe_dmi_table[] = {
>  #ifdef __i386__
>  /*
>  * Laptops which need pci=assign-busses to see Cardbus cards
> @@ -494,7 +494,7 @@ int __init pcibios_init(void)
>        return 0;
>  }
>
> -char * __devinit  pcibios_setup(char *str)
> +char *__init pcibios_setup(char *str)
>  {
>        if (!strcmp(str, "off")) {
>                pci_probe = 0;
>
>
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to majordomo@xxxxxxxxxxxxxxx
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at  http://www.tux.org/lkml/
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/