Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 94012
b: refs/heads/master
c: 9223b41
h: refs/heads/master
v: v3
  • Loading branch information
Christoph Lameter authored and Linus Torvalds committed Apr 28, 2008
1 parent c3b80c9 commit 3bca32f
Show file tree
Hide file tree
Showing 6 changed files with 32 additions and 32 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: e26831814998cee8e6d9f0a9854cb46c516f5547
refs/heads/master: 9223b4190fa1297a59f292f3419fc0285321d0ea
16 changes: 14 additions & 2 deletions trunk/arch/sparc64/mm/init.c
Original file line number Diff line number Diff line change
Expand Up @@ -1699,9 +1699,21 @@ void __init paging_init(void)
* functions like clear_dcache_dirty_cpu use the cpu mask
* in 13-bit signed-immediate instruction fields.
*/
BUILD_BUG_ON(FLAGS_RESERVED != 32);

/*
* Page flags must not reach into upper 32 bits that are used
* for the cpu number
*/
BUILD_BUG_ON(NR_PAGEFLAGS > 32);

/*
* The bit fields placed in the high range must not reach below
* the 32 bit boundary. Otherwise we cannot place the cpu field
* at the 32 bit boundary.
*/
BUILD_BUG_ON(SECTIONS_WIDTH + NODES_WIDTH + ZONES_WIDTH +
ilog2(roundup_pow_of_two(NR_CPUS)) > FLAGS_RESERVED);
ilog2(roundup_pow_of_two(NR_CPUS)) > 32);

BUILD_BUG_ON(NR_CPUS > 4096);

kern_base = (prom_boot_mapping_phys_low >> 22UL) << 22UL;
Expand Down
6 changes: 3 additions & 3 deletions trunk/include/linux/mm.h
Original file line number Diff line number Diff line change
Expand Up @@ -407,7 +407,7 @@ static inline void set_compound_order(struct page *page, unsigned long order)

#define ZONES_WIDTH ZONES_SHIFT

#if SECTIONS_WIDTH+ZONES_WIDTH+NODES_SHIFT <= FLAGS_RESERVED
#if SECTIONS_WIDTH+ZONES_WIDTH+NODES_SHIFT <= BITS_PER_LONG - NR_PAGEFLAGS
#define NODES_WIDTH NODES_SHIFT
#else
#ifdef CONFIG_SPARSEMEM_VMEMMAP
Expand Down Expand Up @@ -455,8 +455,8 @@ static inline void set_compound_order(struct page *page, unsigned long order)

#define ZONEID_PGSHIFT (ZONEID_PGOFF * (ZONEID_SHIFT != 0))

#if SECTIONS_WIDTH+NODES_WIDTH+ZONES_WIDTH > FLAGS_RESERVED
#error SECTIONS_WIDTH+NODES_WIDTH+ZONES_WIDTH > FLAGS_RESERVED
#if SECTIONS_WIDTH+NODES_WIDTH+ZONES_WIDTH > BITS_PER_LONG - NR_PAGEFLAGS
#error SECTIONS_WIDTH+NODES_WIDTH+ZONES_WIDTH > BITS_PER_LONG - NR_PAGEFLAGS
#endif

#define ZONES_MASK ((1UL << ZONES_WIDTH) - 1)
Expand Down
19 changes: 0 additions & 19 deletions trunk/include/linux/mmzone.h
Original file line number Diff line number Diff line change
Expand Up @@ -820,25 +820,6 @@ static inline struct zoneref *first_zones_zonelist(struct zonelist *zonelist,
#include <asm/sparsemem.h>
#endif

#if BITS_PER_LONG == 32
/*
* with 32 bit page->flags field, we reserve 9 bits for node/zone info.
* there are 4 zones (3 bits) and this leaves 9-3=6 bits for nodes.
*/
#define FLAGS_RESERVED 9

#elif BITS_PER_LONG == 64
/*
* with 64 bit flags field, there's plenty of room.
*/
#define FLAGS_RESERVED 32

#else

#error BITS_PER_LONG not defined

#endif

#if !defined(CONFIG_HAVE_ARCH_EARLY_PFN_TO_NID) && \
!defined(CONFIG_ARCH_POPULATES_NODE_MAP)
static inline unsigned long early_pfn_to_nid(unsigned long pfn)
Expand Down
19 changes: 12 additions & 7 deletions trunk/include/linux/page-flags.h
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,10 @@
#define PAGE_FLAGS_H

#include <linux/types.h>
#ifndef __GENERATING_BOUNDS_H
#include <linux/mm_types.h>
#include <linux/bounds.h>
#endif /* !__GENERATING_BOUNDS_H */

/*
* Various page->flags bits:
Expand Down Expand Up @@ -59,13 +62,12 @@
* extends from the high bits downwards.
*
* | FIELD | ... | FLAGS |
* N-1 ^ 0
* (N-FLAGS_RESERVED)
* N-1 ^ 0
* (NR_PAGEFLAGS)
*
* The fields area is reserved for fields mapping zone, node and SPARSEMEM
* section. The boundry between these two areas is defined by
* FLAGS_RESERVED which defines the width of the fields section
* (see linux/mmzone.h). New flags must _not_ overlap with this area.
* The fields area is reserved for fields mapping zone, node (for NUMA) and
* SPARSEMEM section (for variants of SPARSEMEM that require section ids like
* SPARSEMEM_EXTREME with !SPARSEMEM_VMEMMAP).
*/
enum pageflags {
PG_locked, /* Page is locked. Don't touch. */
Expand Down Expand Up @@ -101,9 +103,11 @@ enum pageflags {
*/
PG_uncached = 31, /* Page has been mapped as uncached */
#endif
NR_PAGEFLAGS
__NR_PAGEFLAGS
};

#ifndef __GENERATING_BOUNDS_H

/*
* Manipulation of page state flags
*/
Expand Down Expand Up @@ -304,4 +308,5 @@ static inline void set_page_writeback(struct page *page)
test_set_page_writeback(page);
}

#endif /* !__GENERATING_BOUNDS_H */
#endif /* PAGE_FLAGS_H */
2 changes: 2 additions & 0 deletions trunk/kernel/bounds.c
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@

#define __GENERATING_BOUNDS_H
/* Include headers that define the enum constants of interest */
#include <linux/page-flags.h>

#define DEFINE(sym, val) \
asm volatile("\n->" #sym " %0 " #val : : "i" (val))
Expand All @@ -15,5 +16,6 @@
void foo(void)
{
/* The enum constants to put into include/linux/bounds.h */
DEFINE(NR_PAGEFLAGS, __NR_PAGEFLAGS);
/* End of constants */
}

0 comments on commit 3bca32f

Please sign in to comment.