diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2013-02-21 20:54:03 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2013-02-21 20:54:03 -0500 |
commit | 81ec44a6c69342fec1b1140c60a604027e429f69 (patch) | |
tree | ee6bec8a94ef28e111bf766cf4b7a9366cb4f7c1 /drivers/pci/hotplug | |
parent | 48a732dfaa77a4dfec803aa8f248373998704f76 (diff) | |
parent | e80cfc31d872b6b85b8966bce6ba80bee401a7dd (diff) |
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/s390/linux
Pull s390 update from Martin Schwidefsky:
"The most prominent change in this patch set is the software dirty bit
patch for s390. It removes __HAVE_ARCH_PAGE_TEST_AND_CLEAR_DIRTY and
the page_test_and_clear_dirty primitive which makes the common memory
management code a bit less obscure.
Heiko fixed most of the PCI related fallout, more often than not
missing GENERIC_HARDIRQS dependencies. Notable is one of the 3270
patches which adds an export to tty_io to be able to resize a tty.
The rest is the usual bunch of cleanups and bug fixes."
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/s390/linux: (42 commits)
s390/module: Add missing R_390_NONE relocation type
drivers/gpio: add missing GENERIC_HARDIRQ dependency
drivers/input: add couple of missing GENERIC_HARDIRQS dependencies
s390/cleanup: rename SPP to LPP
s390/mm: implement software dirty bits
s390/mm: Fix crst upgrade of mmap with MAP_FIXED
s390/linker skript: discard exit.data at runtime
drivers/media: add missing GENERIC_HARDIRQS dependency
s390/bpf,jit: add vlan tag support
drivers/net,AT91RM9200: add missing GENERIC_HARDIRQS dependency
iucv: fix kernel panic at reboot
s390/Kconfig: sort list of arch selected config options
phylib: remove !S390 dependeny from Kconfig
uio: remove !S390 dependency from Kconfig
dasd: fix sysfs cleanup in dasd_generic_remove
s390/pci: fix hotplug module init
s390/pci: cleanup clp page allocation
s390/pci: cleanup clp inline assembly
s390/perf: cpum_cf: fallback to software sampling events
s390/mm: provide PAGE_SHARED define
...
Diffstat (limited to 'drivers/pci/hotplug')
-rw-r--r-- | drivers/pci/hotplug/s390_pci_hpc.c | 60 |
1 files changed, 26 insertions, 34 deletions
diff --git a/drivers/pci/hotplug/s390_pci_hpc.c b/drivers/pci/hotplug/s390_pci_hpc.c index dee68e0698e1..7db249a25016 100644 --- a/drivers/pci/hotplug/s390_pci_hpc.c +++ b/drivers/pci/hotplug/s390_pci_hpc.c | |||
@@ -172,25 +172,6 @@ error: | |||
172 | return -ENOMEM; | 172 | return -ENOMEM; |
173 | } | 173 | } |
174 | 174 | ||
175 | static int __init init_pci_slots(void) | ||
176 | { | ||
177 | struct zpci_dev *zdev; | ||
178 | int device = 0; | ||
179 | |||
180 | /* | ||
181 | * Create a structure for each slot, and register that slot | ||
182 | * with the pci_hotplug subsystem. | ||
183 | */ | ||
184 | mutex_lock(&zpci_list_lock); | ||
185 | list_for_each_entry(zdev, &zpci_list, entry) { | ||
186 | init_pci_slot(zdev); | ||
187 | device++; | ||
188 | } | ||
189 | |||
190 | mutex_unlock(&zpci_list_lock); | ||
191 | return (device) ? 0 : -ENODEV; | ||
192 | } | ||
193 | |||
194 | static void exit_pci_slot(struct zpci_dev *zdev) | 175 | static void exit_pci_slot(struct zpci_dev *zdev) |
195 | { | 176 | { |
196 | struct list_head *tmp, *n; | 177 | struct list_head *tmp, *n; |
@@ -205,6 +186,26 @@ static void exit_pci_slot(struct zpci_dev *zdev) | |||
205 | } | 186 | } |
206 | } | 187 | } |
207 | 188 | ||
189 | static struct pci_hp_callback_ops hp_ops = { | ||
190 | .create_slot = init_pci_slot, | ||
191 | .remove_slot = exit_pci_slot, | ||
192 | }; | ||
193 | |||
194 | static void __init init_pci_slots(void) | ||
195 | { | ||
196 | struct zpci_dev *zdev; | ||
197 | |||
198 | /* | ||
199 | * Create a structure for each slot, and register that slot | ||
200 | * with the pci_hotplug subsystem. | ||
201 | */ | ||
202 | mutex_lock(&zpci_list_lock); | ||
203 | list_for_each_entry(zdev, &zpci_list, entry) { | ||
204 | init_pci_slot(zdev); | ||
205 | } | ||
206 | mutex_unlock(&zpci_list_lock); | ||
207 | } | ||
208 | |||
208 | static void __exit exit_pci_slots(void) | 209 | static void __exit exit_pci_slots(void) |
209 | { | 210 | { |
210 | struct list_head *tmp, *n; | 211 | struct list_head *tmp, *n; |
@@ -224,28 +225,19 @@ static void __exit exit_pci_slots(void) | |||
224 | 225 | ||
225 | static int __init pci_hotplug_s390_init(void) | 226 | static int __init pci_hotplug_s390_init(void) |
226 | { | 227 | { |
227 | /* | 228 | if (!s390_pci_probe) |
228 | * Do specific initialization stuff for your driver here | ||
229 | * like initializing your controller hardware (if any) and | ||
230 | * determining the number of slots you have in the system | ||
231 | * right now. | ||
232 | */ | ||
233 | |||
234 | if (!pci_probe) | ||
235 | return -EOPNOTSUPP; | 229 | return -EOPNOTSUPP; |
236 | 230 | ||
237 | /* register callbacks for slot handling from arch code */ | 231 | zpci_register_hp_ops(&hp_ops); |
238 | mutex_lock(&zpci_list_lock); | 232 | init_pci_slots(); |
239 | hotplug_ops.create_slot = init_pci_slot; | 233 | |
240 | hotplug_ops.remove_slot = exit_pci_slot; | 234 | return 0; |
241 | mutex_unlock(&zpci_list_lock); | ||
242 | pr_info("registered hotplug slot callbacks\n"); | ||
243 | return init_pci_slots(); | ||
244 | } | 235 | } |
245 | 236 | ||
246 | static void __exit pci_hotplug_s390_exit(void) | 237 | static void __exit pci_hotplug_s390_exit(void) |
247 | { | 238 | { |
248 | exit_pci_slots(); | 239 | exit_pci_slots(); |
240 | zpci_deregister_hp_ops(); | ||
249 | } | 241 | } |
250 | 242 | ||
251 | module_init(pci_hotplug_s390_init); | 243 | module_init(pci_hotplug_s390_init); |