s390 patches for 3.3-rc5
Hi Linus,
please pull from 'for-linus' branch of
git://git.kernel.org/pub/scm/linux/kernel/git/s390/linux.git for-linus
to receive the following updates:
Danny Kukawka (1):
[S390] crash_dump: remove duplicate include
David Howells (1):
[S390] KEYS: Enable the compat keyctl wrapper on s390x
Gerald Schaefer (1):
[S390] memory hotplug: prevent memory zone interleave
arch/s390/Kconfig | 3 +++ arch/s390/kernel/crash_dump.c | 1 - arch/s390/mm/init.c | 30 ++++++++++++++++++++++++++---- 3 files changed, 29 insertions(+), 5 deletions(-)
arch/s390/Kconfig +3 -0
@@ -227,6 +227,9 @@ config COMPAT config SYSVIPC_COMPAT def_bool y if COMPAT && SYSVIPC +config KEYS_COMPAT + def_bool y if COMPAT && KEYS + config AUDIT_ARCH def_bool y
arch/s390/kernel/crash_dump.c +0 -1
@@ -11,7 +11,6 @@#include <linux/module.h> #include <linux/gfp.h> #include <linux/slab.h> -#include <linux/crash_dump.h> #include <linux/bootmem.h> #include <linux/elf.h> #include <asm/ipl.h>
arch/s390/mm/init.c +26 -4
@@ -223,16 +223,38 @@ void free_initrd_mem(unsigned long start, unsigned long end)#ifdef CONFIG_MEMORY_HOTPLUG int arch_add_memory (int nid,u64 start,u64 size) { -struct pglist_data *pgdat; +unsigned long zone_start_pfn, zone_end_pfn, nr_pages; +unsigned long start_pfn =PFN_DOWN (start); +unsigned long size_pages =PFN_DOWN (size);struct zone *zone;int rc; - pgdat =NODE_DATA (nid); - zone = pgdat->node_zones +ZONE_MOVABLE ; rc =vmem_add_mapping (start, size);if (rc)return rc; - rc =__add_pages (nid, zone,PFN_DOWN (start),PFN_DOWN (size)); +for_each_zone (zone) { +if (zone_idx (zone) !=ZONE_MOVABLE ) { +/* Add range within existing zone limits */ + zone_start_pfn = zone->zone_start_pfn; + zone_end_pfn = zone->zone_start_pfn + + zone->spanned_pages; + }else { +/* Add remaining range to ZONE_MOVABLE */ + zone_start_pfn = start_pfn; + zone_end_pfn = start_pfn + size_pages; + } +if (start_pfn < zone_start_pfn || start_pfn >= zone_end_pfn) +continue ; + nr_pages = (start_pfn + size_pages > zone_end_pfn) ? + zone_end_pfn - start_pfn : size_pages; + rc =__add_pages (nid, zone, start_pfn, nr_pages); +if (rc) +break ; + start_pfn += nr_pages; + size_pages -= nr_pages; +if (!size_pages) +break ; + }if (rc)vmem_remove_mapping (start, size);return rc;