PCI: acpiphp: Keep driver loaded even if no slots found
Could have root bus hot-added later and there may be slots that need acpiphp. The result returned by acpiphp_get_num_slots() is meaningless, because the bridge the slots are under may be added after this function has been called, so drop acpiphp_get_num_slots() and the code using it. Signed-off-by: Yinghai Lu <yinghai@kernel.org> Signed-off-by: Bjorn Helgaas <bhelgaas@google.com> Acked-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
This commit is contained in:
parent
121b090e7d
commit
d59f53bc9b
|
@ -193,7 +193,6 @@ extern void acpiphp_unregister_hotplug_slot(struct acpiphp_slot *slot);
|
||||||
/* acpiphp_glue.c */
|
/* acpiphp_glue.c */
|
||||||
extern int acpiphp_glue_init (void);
|
extern int acpiphp_glue_init (void);
|
||||||
extern void acpiphp_glue_exit (void);
|
extern void acpiphp_glue_exit (void);
|
||||||
extern int acpiphp_get_num_slots (void);
|
|
||||||
typedef int (*acpiphp_callback)(struct acpiphp_slot *slot, void *data);
|
typedef int (*acpiphp_callback)(struct acpiphp_slot *slot, void *data);
|
||||||
|
|
||||||
extern int acpiphp_enable_slot (struct acpiphp_slot *slot);
|
extern int acpiphp_enable_slot (struct acpiphp_slot *slot);
|
||||||
|
|
|
@ -50,7 +50,6 @@
|
||||||
bool acpiphp_debug;
|
bool acpiphp_debug;
|
||||||
|
|
||||||
/* local variables */
|
/* local variables */
|
||||||
static int num_slots;
|
|
||||||
static struct acpiphp_attention_info *attention_info;
|
static struct acpiphp_attention_info *attention_info;
|
||||||
|
|
||||||
#define DRIVER_VERSION "0.5"
|
#define DRIVER_VERSION "0.5"
|
||||||
|
@ -272,25 +271,6 @@ static int get_adapter_status(struct hotplug_slot *hotplug_slot, u8 *value)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int __init init_acpi(void)
|
|
||||||
{
|
|
||||||
int retval;
|
|
||||||
|
|
||||||
/* initialize internal data structure etc. */
|
|
||||||
retval = acpiphp_glue_init();
|
|
||||||
|
|
||||||
/* read initial number of slots */
|
|
||||||
if (!retval) {
|
|
||||||
num_slots = acpiphp_get_num_slots();
|
|
||||||
if (num_slots == 0) {
|
|
||||||
acpiphp_glue_exit();
|
|
||||||
retval = -ENODEV;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return retval;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* release_slot - free up the memory used by a slot
|
* release_slot - free up the memory used by a slot
|
||||||
* @hotplug_slot: slot to free
|
* @hotplug_slot: slot to free
|
||||||
|
@ -379,7 +359,8 @@ static int __init acpiphp_init(void)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
/* read all the ACPI info from the system */
|
/* read all the ACPI info from the system */
|
||||||
return init_acpi();
|
/* initialize internal data structure etc. */
|
||||||
|
return acpiphp_glue_init();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1416,28 +1416,6 @@ void acpiphp_glue_exit(void)
|
||||||
acpi_pci_unregister_driver(&acpi_pci_hp_driver);
|
acpi_pci_unregister_driver(&acpi_pci_hp_driver);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* acpiphp_get_num_slots - count number of slots in a system
|
|
||||||
*/
|
|
||||||
int __init acpiphp_get_num_slots(void)
|
|
||||||
{
|
|
||||||
struct acpiphp_bridge *bridge;
|
|
||||||
int num_slots = 0;
|
|
||||||
|
|
||||||
list_for_each_entry(bridge, &bridge_list, list) {
|
|
||||||
dbg("Bus %04x:%02x has %d slot%s\n",
|
|
||||||
pci_domain_nr(bridge->pci_bus),
|
|
||||||
bridge->pci_bus->number, bridge->nr_slots,
|
|
||||||
bridge->nr_slots == 1 ? "" : "s");
|
|
||||||
num_slots += bridge->nr_slots;
|
|
||||||
}
|
|
||||||
|
|
||||||
dbg("Total %d slots\n", num_slots);
|
|
||||||
return num_slots;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* acpiphp_enable_slot - power on slot
|
* acpiphp_enable_slot - power on slot
|
||||||
* @slot: ACPI PHP slot
|
* @slot: ACPI PHP slot
|
||||||
|
|
Loading…
Reference in a new issue