diff options
| -rw-r--r-- | arch/powerpc/platforms/pseries/hotplug-memory.c | 7 | ||||
| -rw-r--r-- | drivers/pci/hotplug/rpadlpar_core.c | 3 | ||||
| -rw-r--r-- | drivers/pci/hotplug/rpaphp_core.c | 3 |
3 files changed, 13 insertions, 0 deletions
diff --git a/arch/powerpc/platforms/pseries/hotplug-memory.c b/arch/powerpc/platforms/pseries/hotplug-memory.c index 9b21ee68ea50..01e7b5bb3c1d 100644 --- a/arch/powerpc/platforms/pseries/hotplug-memory.c +++ b/arch/powerpc/platforms/pseries/hotplug-memory.c | |||
| @@ -11,6 +11,7 @@ | |||
| 11 | 11 | ||
| 12 | #include <linux/of.h> | 12 | #include <linux/of.h> |
| 13 | #include <linux/lmb.h> | 13 | #include <linux/lmb.h> |
| 14 | #include <linux/vmalloc.h> | ||
| 14 | #include <asm/firmware.h> | 15 | #include <asm/firmware.h> |
| 15 | #include <asm/machdep.h> | 16 | #include <asm/machdep.h> |
| 16 | #include <asm/pSeries_reconfig.h> | 17 | #include <asm/pSeries_reconfig.h> |
| @@ -54,6 +55,12 @@ static int pseries_remove_lmb(unsigned long base, unsigned int lmb_size) | |||
| 54 | */ | 55 | */ |
| 55 | start = (unsigned long)__va(base); | 56 | start = (unsigned long)__va(base); |
| 56 | ret = remove_section_mapping(start, start + lmb_size); | 57 | ret = remove_section_mapping(start, start + lmb_size); |
| 58 | |||
| 59 | /* Ensure all vmalloc mappings are flushed in case they also | ||
| 60 | * hit that section of memory | ||
| 61 | */ | ||
| 62 | vm_unmap_aliases(); | ||
| 63 | |||
| 57 | return ret; | 64 | return ret; |
| 58 | } | 65 | } |
| 59 | 66 | ||
diff --git a/drivers/pci/hotplug/rpadlpar_core.c b/drivers/pci/hotplug/rpadlpar_core.c index 4e3e0382c16e..083034710fa6 100644 --- a/drivers/pci/hotplug/rpadlpar_core.c +++ b/drivers/pci/hotplug/rpadlpar_core.c | |||
| @@ -20,6 +20,7 @@ | |||
| 20 | #include <linux/init.h> | 20 | #include <linux/init.h> |
| 21 | #include <linux/pci.h> | 21 | #include <linux/pci.h> |
| 22 | #include <linux/string.h> | 22 | #include <linux/string.h> |
| 23 | #include <linux/vmalloc.h> | ||
| 23 | 24 | ||
| 24 | #include <asm/pci-bridge.h> | 25 | #include <asm/pci-bridge.h> |
| 25 | #include <linux/mutex.h> | 26 | #include <linux/mutex.h> |
| @@ -430,6 +431,8 @@ int dlpar_remove_slot(char *drc_name) | |||
| 430 | rc = dlpar_remove_pci_slot(drc_name, dn); | 431 | rc = dlpar_remove_pci_slot(drc_name, dn); |
| 431 | break; | 432 | break; |
| 432 | } | 433 | } |
| 434 | vm_unmap_aliases(); | ||
| 435 | |||
| 433 | printk(KERN_INFO "%s: slot %s removed\n", DLPAR_MODULE_NAME, drc_name); | 436 | printk(KERN_INFO "%s: slot %s removed\n", DLPAR_MODULE_NAME, drc_name); |
| 434 | exit: | 437 | exit: |
| 435 | mutex_unlock(&rpadlpar_mutex); | 438 | mutex_unlock(&rpadlpar_mutex); |
diff --git a/drivers/pci/hotplug/rpaphp_core.c b/drivers/pci/hotplug/rpaphp_core.c index 719702240780..ef7411c660b9 100644 --- a/drivers/pci/hotplug/rpaphp_core.c +++ b/drivers/pci/hotplug/rpaphp_core.c | |||
| @@ -29,6 +29,7 @@ | |||
| 29 | #include <linux/pci_hotplug.h> | 29 | #include <linux/pci_hotplug.h> |
| 30 | #include <linux/smp.h> | 30 | #include <linux/smp.h> |
| 31 | #include <linux/init.h> | 31 | #include <linux/init.h> |
| 32 | #include <linux/vmalloc.h> | ||
| 32 | #include <asm/eeh.h> /* for eeh_add_device() */ | 33 | #include <asm/eeh.h> /* for eeh_add_device() */ |
| 33 | #include <asm/rtas.h> /* rtas_call */ | 34 | #include <asm/rtas.h> /* rtas_call */ |
| 34 | #include <asm/pci-bridge.h> /* for pci_controller */ | 35 | #include <asm/pci-bridge.h> /* for pci_controller */ |
| @@ -418,6 +419,8 @@ static int disable_slot(struct hotplug_slot *hotplug_slot) | |||
| 418 | return -EINVAL; | 419 | return -EINVAL; |
| 419 | 420 | ||
| 420 | pcibios_remove_pci_devices(slot->bus); | 421 | pcibios_remove_pci_devices(slot->bus); |
| 422 | vm_unmap_aliases(); | ||
| 423 | |||
| 421 | slot->state = NOT_CONFIGURED; | 424 | slot->state = NOT_CONFIGURED; |
| 422 | return 0; | 425 | return 0; |
| 423 | } | 426 | } |
