mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-11-30 14:06:51 +07:00
s390/pci/hotplug: convert to be builtin only
Convert s390' pci hotplug to be builtin only, with no module option. Suggested-by: Bjorn Helgaas <bhelgaas@google.com> Signed-off-by: Sebastian Ott <sebott@linux.vnet.ibm.com> Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
This commit is contained in:
parent
0944fe3f4a
commit
67f43f38ee
@ -116,11 +116,6 @@ struct zpci_dev {
|
||||
struct dentry *debugfs_perf;
|
||||
};
|
||||
|
||||
struct pci_hp_callback_ops {
|
||||
int (*create_slot) (struct zpci_dev *zdev);
|
||||
void (*remove_slot) (struct zpci_dev *zdev);
|
||||
};
|
||||
|
||||
static inline bool zdev_enabled(struct zpci_dev *zdev)
|
||||
{
|
||||
return (zdev->fh & (1UL << 31)) ? true : false;
|
||||
@ -154,6 +149,17 @@ static inline void zpci_event_error(void *e) {}
|
||||
static inline void zpci_event_availability(void *e) {}
|
||||
#endif /* CONFIG_PCI */
|
||||
|
||||
#ifdef CONFIG_HOTPLUG_PCI_S390
|
||||
int zpci_init_slot(struct zpci_dev *);
|
||||
void zpci_exit_slot(struct zpci_dev *);
|
||||
#else /* CONFIG_HOTPLUG_PCI_S390 */
|
||||
static inline int zpci_init_slot(struct zpci_dev *zdev)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
static inline void zpci_exit_slot(struct zpci_dev *zdev) {}
|
||||
#endif /* CONFIG_HOTPLUG_PCI_S390 */
|
||||
|
||||
/* Helpers */
|
||||
struct zpci_dev *get_zdev(struct pci_dev *);
|
||||
struct zpci_dev *get_zdev_by_fid(u32);
|
||||
@ -167,14 +173,6 @@ void zpci_sysfs_remove_device(struct device *);
|
||||
int zpci_dma_init(void);
|
||||
void zpci_dma_exit(void);
|
||||
|
||||
/* Hotplug */
|
||||
extern struct mutex zpci_list_lock;
|
||||
extern struct list_head zpci_list;
|
||||
extern unsigned int s390_pci_probe;
|
||||
|
||||
void zpci_register_hp_ops(struct pci_hp_callback_ops *);
|
||||
void zpci_deregister_hp_ops(void);
|
||||
|
||||
/* FMB */
|
||||
int zpci_fmb_enable_device(struct zpci_dev *);
|
||||
int zpci_fmb_disable_device(struct zpci_dev *);
|
||||
|
@ -45,11 +45,8 @@
|
||||
#define ZPCI_NR_DEVICES CONFIG_PCI_NR_FUNCTIONS
|
||||
|
||||
/* list of all detected zpci devices */
|
||||
LIST_HEAD(zpci_list);
|
||||
EXPORT_SYMBOL_GPL(zpci_list);
|
||||
DEFINE_MUTEX(zpci_list_lock);
|
||||
EXPORT_SYMBOL_GPL(zpci_list_lock);
|
||||
|
||||
static LIST_HEAD(zpci_list);
|
||||
static DEFINE_MUTEX(zpci_list_lock);
|
||||
|
||||
static void zpci_enable_irq(struct irq_data *data);
|
||||
static void zpci_disable_irq(struct irq_data *data);
|
||||
@ -60,8 +57,6 @@ static struct irq_chip zpci_irq_chip = {
|
||||
.irq_mask = zpci_disable_irq,
|
||||
};
|
||||
|
||||
static struct pci_hp_callback_ops *hotplug_ops;
|
||||
|
||||
static DECLARE_BITMAP(zpci_domain, ZPCI_NR_DEVICES);
|
||||
static DEFINE_SPINLOCK(zpci_domain_lock);
|
||||
|
||||
@ -828,10 +823,10 @@ int zpci_create_device(struct zpci_dev *zdev)
|
||||
|
||||
mutex_lock(&zpci_list_lock);
|
||||
list_add_tail(&zdev->entry, &zpci_list);
|
||||
if (hotplug_ops)
|
||||
hotplug_ops->create_slot(zdev);
|
||||
mutex_unlock(&zpci_list_lock);
|
||||
|
||||
zpci_init_slot(zdev);
|
||||
|
||||
return 0;
|
||||
|
||||
out_disable:
|
||||
@ -884,24 +879,7 @@ static void zpci_mem_exit(void)
|
||||
kmem_cache_destroy(zdev_fmb_cache);
|
||||
}
|
||||
|
||||
void zpci_register_hp_ops(struct pci_hp_callback_ops *ops)
|
||||
{
|
||||
mutex_lock(&zpci_list_lock);
|
||||
hotplug_ops = ops;
|
||||
mutex_unlock(&zpci_list_lock);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(zpci_register_hp_ops);
|
||||
|
||||
void zpci_deregister_hp_ops(void)
|
||||
{
|
||||
mutex_lock(&zpci_list_lock);
|
||||
hotplug_ops = NULL;
|
||||
mutex_unlock(&zpci_list_lock);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(zpci_deregister_hp_ops);
|
||||
|
||||
unsigned int s390_pci_probe;
|
||||
EXPORT_SYMBOL_GPL(s390_pci_probe);
|
||||
static unsigned int s390_pci_probe;
|
||||
|
||||
char * __init pcibios_setup(char *str)
|
||||
{
|
||||
@ -960,4 +938,4 @@ static int __init pci_base_init(void)
|
||||
out:
|
||||
return rc;
|
||||
}
|
||||
subsys_initcall(pci_base_init);
|
||||
subsys_initcall_sync(pci_base_init);
|
||||
|
@ -146,7 +146,7 @@ config HOTPLUG_PCI_SGI
|
||||
When in doubt, say N.
|
||||
|
||||
config HOTPLUG_PCI_S390
|
||||
tristate "System z PCI Hotplug Support"
|
||||
bool "System z PCI Hotplug Support"
|
||||
depends on S390 && 64BIT
|
||||
help
|
||||
Say Y here if you want to use the System z PCI Hotplug
|
||||
|
@ -148,7 +148,7 @@ static struct hotplug_slot_ops s390_hotplug_slot_ops = {
|
||||
.get_adapter_status = get_adapter_status,
|
||||
};
|
||||
|
||||
static int init_pci_slot(struct zpci_dev *zdev)
|
||||
int zpci_init_slot(struct zpci_dev *zdev)
|
||||
{
|
||||
struct hotplug_slot *hotplug_slot;
|
||||
struct hotplug_slot_info *info;
|
||||
@ -202,7 +202,7 @@ static int init_pci_slot(struct zpci_dev *zdev)
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
static void exit_pci_slot(struct zpci_dev *zdev)
|
||||
void zpci_exit_slot(struct zpci_dev *zdev)
|
||||
{
|
||||
struct list_head *tmp, *n;
|
||||
struct slot *slot;
|
||||
@ -215,60 +215,3 @@ static void exit_pci_slot(struct zpci_dev *zdev)
|
||||
pci_hp_deregister(slot->hotplug_slot);
|
||||
}
|
||||
}
|
||||
|
||||
static struct pci_hp_callback_ops hp_ops = {
|
||||
.create_slot = init_pci_slot,
|
||||
.remove_slot = exit_pci_slot,
|
||||
};
|
||||
|
||||
static void __init init_pci_slots(void)
|
||||
{
|
||||
struct zpci_dev *zdev;
|
||||
|
||||
/*
|
||||
* Create a structure for each slot, and register that slot
|
||||
* with the pci_hotplug subsystem.
|
||||
*/
|
||||
mutex_lock(&zpci_list_lock);
|
||||
list_for_each_entry(zdev, &zpci_list, entry) {
|
||||
init_pci_slot(zdev);
|
||||
}
|
||||
mutex_unlock(&zpci_list_lock);
|
||||
}
|
||||
|
||||
static void __exit exit_pci_slots(void)
|
||||
{
|
||||
struct list_head *tmp, *n;
|
||||
struct slot *slot;
|
||||
|
||||
/*
|
||||
* Unregister all of our slots with the pci_hotplug subsystem.
|
||||
* Memory will be freed in release_slot() callback after slot's
|
||||
* lifespan is finished.
|
||||
*/
|
||||
list_for_each_safe(tmp, n, &s390_hotplug_slot_list) {
|
||||
slot = list_entry(tmp, struct slot, slot_list);
|
||||
list_del(&slot->slot_list);
|
||||
pci_hp_deregister(slot->hotplug_slot);
|
||||
}
|
||||
}
|
||||
|
||||
static int __init pci_hotplug_s390_init(void)
|
||||
{
|
||||
if (!s390_pci_probe)
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
zpci_register_hp_ops(&hp_ops);
|
||||
init_pci_slots();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void __exit pci_hotplug_s390_exit(void)
|
||||
{
|
||||
exit_pci_slots();
|
||||
zpci_deregister_hp_ops();
|
||||
}
|
||||
|
||||
module_init(pci_hotplug_s390_init);
|
||||
module_exit(pci_hotplug_s390_exit);
|
||||
|
Loading…
Reference in New Issue
Block a user