Merge x86-64 update from Andi
This commit is contained in:
commit
4060994c3e
82 changed files with 1484 additions and 1100 deletions
|
|
@ -84,6 +84,16 @@ static __inline__ int get_bitmask_order(unsigned int count)
|
|||
return order; /* We could be slightly more clever with -1 here... */
|
||||
}
|
||||
|
||||
static __inline__ int get_count_order(unsigned int count)
|
||||
{
|
||||
int order;
|
||||
|
||||
order = fls(count) - 1;
|
||||
if (count & (count - 1))
|
||||
order++;
|
||||
return order;
|
||||
}
|
||||
|
||||
/*
|
||||
* hweightN: returns the hamming weight (i.e. the number
|
||||
* of bits set) of a N-bit word
|
||||
|
|
|
|||
|
|
@ -14,6 +14,13 @@ struct vm_area_struct;
|
|||
/* Zone modifiers in GFP_ZONEMASK (see linux/mmzone.h - low two bits) */
|
||||
#define __GFP_DMA ((__force gfp_t)0x01u)
|
||||
#define __GFP_HIGHMEM ((__force gfp_t)0x02u)
|
||||
#ifdef CONFIG_DMA_IS_DMA32
|
||||
#define __GFP_DMA32 ((__force gfp_t)0x01) /* ZONE_DMA is ZONE_DMA32 */
|
||||
#elif BITS_PER_LONG < 64
|
||||
#define __GFP_DMA32 ((__force gfp_t)0x00) /* ZONE_NORMAL is ZONE_DMA32 */
|
||||
#else
|
||||
#define __GFP_DMA32 ((__force gfp_t)0x04) /* Has own ZONE_DMA32 */
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Action modifiers - doesn't change the zoning
|
||||
|
|
@ -63,6 +70,10 @@ struct vm_area_struct;
|
|||
|
||||
#define GFP_DMA __GFP_DMA
|
||||
|
||||
/* 4GB DMA on some platforms */
|
||||
#define GFP_DMA32 __GFP_DMA32
|
||||
|
||||
|
||||
#define gfp_zone(mask) ((__force int)((mask) & (__force gfp_t)GFP_ZONEMASK))
|
||||
|
||||
/*
|
||||
|
|
|
|||
|
|
@ -206,12 +206,6 @@ struct vm_operations_struct {
|
|||
struct mmu_gather;
|
||||
struct inode;
|
||||
|
||||
#ifdef ARCH_HAS_ATOMIC_UNSIGNED
|
||||
typedef unsigned page_flags_t;
|
||||
#else
|
||||
typedef unsigned long page_flags_t;
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Each physical page in the system has a struct page associated with
|
||||
* it to keep track of whatever it is we are using the page for at the
|
||||
|
|
@ -219,7 +213,7 @@ typedef unsigned long page_flags_t;
|
|||
* a page.
|
||||
*/
|
||||
struct page {
|
||||
page_flags_t flags; /* Atomic flags, some possibly
|
||||
unsigned long flags; /* Atomic flags, some possibly
|
||||
* updated asynchronously */
|
||||
atomic_t _count; /* Usage count, see below. */
|
||||
atomic_t _mapcount; /* Count of ptes mapped in mms,
|
||||
|
|
@ -435,7 +429,7 @@ static inline void put_page(struct page *page)
|
|||
#endif
|
||||
|
||||
/* Page flags: | [SECTION] | [NODE] | ZONE | ... | FLAGS | */
|
||||
#define SECTIONS_PGOFF ((sizeof(page_flags_t)*8) - SECTIONS_WIDTH)
|
||||
#define SECTIONS_PGOFF ((sizeof(unsigned long)*8) - SECTIONS_WIDTH)
|
||||
#define NODES_PGOFF (SECTIONS_PGOFF - NODES_WIDTH)
|
||||
#define ZONES_PGOFF (NODES_PGOFF - ZONES_WIDTH)
|
||||
|
||||
|
|
|
|||
|
|
@ -71,10 +71,11 @@ struct per_cpu_pageset {
|
|||
#endif
|
||||
|
||||
#define ZONE_DMA 0
|
||||
#define ZONE_NORMAL 1
|
||||
#define ZONE_HIGHMEM 2
|
||||
#define ZONE_DMA32 1
|
||||
#define ZONE_NORMAL 2
|
||||
#define ZONE_HIGHMEM 3
|
||||
|
||||
#define MAX_NR_ZONES 3 /* Sync this with ZONES_SHIFT */
|
||||
#define MAX_NR_ZONES 4 /* Sync this with ZONES_SHIFT */
|
||||
#define ZONES_SHIFT 2 /* ceil(log2(MAX_NR_ZONES)) */
|
||||
|
||||
|
||||
|
|
@ -108,9 +109,10 @@ struct per_cpu_pageset {
|
|||
|
||||
/*
|
||||
* On machines where it is needed (eg PCs) we divide physical memory
|
||||
* into multiple physical zones. On a PC we have 3 zones:
|
||||
* into multiple physical zones. On a PC we have 4 zones:
|
||||
*
|
||||
* ZONE_DMA < 16 MB ISA DMA capable memory
|
||||
* ZONE_DMA32 0 MB Empty
|
||||
* ZONE_NORMAL 16-896 MB direct mapped by the kernel
|
||||
* ZONE_HIGHMEM > 896 MB only page cache and user processes
|
||||
*/
|
||||
|
|
@ -433,7 +435,9 @@ int lowmem_reserve_ratio_sysctl_handler(struct ctl_table *, int, struct file *,
|
|||
|
||||
#include <linux/topology.h>
|
||||
/* Returns the number of the current Node. */
|
||||
#ifndef numa_node_id
|
||||
#define numa_node_id() (cpu_to_node(raw_smp_processor_id()))
|
||||
#endif
|
||||
|
||||
#ifndef CONFIG_NEED_MULTIPLE_NODES
|
||||
|
||||
|
|
@ -453,12 +457,12 @@ extern struct pglist_data contig_page_data;
|
|||
#include <asm/sparsemem.h>
|
||||
#endif
|
||||
|
||||
#if BITS_PER_LONG == 32 || defined(ARCH_HAS_ATOMIC_UNSIGNED)
|
||||
#if BITS_PER_LONG == 32
|
||||
/*
|
||||
* with 32 bit page->flags field, we reserve 8 bits for node/zone info.
|
||||
* there are 3 zones (2 bits) and this leaves 8-2=6 bits for nodes.
|
||||
* 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 8
|
||||
#define FLAGS_RESERVED 9
|
||||
|
||||
#elif BITS_PER_LONG == 64
|
||||
/*
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue