Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 67f43f38 authored by Sebastian Ott's avatar Sebastian Ott Committed by Martin Schwidefsky
Browse files

s390/pci/hotplug: convert to be builtin only



Convert s390' pci hotplug to be builtin only, with no module option.

Suggested-by: default avatarBjorn Helgaas <bhelgaas@google.com>
Signed-off-by: default avatarSebastian Ott <sebott@linux.vnet.ibm.com>
Signed-off-by: default avatarMartin Schwidefsky <schwidefsky@de.ibm.com>
parent 0944fe3f
Loading
Loading
Loading
Loading
+11 −13
Original line number Diff line number Diff line
@@ -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 *);
+6 −28
Original line number Diff line number Diff line
@@ -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);
+1 −1
Original line number Diff line number Diff line
@@ -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
+2 −59
Original line number Diff line number Diff line
@@ -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);