| From 91ea8207168793b365322be3c90a4ee9e8b03ed4 Mon Sep 17 00:00:00 2001 |
| From: Helge Deller <deller@gmx.de> |
| Date: Wed, 5 Jun 2013 20:50:01 +0000 |
| Subject: parisc: fix kernel BUG at arch/parisc/include/asm/mmzone.h:50 (part 2) |
| |
| From: Helge Deller <deller@gmx.de> |
| |
| commit 91ea8207168793b365322be3c90a4ee9e8b03ed4 upstream. |
| |
| Make sure that we really return -1 (instead of 0x00ff) as node id for |
| page frame numbers which are not physically available. |
| |
| This finally fixes the kernel panic when running |
| cat /proc/kpageflags /proc/kpagecount. |
| |
| Theoretically this patch now limits the number of physical memory ranges |
| to 127 instead of 254, but currently we have MAX_PHYSMEM_RANGES |
| hardcoded to 8 which is sufficient for all existing parisc machines. |
| |
| Signed-off-by: Helge Deller <deller@gmx.de> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| arch/parisc/include/asm/mmzone.h | 4 ++-- |
| arch/parisc/mm/init.c | 2 +- |
| 2 files changed, 3 insertions(+), 3 deletions(-) |
| |
| --- a/arch/parisc/include/asm/mmzone.h |
| +++ b/arch/parisc/include/asm/mmzone.h |
| @@ -27,7 +27,7 @@ extern struct node_map_data node_data[]; |
| |
| #define PFNNID_SHIFT (30 - PAGE_SHIFT) |
| #define PFNNID_MAP_MAX 512 /* support 512GB */ |
| -extern unsigned char pfnnid_map[PFNNID_MAP_MAX]; |
| +extern signed char pfnnid_map[PFNNID_MAP_MAX]; |
| |
| #ifndef CONFIG_64BIT |
| #define pfn_is_io(pfn) ((pfn & (0xf0000000UL >> PAGE_SHIFT)) == (0xf0000000UL >> PAGE_SHIFT)) |
| @@ -46,7 +46,7 @@ static inline int pfn_to_nid(unsigned lo |
| i = pfn >> PFNNID_SHIFT; |
| BUG_ON(i >= ARRAY_SIZE(pfnnid_map)); |
| |
| - return (int)pfnnid_map[i]; |
| + return pfnnid_map[i]; |
| } |
| |
| static inline int pfn_valid(int pfn) |
| --- a/arch/parisc/mm/init.c |
| +++ b/arch/parisc/mm/init.c |
| @@ -47,7 +47,7 @@ pte_t pg0[PT_INITIAL * PTRS_PER_PTE] __a |
| |
| #ifdef CONFIG_DISCONTIGMEM |
| struct node_map_data node_data[MAX_NUMNODES] __read_mostly; |
| -unsigned char pfnnid_map[PFNNID_MAP_MAX] __read_mostly; |
| +signed char pfnnid_map[PFNNID_MAP_MAX] __read_mostly; |
| #endif |
| |
| static struct resource data_resource = { |