Merge branch 'akpm'
* akpm: (182 commits)
fbdev: bf54x-lq043fb: use kzalloc over kmalloc/memset
fbdev: *bfin*: fix __dev{init,exit} markings
fbdev: *bfin*: drop unnecessary calls to memset
fbdev: bfin-t350mcqb-fb: drop unused local variables
fbdev: blackfin has __raw I/O accessors, so use them in fb.h
fbdev: s1d13xxxfb: add accelerated bitblt functions
tcx: use standard fields for framebuffer physical address and length
fbdev: add support for handoff from firmware to hw framebuffers
intelfb: fix a bug when changing video timing
fbdev: use framebuffer_release() for freeing fb_info structures
radeon: P2G2CLK_ALWAYS_ONb tested twice, should 2nd be P2G2CLK_DAC_ALWAYS_ONb?
s3c-fb: CPUFREQ frequency scaling support
s3c-fb: fix resource releasing on error during probing
carminefb: fix possible access beyond end of carmine_modedb[]
acornfb: remove fb_mmap function
mb862xxfb: use CONFIG_OF instead of CONFIG_PPC_OF
mb862xxfb: restrict compliation of platform driver to PPC
Samsung SoC Framebuffer driver: add Alpha Channel support
atmel-lcdc: fix pixclock upper bound detection
offb: use framebuffer_alloc() to allocate fb_info struct
...
Manually fix up conflicts due to kmemcheck in mm/slab.c
This commit is contained in:
@@ -1,7 +1,6 @@
|
||||
#ifndef _LINUX_BUG_H
|
||||
#define _LINUX_BUG_H
|
||||
|
||||
#include <linux/module.h>
|
||||
#include <asm/bug.h>
|
||||
|
||||
enum bug_trap_type {
|
||||
@@ -24,10 +23,6 @@ const struct bug_entry *find_bug(unsigned long bugaddr);
|
||||
|
||||
enum bug_trap_type report_bug(unsigned long bug_addr, struct pt_regs *regs);
|
||||
|
||||
int module_bug_finalize(const Elf_Ehdr *, const Elf_Shdr *,
|
||||
struct module *);
|
||||
void module_bug_cleanup(struct module *);
|
||||
|
||||
/* These are defined by the architecture */
|
||||
int is_valid_bugaddr(unsigned long addr);
|
||||
|
||||
@@ -38,13 +33,6 @@ static inline enum bug_trap_type report_bug(unsigned long bug_addr,
|
||||
{
|
||||
return BUG_TRAP_TYPE_BUG;
|
||||
}
|
||||
static inline int module_bug_finalize(const Elf_Ehdr *hdr,
|
||||
const Elf_Shdr *sechdrs,
|
||||
struct module *mod)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
static inline void module_bug_cleanup(struct module *mod) {}
|
||||
|
||||
#endif /* CONFIG_GENERIC_BUG */
|
||||
#endif /* _LINUX_BUG_H */
|
||||
|
||||
@@ -18,7 +18,6 @@
|
||||
|
||||
extern int number_of_cpusets; /* How many cpusets are defined in system? */
|
||||
|
||||
extern int cpuset_init_early(void);
|
||||
extern int cpuset_init(void);
|
||||
extern void cpuset_init_smp(void);
|
||||
extern void cpuset_cpus_allowed(struct task_struct *p, struct cpumask *mask);
|
||||
@@ -27,7 +26,6 @@ extern void cpuset_cpus_allowed_locked(struct task_struct *p,
|
||||
extern nodemask_t cpuset_mems_allowed(struct task_struct *p);
|
||||
#define cpuset_current_mems_allowed (current->mems_allowed)
|
||||
void cpuset_init_current_mems_allowed(void);
|
||||
void cpuset_update_task_memory_state(void);
|
||||
int cpuset_nodemask_valid_mems_allowed(nodemask_t *nodemask);
|
||||
|
||||
extern int __cpuset_node_allowed_softwall(int node, gfp_t gfp_mask);
|
||||
@@ -92,9 +90,13 @@ extern void rebuild_sched_domains(void);
|
||||
|
||||
extern void cpuset_print_task_mems_allowed(struct task_struct *p);
|
||||
|
||||
static inline void set_mems_allowed(nodemask_t nodemask)
|
||||
{
|
||||
current->mems_allowed = nodemask;
|
||||
}
|
||||
|
||||
#else /* !CONFIG_CPUSETS */
|
||||
|
||||
static inline int cpuset_init_early(void) { return 0; }
|
||||
static inline int cpuset_init(void) { return 0; }
|
||||
static inline void cpuset_init_smp(void) {}
|
||||
|
||||
@@ -116,7 +118,6 @@ static inline nodemask_t cpuset_mems_allowed(struct task_struct *p)
|
||||
|
||||
#define cpuset_current_mems_allowed (node_states[N_HIGH_MEMORY])
|
||||
static inline void cpuset_init_current_mems_allowed(void) {}
|
||||
static inline void cpuset_update_task_memory_state(void) {}
|
||||
|
||||
static inline int cpuset_nodemask_valid_mems_allowed(nodemask_t *nodemask)
|
||||
{
|
||||
@@ -188,6 +189,10 @@ static inline void cpuset_print_task_mems_allowed(struct task_struct *p)
|
||||
{
|
||||
}
|
||||
|
||||
static inline void set_mems_allowed(nodemask_t nodemask)
|
||||
{
|
||||
}
|
||||
|
||||
#endif /* !CONFIG_CPUSETS */
|
||||
|
||||
#endif /* _LINUX_CPUSET_H */
|
||||
|
||||
+12
-2
@@ -677,6 +677,9 @@ struct fb_ops {
|
||||
/* get capability given var */
|
||||
void (*fb_get_caps)(struct fb_info *info, struct fb_blit_caps *caps,
|
||||
struct fb_var_screeninfo *var);
|
||||
|
||||
/* teardown any resources to do with this framebuffer */
|
||||
void (*fb_destroy)(struct fb_info *info);
|
||||
};
|
||||
|
||||
#ifdef CONFIG_FB_TILEBLITTING
|
||||
@@ -786,6 +789,8 @@ struct fb_tile_ops {
|
||||
#define FBINFO_MISC_USEREVENT 0x10000 /* event request
|
||||
from userspace */
|
||||
#define FBINFO_MISC_TILEBLITTING 0x20000 /* use tile blitting */
|
||||
#define FBINFO_MISC_FIRMWARE 0x40000 /* a replaceable firmware
|
||||
inited framebuffer */
|
||||
|
||||
/* A driver may set this flag to indicate that it does want a set_par to be
|
||||
* called every time when fbcon_switch is executed. The advantage is that with
|
||||
@@ -854,7 +859,12 @@ struct fb_info {
|
||||
u32 state; /* Hardware state i.e suspend */
|
||||
void *fbcon_par; /* fbcon use-only private area */
|
||||
/* From here on everything is device dependent */
|
||||
void *par;
|
||||
void *par;
|
||||
/* we need the PCI or similiar aperture base/size not
|
||||
smem_start/size as smem_start may just be an object
|
||||
allocated inside the aperture so may not actually overlap */
|
||||
resource_size_t aperture_base;
|
||||
resource_size_t aperture_size;
|
||||
};
|
||||
|
||||
#ifdef MODULE
|
||||
@@ -893,7 +903,7 @@ struct fb_info {
|
||||
#define fb_writeq sbus_writeq
|
||||
#define fb_memset sbus_memset_io
|
||||
|
||||
#elif defined(__i386__) || defined(__alpha__) || defined(__x86_64__) || defined(__hppa__) || defined(__sh__) || defined(__powerpc__) || defined(__avr32__)
|
||||
#elif defined(__i386__) || defined(__alpha__) || defined(__x86_64__) || defined(__hppa__) || defined(__sh__) || defined(__powerpc__) || defined(__avr32__) || defined(__bfin__)
|
||||
|
||||
#define fb_readb __raw_readb
|
||||
#define fb_readw __raw_readw
|
||||
|
||||
@@ -24,21 +24,17 @@
|
||||
*/
|
||||
#ifdef CONFIG_FIRMWARE_MEMMAP
|
||||
|
||||
int firmware_map_add(resource_size_t start, resource_size_t end,
|
||||
const char *type);
|
||||
int firmware_map_add_early(resource_size_t start, resource_size_t end,
|
||||
const char *type);
|
||||
int firmware_map_add(u64 start, u64 end, const char *type);
|
||||
int firmware_map_add_early(u64 start, u64 end, const char *type);
|
||||
|
||||
#else /* CONFIG_FIRMWARE_MEMMAP */
|
||||
|
||||
static inline int firmware_map_add(resource_size_t start, resource_size_t end,
|
||||
const char *type)
|
||||
static inline int firmware_map_add(u64 start, u64 end, const char *type)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline int firmware_map_add_early(resource_size_t start,
|
||||
resource_size_t end, const char *type)
|
||||
static inline int firmware_map_add_early(u64 start, u64 end, const char *type)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
+1
-4
@@ -879,7 +879,7 @@ struct file_ra_state {
|
||||
there are only # of pages ahead */
|
||||
|
||||
unsigned int ra_pages; /* Maximum readahead window */
|
||||
int mmap_miss; /* Cache miss stat for mmap accesses */
|
||||
unsigned int mmap_miss; /* Cache miss stat for mmap accesses */
|
||||
loff_t prev_pos; /* Cache last read() position */
|
||||
};
|
||||
|
||||
@@ -2037,9 +2037,6 @@ extern int __invalidate_device(struct block_device *);
|
||||
extern int invalidate_partition(struct gendisk *, int);
|
||||
#endif
|
||||
extern int invalidate_inodes(struct super_block *);
|
||||
unsigned long __invalidate_mapping_pages(struct address_space *mapping,
|
||||
pgoff_t start, pgoff_t end,
|
||||
bool be_atomic);
|
||||
unsigned long invalidate_mapping_pages(struct address_space *mapping,
|
||||
pgoff_t start, pgoff_t end);
|
||||
|
||||
|
||||
+121
-33
@@ -5,6 +5,7 @@
|
||||
#include <linux/stddef.h>
|
||||
#include <linux/linkage.h>
|
||||
#include <linux/topology.h>
|
||||
#include <linux/mmdebug.h>
|
||||
|
||||
struct vm_area_struct;
|
||||
|
||||
@@ -20,7 +21,8 @@ struct vm_area_struct;
|
||||
#define __GFP_DMA ((__force gfp_t)0x01u)
|
||||
#define __GFP_HIGHMEM ((__force gfp_t)0x02u)
|
||||
#define __GFP_DMA32 ((__force gfp_t)0x04u)
|
||||
|
||||
#define __GFP_MOVABLE ((__force gfp_t)0x08u) /* Page is movable */
|
||||
#define GFP_ZONEMASK (__GFP_DMA|__GFP_HIGHMEM|__GFP_DMA32|__GFP_MOVABLE)
|
||||
/*
|
||||
* Action modifiers - doesn't change the zoning
|
||||
*
|
||||
@@ -50,7 +52,6 @@ struct vm_area_struct;
|
||||
#define __GFP_HARDWALL ((__force gfp_t)0x20000u) /* Enforce hardwall cpuset memory allocs */
|
||||
#define __GFP_THISNODE ((__force gfp_t)0x40000u)/* No fallback, no policies */
|
||||
#define __GFP_RECLAIMABLE ((__force gfp_t)0x80000u) /* Page is reclaimable */
|
||||
#define __GFP_MOVABLE ((__force gfp_t)0x100000u) /* Page is movable */
|
||||
|
||||
#ifdef CONFIG_KMEMCHECK
|
||||
#define __GFP_NOTRACK ((__force gfp_t)0x200000u) /* Don't track with kmemcheck */
|
||||
@@ -127,24 +128,105 @@ static inline int allocflags_to_migratetype(gfp_t gfp_flags)
|
||||
((gfp_flags & __GFP_RECLAIMABLE) != 0);
|
||||
}
|
||||
|
||||
#ifdef CONFIG_HIGHMEM
|
||||
#define OPT_ZONE_HIGHMEM ZONE_HIGHMEM
|
||||
#else
|
||||
#define OPT_ZONE_HIGHMEM ZONE_NORMAL
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_ZONE_DMA
|
||||
#define OPT_ZONE_DMA ZONE_DMA
|
||||
#else
|
||||
#define OPT_ZONE_DMA ZONE_NORMAL
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_ZONE_DMA32
|
||||
#define OPT_ZONE_DMA32 ZONE_DMA32
|
||||
#else
|
||||
#define OPT_ZONE_DMA32 ZONE_NORMAL
|
||||
#endif
|
||||
|
||||
/*
|
||||
* GFP_ZONE_TABLE is a word size bitstring that is used for looking up the
|
||||
* zone to use given the lowest 4 bits of gfp_t. Entries are ZONE_SHIFT long
|
||||
* and there are 16 of them to cover all possible combinations of
|
||||
* __GFP_DMA, __GFP_DMA32, __GFP_MOVABLE and __GFP_HIGHMEM
|
||||
*
|
||||
* The zone fallback order is MOVABLE=>HIGHMEM=>NORMAL=>DMA32=>DMA.
|
||||
* But GFP_MOVABLE is not only a zone specifier but also an allocation
|
||||
* policy. Therefore __GFP_MOVABLE plus another zone selector is valid.
|
||||
* Only 1bit of the lowest 3 bit (DMA,DMA32,HIGHMEM) can be set to "1".
|
||||
*
|
||||
* bit result
|
||||
* =================
|
||||
* 0x0 => NORMAL
|
||||
* 0x1 => DMA or NORMAL
|
||||
* 0x2 => HIGHMEM or NORMAL
|
||||
* 0x3 => BAD (DMA+HIGHMEM)
|
||||
* 0x4 => DMA32 or DMA or NORMAL
|
||||
* 0x5 => BAD (DMA+DMA32)
|
||||
* 0x6 => BAD (HIGHMEM+DMA32)
|
||||
* 0x7 => BAD (HIGHMEM+DMA32+DMA)
|
||||
* 0x8 => NORMAL (MOVABLE+0)
|
||||
* 0x9 => DMA or NORMAL (MOVABLE+DMA)
|
||||
* 0xa => MOVABLE (Movable is valid only if HIGHMEM is set too)
|
||||
* 0xb => BAD (MOVABLE+HIGHMEM+DMA)
|
||||
* 0xc => DMA32 (MOVABLE+HIGHMEM+DMA32)
|
||||
* 0xd => BAD (MOVABLE+DMA32+DMA)
|
||||
* 0xe => BAD (MOVABLE+DMA32+HIGHMEM)
|
||||
* 0xf => BAD (MOVABLE+DMA32+HIGHMEM+DMA)
|
||||
*
|
||||
* ZONES_SHIFT must be <= 2 on 32 bit platforms.
|
||||
*/
|
||||
|
||||
#if 16 * ZONES_SHIFT > BITS_PER_LONG
|
||||
#error ZONES_SHIFT too large to create GFP_ZONE_TABLE integer
|
||||
#endif
|
||||
|
||||
#define GFP_ZONE_TABLE ( \
|
||||
(ZONE_NORMAL << 0 * ZONES_SHIFT) \
|
||||
| (OPT_ZONE_DMA << __GFP_DMA * ZONES_SHIFT) \
|
||||
| (OPT_ZONE_HIGHMEM << __GFP_HIGHMEM * ZONES_SHIFT) \
|
||||
| (OPT_ZONE_DMA32 << __GFP_DMA32 * ZONES_SHIFT) \
|
||||
| (ZONE_NORMAL << __GFP_MOVABLE * ZONES_SHIFT) \
|
||||
| (OPT_ZONE_DMA << (__GFP_MOVABLE | __GFP_DMA) * ZONES_SHIFT) \
|
||||
| (ZONE_MOVABLE << (__GFP_MOVABLE | __GFP_HIGHMEM) * ZONES_SHIFT)\
|
||||
| (OPT_ZONE_DMA32 << (__GFP_MOVABLE | __GFP_DMA32) * ZONES_SHIFT)\
|
||||
)
|
||||
|
||||
/*
|
||||
* GFP_ZONE_BAD is a bitmap for all combination of __GFP_DMA, __GFP_DMA32
|
||||
* __GFP_HIGHMEM and __GFP_MOVABLE that are not permitted. One flag per
|
||||
* entry starting with bit 0. Bit is set if the combination is not
|
||||
* allowed.
|
||||
*/
|
||||
#define GFP_ZONE_BAD ( \
|
||||
1 << (__GFP_DMA | __GFP_HIGHMEM) \
|
||||
| 1 << (__GFP_DMA | __GFP_DMA32) \
|
||||
| 1 << (__GFP_DMA32 | __GFP_HIGHMEM) \
|
||||
| 1 << (__GFP_DMA | __GFP_DMA32 | __GFP_HIGHMEM) \
|
||||
| 1 << (__GFP_MOVABLE | __GFP_HIGHMEM | __GFP_DMA) \
|
||||
| 1 << (__GFP_MOVABLE | __GFP_DMA32 | __GFP_DMA) \
|
||||
| 1 << (__GFP_MOVABLE | __GFP_DMA32 | __GFP_HIGHMEM) \
|
||||
| 1 << (__GFP_MOVABLE | __GFP_DMA32 | __GFP_DMA | __GFP_HIGHMEM)\
|
||||
)
|
||||
|
||||
static inline enum zone_type gfp_zone(gfp_t flags)
|
||||
{
|
||||
#ifdef CONFIG_ZONE_DMA
|
||||
if (flags & __GFP_DMA)
|
||||
return ZONE_DMA;
|
||||
enum zone_type z;
|
||||
int bit = flags & GFP_ZONEMASK;
|
||||
|
||||
z = (GFP_ZONE_TABLE >> (bit * ZONES_SHIFT)) &
|
||||
((1 << ZONES_SHIFT) - 1);
|
||||
|
||||
if (__builtin_constant_p(bit))
|
||||
BUILD_BUG_ON((GFP_ZONE_BAD >> bit) & 1);
|
||||
else {
|
||||
#ifdef CONFIG_DEBUG_VM
|
||||
BUG_ON((GFP_ZONE_BAD >> bit) & 1);
|
||||
#endif
|
||||
#ifdef CONFIG_ZONE_DMA32
|
||||
if (flags & __GFP_DMA32)
|
||||
return ZONE_DMA32;
|
||||
#endif
|
||||
if ((flags & (__GFP_HIGHMEM | __GFP_MOVABLE)) ==
|
||||
(__GFP_HIGHMEM | __GFP_MOVABLE))
|
||||
return ZONE_MOVABLE;
|
||||
#ifdef CONFIG_HIGHMEM
|
||||
if (flags & __GFP_HIGHMEM)
|
||||
return ZONE_HIGHMEM;
|
||||
#endif
|
||||
return ZONE_NORMAL;
|
||||
}
|
||||
return z;
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -184,30 +266,19 @@ static inline void arch_alloc_page(struct page *page, int order) { }
|
||||
#endif
|
||||
|
||||
struct page *
|
||||
__alloc_pages_internal(gfp_t gfp_mask, unsigned int order,
|
||||
__alloc_pages_nodemask(gfp_t gfp_mask, unsigned int order,
|
||||
struct zonelist *zonelist, nodemask_t *nodemask);
|
||||
|
||||
static inline struct page *
|
||||
__alloc_pages(gfp_t gfp_mask, unsigned int order,
|
||||
struct zonelist *zonelist)
|
||||
{
|
||||
return __alloc_pages_internal(gfp_mask, order, zonelist, NULL);
|
||||
return __alloc_pages_nodemask(gfp_mask, order, zonelist, NULL);
|
||||
}
|
||||
|
||||
static inline struct page *
|
||||
__alloc_pages_nodemask(gfp_t gfp_mask, unsigned int order,
|
||||
struct zonelist *zonelist, nodemask_t *nodemask)
|
||||
{
|
||||
return __alloc_pages_internal(gfp_mask, order, zonelist, nodemask);
|
||||
}
|
||||
|
||||
|
||||
static inline struct page *alloc_pages_node(int nid, gfp_t gfp_mask,
|
||||
unsigned int order)
|
||||
{
|
||||
if (unlikely(order >= MAX_ORDER))
|
||||
return NULL;
|
||||
|
||||
/* Unknown node is current node */
|
||||
if (nid < 0)
|
||||
nid = numa_node_id();
|
||||
@@ -215,15 +286,20 @@ static inline struct page *alloc_pages_node(int nid, gfp_t gfp_mask,
|
||||
return __alloc_pages(gfp_mask, order, node_zonelist(nid, gfp_mask));
|
||||
}
|
||||
|
||||
static inline struct page *alloc_pages_exact_node(int nid, gfp_t gfp_mask,
|
||||
unsigned int order)
|
||||
{
|
||||
VM_BUG_ON(nid < 0 || nid >= MAX_NUMNODES);
|
||||
|
||||
return __alloc_pages(gfp_mask, order, node_zonelist(nid, gfp_mask));
|
||||
}
|
||||
|
||||
#ifdef CONFIG_NUMA
|
||||
extern struct page *alloc_pages_current(gfp_t gfp_mask, unsigned order);
|
||||
|
||||
static inline struct page *
|
||||
alloc_pages(gfp_t gfp_mask, unsigned int order)
|
||||
{
|
||||
if (unlikely(order >= MAX_ORDER))
|
||||
return NULL;
|
||||
|
||||
return alloc_pages_current(gfp_mask, order);
|
||||
}
|
||||
extern struct page *alloc_page_vma(gfp_t gfp_mask,
|
||||
@@ -260,4 +336,16 @@ void drain_zone_pages(struct zone *zone, struct per_cpu_pages *pcp);
|
||||
void drain_all_pages(void);
|
||||
void drain_local_pages(void *dummy);
|
||||
|
||||
extern bool oom_killer_disabled;
|
||||
|
||||
static inline void oom_killer_disable(void)
|
||||
{
|
||||
oom_killer_disabled = true;
|
||||
}
|
||||
|
||||
static inline void oom_killer_enable(void)
|
||||
{
|
||||
oom_killer_disabled = false;
|
||||
}
|
||||
|
||||
#endif /* __LINUX_GFP_H */
|
||||
|
||||
@@ -55,7 +55,9 @@ static inline void *kmap(struct page *page)
|
||||
return page_address(page);
|
||||
}
|
||||
|
||||
#define kunmap(page) do { (void) (page); } while (0)
|
||||
static inline void kunmap(struct page *page)
|
||||
{
|
||||
}
|
||||
|
||||
static inline void *kmap_atomic(struct page *page, enum km_type idx)
|
||||
{
|
||||
|
||||
@@ -11,6 +11,8 @@
|
||||
|
||||
struct ctl_table;
|
||||
|
||||
int PageHuge(struct page *page);
|
||||
|
||||
static inline int is_vm_hugetlb_page(struct vm_area_struct *vma)
|
||||
{
|
||||
return vma->vm_flags & VM_HUGETLB;
|
||||
@@ -61,6 +63,11 @@ void hugetlb_change_protection(struct vm_area_struct *vma,
|
||||
|
||||
#else /* !CONFIG_HUGETLB_PAGE */
|
||||
|
||||
static inline int PageHuge(struct page *page)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline int is_vm_hugetlb_page(struct vm_area_struct *vma)
|
||||
{
|
||||
return 0;
|
||||
|
||||
@@ -29,7 +29,7 @@
|
||||
* sign followed by value, e.g.:
|
||||
*
|
||||
* static int init_variable __initdata = 0;
|
||||
* static char linux_logo[] __initdata = { 0x32, 0x36, ... };
|
||||
* static const char linux_logo[] __initconst = { 0x32, 0x36, ... };
|
||||
*
|
||||
* Don't forget to initialize data not at file scope, i.e. within a function,
|
||||
* as gcc otherwise puts the data into the bss section and not into the init
|
||||
|
||||
@@ -15,18 +15,6 @@
|
||||
extern struct files_struct init_files;
|
||||
extern struct fs_struct init_fs;
|
||||
|
||||
#define INIT_MM(name) \
|
||||
{ \
|
||||
.mm_rb = RB_ROOT, \
|
||||
.pgd = swapper_pg_dir, \
|
||||
.mm_users = ATOMIC_INIT(2), \
|
||||
.mm_count = ATOMIC_INIT(1), \
|
||||
.mmap_sem = __RWSEM_INITIALIZER(name.mmap_sem), \
|
||||
.page_table_lock = __SPIN_LOCK_UNLOCKED(name.page_table_lock), \
|
||||
.mmlist = LIST_HEAD_INIT(name.mmlist), \
|
||||
.cpu_vm_mask = CPU_MASK_ALL, \
|
||||
}
|
||||
|
||||
#define INIT_SIGNALS(sig) { \
|
||||
.count = ATOMIC_INIT(1), \
|
||||
.wait_chldexit = __WAIT_QUEUE_HEAD_INITIALIZER(sig.wait_chldexit),\
|
||||
|
||||
@@ -32,6 +32,22 @@ struct linux_logo {
|
||||
const unsigned char *data;
|
||||
};
|
||||
|
||||
extern const struct linux_logo logo_linux_mono;
|
||||
extern const struct linux_logo logo_linux_vga16;
|
||||
extern const struct linux_logo logo_linux_clut224;
|
||||
extern const struct linux_logo logo_blackfin_vga16;
|
||||
extern const struct linux_logo logo_blackfin_clut224;
|
||||
extern const struct linux_logo logo_dec_clut224;
|
||||
extern const struct linux_logo logo_mac_clut224;
|
||||
extern const struct linux_logo logo_parisc_clut224;
|
||||
extern const struct linux_logo logo_sgi_clut224;
|
||||
extern const struct linux_logo logo_sun_clut224;
|
||||
extern const struct linux_logo logo_superh_mono;
|
||||
extern const struct linux_logo logo_superh_vga16;
|
||||
extern const struct linux_logo logo_superh_clut224;
|
||||
extern const struct linux_logo logo_m32r_clut224;
|
||||
extern const struct linux_logo logo_spe_clut224;
|
||||
|
||||
extern const struct linux_logo *fb_find_logo(int depth);
|
||||
#ifdef CONFIG_FB_LOGO_EXTRA
|
||||
extern void fb_append_extra_logo(const struct linux_logo *logo,
|
||||
|
||||
@@ -0,0 +1,39 @@
|
||||
#ifndef __LIS3LV02D_H_
|
||||
#define __LIS3LV02D_H_
|
||||
|
||||
struct lis3lv02d_platform_data {
|
||||
/* please note: the 'click' feature is only supported for
|
||||
* LIS[32]02DL variants of the chip and will be ignored for
|
||||
* others */
|
||||
#define LIS3_CLICK_SINGLE_X (1 << 0)
|
||||
#define LIS3_CLICK_DOUBLE_X (1 << 1)
|
||||
#define LIS3_CLICK_SINGLE_Y (1 << 2)
|
||||
#define LIS3_CLICK_DOUBLE_Y (1 << 3)
|
||||
#define LIS3_CLICK_SINGLE_Z (1 << 4)
|
||||
#define LIS3_CLICK_DOUBLE_Z (1 << 5)
|
||||
unsigned char click_flags;
|
||||
unsigned char click_thresh_x;
|
||||
unsigned char click_thresh_y;
|
||||
unsigned char click_thresh_z;
|
||||
unsigned char click_time_limit;
|
||||
unsigned char click_latency;
|
||||
unsigned char click_window;
|
||||
|
||||
#define LIS3_IRQ1_DISABLE (0 << 0)
|
||||
#define LIS3_IRQ1_FF_WU_1 (1 << 0)
|
||||
#define LIS3_IRQ1_FF_WU_2 (2 << 0)
|
||||
#define LIS3_IRQ1_FF_WU_12 (3 << 0)
|
||||
#define LIS3_IRQ1_DATA_READY (4 << 0)
|
||||
#define LIS3_IRQ1_CLICK (7 << 0)
|
||||
#define LIS3_IRQ2_DISABLE (0 << 3)
|
||||
#define LIS3_IRQ2_FF_WU_1 (1 << 3)
|
||||
#define LIS3_IRQ2_FF_WU_2 (2 << 3)
|
||||
#define LIS3_IRQ2_FF_WU_12 (3 << 3)
|
||||
#define LIS3_IRQ2_DATA_READY (4 << 3)
|
||||
#define LIS3_IRQ2_CLICK (7 << 3)
|
||||
#define LIS3_IRQ_OPEN_DRAIN (1 << 6)
|
||||
#define LIS3_IRQ_ACTIVE_HIGH (1 << 7)
|
||||
unsigned char irq_cfg;
|
||||
};
|
||||
|
||||
#endif /* __LIS3LV02D_H_ */
|
||||
@@ -145,6 +145,7 @@
|
||||
#define UNIX98_PTY_MAJOR_COUNT 8
|
||||
#define UNIX98_PTY_SLAVE_MAJOR (UNIX98_PTY_MASTER_MAJOR+UNIX98_PTY_MAJOR_COUNT)
|
||||
|
||||
#define DRBD_MAJOR 147
|
||||
#define RTF_MAJOR 150
|
||||
#define RAW_MAJOR 162
|
||||
|
||||
|
||||
@@ -94,6 +94,7 @@ extern void mem_cgroup_note_reclaim_priority(struct mem_cgroup *mem,
|
||||
extern void mem_cgroup_record_reclaim_priority(struct mem_cgroup *mem,
|
||||
int priority);
|
||||
int mem_cgroup_inactive_anon_is_low(struct mem_cgroup *memcg);
|
||||
int mem_cgroup_inactive_file_is_low(struct mem_cgroup *memcg);
|
||||
unsigned long mem_cgroup_zone_nr_pages(struct mem_cgroup *memcg,
|
||||
struct zone *zone,
|
||||
enum lru_list lru);
|
||||
@@ -239,6 +240,12 @@ mem_cgroup_inactive_anon_is_low(struct mem_cgroup *memcg)
|
||||
return 1;
|
||||
}
|
||||
|
||||
static inline int
|
||||
mem_cgroup_inactive_file_is_low(struct mem_cgroup *memcg)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
static inline unsigned long
|
||||
mem_cgroup_zone_nr_pages(struct mem_cgroup *memcg, struct zone *zone,
|
||||
enum lru_list lru)
|
||||
|
||||
+13
-20
@@ -7,7 +7,6 @@
|
||||
|
||||
#include <linux/gfp.h>
|
||||
#include <linux/list.h>
|
||||
#include <linux/mmdebug.h>
|
||||
#include <linux/mmzone.h>
|
||||
#include <linux/rbtree.h>
|
||||
#include <linux/prio_tree.h>
|
||||
@@ -725,7 +724,7 @@ static inline int shmem_lock(struct file *file, int lock,
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
struct file *shmem_file_setup(char *name, loff_t size, unsigned long flags);
|
||||
struct file *shmem_file_setup(const char *name, loff_t size, unsigned long flags);
|
||||
|
||||
int shmem_zero_setup(struct vm_area_struct *);
|
||||
|
||||
@@ -793,6 +792,8 @@ int copy_page_range(struct mm_struct *dst, struct mm_struct *src,
|
||||
struct vm_area_struct *vma);
|
||||
void unmap_mapping_range(struct address_space *mapping,
|
||||
loff_t const holebegin, loff_t const holelen, int even_cows);
|
||||
int follow_pfn(struct vm_area_struct *vma, unsigned long address,
|
||||
unsigned long *pfn);
|
||||
int follow_phys(struct vm_area_struct *vma, unsigned long address,
|
||||
unsigned int flags, unsigned long *prot, resource_size_t *phys);
|
||||
int generic_access_phys(struct vm_area_struct *vma, unsigned long addr,
|
||||
@@ -824,8 +825,11 @@ static inline int handle_mm_fault(struct mm_struct *mm,
|
||||
extern int make_pages_present(unsigned long addr, unsigned long end);
|
||||
extern int access_process_vm(struct task_struct *tsk, unsigned long addr, void *buf, int len, int write);
|
||||
|
||||
int get_user_pages(struct task_struct *tsk, struct mm_struct *mm, unsigned long start,
|
||||
int len, int write, int force, struct page **pages, struct vm_area_struct **vmas);
|
||||
int get_user_pages(struct task_struct *tsk, struct mm_struct *mm,
|
||||
unsigned long start, int len, int write, int force,
|
||||
struct page **pages, struct vm_area_struct **vmas);
|
||||
int get_user_pages_fast(unsigned long start, int nr_pages, int write,
|
||||
struct page **pages);
|
||||
|
||||
extern int try_to_release_page(struct page * page, gfp_t gfp_mask);
|
||||
extern void do_invalidatepage(struct page *page, unsigned long offset);
|
||||
@@ -849,19 +853,6 @@ extern int mprotect_fixup(struct vm_area_struct *vma,
|
||||
struct vm_area_struct **pprev, unsigned long start,
|
||||
unsigned long end, unsigned long newflags);
|
||||
|
||||
/*
|
||||
* get_user_pages_fast provides equivalent functionality to get_user_pages,
|
||||
* operating on current and current->mm (force=0 and doesn't return any vmas).
|
||||
*
|
||||
* get_user_pages_fast may take mmap_sem and page tables, so no assumptions
|
||||
* can be made about locking. get_user_pages_fast is to be implemented in a
|
||||
* way that is advantageous (vs get_user_pages()) when the user memory area is
|
||||
* already faulted in and present in ptes. However if the pages have to be
|
||||
* faulted in, it may turn out to be slightly slower).
|
||||
*/
|
||||
int get_user_pages_fast(unsigned long start, int nr_pages, int write,
|
||||
struct page **pages);
|
||||
|
||||
/*
|
||||
* A callback you can register to apply pressure to ageable caches.
|
||||
*
|
||||
@@ -1061,7 +1052,8 @@ extern int __meminit __early_pfn_to_nid(unsigned long pfn);
|
||||
extern void set_dma_reserve(unsigned long new_dma_reserve);
|
||||
extern void memmap_init_zone(unsigned long, int, unsigned long,
|
||||
unsigned long, enum memmap_context);
|
||||
extern void setup_per_zone_pages_min(void);
|
||||
extern void setup_per_zone_wmarks(void);
|
||||
extern void calculate_zone_inactive_ratio(struct zone *zone);
|
||||
extern void mem_init(void);
|
||||
extern void __init mmap_init(void);
|
||||
extern void show_mem(void);
|
||||
@@ -1178,8 +1170,6 @@ void task_dirty_inc(struct task_struct *tsk);
|
||||
#define VM_MAX_READAHEAD 128 /* kbytes */
|
||||
#define VM_MIN_READAHEAD 16 /* kbytes (includes current page) */
|
||||
|
||||
int do_page_cache_readahead(struct address_space *mapping, struct file *filp,
|
||||
pgoff_t offset, unsigned long nr_to_read);
|
||||
int force_page_cache_readahead(struct address_space *mapping, struct file *filp,
|
||||
pgoff_t offset, unsigned long nr_to_read);
|
||||
|
||||
@@ -1197,6 +1187,9 @@ void page_cache_async_readahead(struct address_space *mapping,
|
||||
unsigned long size);
|
||||
|
||||
unsigned long max_sane_readahead(unsigned long nr);
|
||||
unsigned long ra_submit(struct file_ra_state *ra,
|
||||
struct address_space *mapping,
|
||||
struct file *filp);
|
||||
|
||||
/* Do stack extension */
|
||||
extern int expand_stack(struct vm_area_struct *vma, unsigned long address);
|
||||
|
||||
@@ -240,6 +240,8 @@ struct mm_struct {
|
||||
|
||||
unsigned long saved_auxv[AT_VECTOR_SIZE]; /* for /proc/PID/auxv */
|
||||
|
||||
s8 oom_adj; /* OOM kill score adjustment (bit shift) */
|
||||
|
||||
cpumask_t cpu_vm_mask;
|
||||
|
||||
/* Architecture-specific MM context */
|
||||
|
||||
+17
-19
@@ -50,9 +50,6 @@ extern int page_group_by_mobility_disabled;
|
||||
|
||||
static inline int get_pageblock_migratetype(struct page *page)
|
||||
{
|
||||
if (unlikely(page_group_by_mobility_disabled))
|
||||
return MIGRATE_UNMOVABLE;
|
||||
|
||||
return get_pageblock_flags_group(page, PB_migrate, PB_migrate_end);
|
||||
}
|
||||
|
||||
@@ -86,13 +83,8 @@ enum zone_stat_item {
|
||||
NR_ACTIVE_ANON, /* " " " " " */
|
||||
NR_INACTIVE_FILE, /* " " " " " */
|
||||
NR_ACTIVE_FILE, /* " " " " " */
|
||||
#ifdef CONFIG_UNEVICTABLE_LRU
|
||||
NR_UNEVICTABLE, /* " " " " " */
|
||||
NR_MLOCK, /* mlock()ed pages found and moved off LRU */
|
||||
#else
|
||||
NR_UNEVICTABLE = NR_ACTIVE_FILE, /* avoid compiler errors in dead code */
|
||||
NR_MLOCK = NR_ACTIVE_FILE,
|
||||
#endif
|
||||
NR_ANON_PAGES, /* Mapped anonymous pages */
|
||||
NR_FILE_MAPPED, /* pagecache pages mapped into pagetables.
|
||||
only modified from process context */
|
||||
@@ -135,11 +127,7 @@ enum lru_list {
|
||||
LRU_ACTIVE_ANON = LRU_BASE + LRU_ACTIVE,
|
||||
LRU_INACTIVE_FILE = LRU_BASE + LRU_FILE,
|
||||
LRU_ACTIVE_FILE = LRU_BASE + LRU_FILE + LRU_ACTIVE,
|
||||
#ifdef CONFIG_UNEVICTABLE_LRU
|
||||
LRU_UNEVICTABLE,
|
||||
#else
|
||||
LRU_UNEVICTABLE = LRU_ACTIVE_FILE, /* avoid compiler errors in dead code */
|
||||
#endif
|
||||
NR_LRU_LISTS
|
||||
};
|
||||
|
||||
@@ -159,13 +147,20 @@ static inline int is_active_lru(enum lru_list l)
|
||||
|
||||
static inline int is_unevictable_lru(enum lru_list l)
|
||||
{
|
||||
#ifdef CONFIG_UNEVICTABLE_LRU
|
||||
return (l == LRU_UNEVICTABLE);
|
||||
#else
|
||||
return 0;
|
||||
#endif
|
||||
}
|
||||
|
||||
enum zone_watermarks {
|
||||
WMARK_MIN,
|
||||
WMARK_LOW,
|
||||
WMARK_HIGH,
|
||||
NR_WMARK
|
||||
};
|
||||
|
||||
#define min_wmark_pages(z) (z->watermark[WMARK_MIN])
|
||||
#define low_wmark_pages(z) (z->watermark[WMARK_LOW])
|
||||
#define high_wmark_pages(z) (z->watermark[WMARK_HIGH])
|
||||
|
||||
struct per_cpu_pages {
|
||||
int count; /* number of pages in the list */
|
||||
int high; /* high watermark, emptying needed */
|
||||
@@ -278,7 +273,10 @@ struct zone_reclaim_stat {
|
||||
|
||||
struct zone {
|
||||
/* Fields commonly accessed by the page allocator */
|
||||
unsigned long pages_min, pages_low, pages_high;
|
||||
|
||||
/* zone watermarks, access with *_wmark_pages(zone) macros */
|
||||
unsigned long watermark[NR_WMARK];
|
||||
|
||||
/*
|
||||
* We don't know if the memory that we're going to allocate will be freeable
|
||||
* or/and it will be released eventually, so to avoid totally wasting several
|
||||
@@ -323,9 +321,9 @@ struct zone {
|
||||
|
||||
/* Fields commonly accessed by the page reclaim scanner */
|
||||
spinlock_t lru_lock;
|
||||
struct {
|
||||
struct zone_lru {
|
||||
struct list_head list;
|
||||
unsigned long nr_scan;
|
||||
unsigned long nr_saved_scan; /* accumulated for batching */
|
||||
} lru[NR_LRU_LISTS];
|
||||
|
||||
struct zone_reclaim_stat reclaim_stat;
|
||||
|
||||
@@ -697,4 +697,21 @@ static inline void module_remove_modinfo_attrs(struct module *mod)
|
||||
|
||||
#define __MODULE_STRING(x) __stringify(x)
|
||||
|
||||
|
||||
#ifdef CONFIG_GENERIC_BUG
|
||||
int module_bug_finalize(const Elf_Ehdr *, const Elf_Shdr *,
|
||||
struct module *);
|
||||
void module_bug_cleanup(struct module *);
|
||||
|
||||
#else /* !CONFIG_GENERIC_BUG */
|
||||
|
||||
static inline int module_bug_finalize(const Elf_Ehdr *hdr,
|
||||
const Elf_Shdr *sechdrs,
|
||||
struct module *mod)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
static inline void module_bug_cleanup(struct module *mod) {}
|
||||
#endif /* CONFIG_GENERIC_BUG */
|
||||
|
||||
#endif /* _LINUX_MODULE_H */
|
||||
|
||||
@@ -408,6 +408,19 @@ static inline int num_node_state(enum node_states state)
|
||||
#define next_online_node(nid) next_node((nid), node_states[N_ONLINE])
|
||||
|
||||
extern int nr_node_ids;
|
||||
extern int nr_online_nodes;
|
||||
|
||||
static inline void node_set_online(int nid)
|
||||
{
|
||||
node_set_state(nid, N_ONLINE);
|
||||
nr_online_nodes = num_node_state(N_ONLINE);
|
||||
}
|
||||
|
||||
static inline void node_set_offline(int nid)
|
||||
{
|
||||
node_clear_state(nid, N_ONLINE);
|
||||
nr_online_nodes = num_node_state(N_ONLINE);
|
||||
}
|
||||
#else
|
||||
|
||||
static inline int node_state(int node, enum node_states state)
|
||||
@@ -434,7 +447,10 @@ static inline int num_node_state(enum node_states state)
|
||||
#define first_online_node 0
|
||||
#define next_online_node(nid) (MAX_NUMNODES)
|
||||
#define nr_node_ids 1
|
||||
#define nr_online_nodes 1
|
||||
|
||||
#define node_set_online(node) node_set_state((node), N_ONLINE)
|
||||
#define node_set_offline(node) node_clear_state((node), N_ONLINE)
|
||||
#endif
|
||||
|
||||
#define node_online_map node_states[N_ONLINE]
|
||||
@@ -454,9 +470,6 @@ static inline int num_node_state(enum node_states state)
|
||||
#define node_online(node) node_state((node), N_ONLINE)
|
||||
#define node_possible(node) node_state((node), N_POSSIBLE)
|
||||
|
||||
#define node_set_online(node) node_set_state((node), N_ONLINE)
|
||||
#define node_set_offline(node) node_clear_state((node), N_ONLINE)
|
||||
|
||||
#define for_each_node(node) for_each_node_state(node, N_POSSIBLE)
|
||||
#define for_each_online_node(node) for_each_node_state(node, N_ONLINE)
|
||||
|
||||
|
||||
@@ -95,9 +95,7 @@ enum pageflags {
|
||||
PG_reclaim, /* To be reclaimed asap */
|
||||
PG_buddy, /* Page is free, on buddy lists */
|
||||
PG_swapbacked, /* Page is backed by RAM/swap */
|
||||
#ifdef CONFIG_UNEVICTABLE_LRU
|
||||
PG_unevictable, /* Page is "unevictable" */
|
||||
#endif
|
||||
#ifdef CONFIG_HAVE_MLOCKED_PAGE_BIT
|
||||
PG_mlocked, /* Page is vma mlocked */
|
||||
#endif
|
||||
@@ -248,14 +246,8 @@ PAGEFLAG_FALSE(SwapCache)
|
||||
SETPAGEFLAG_NOOP(SwapCache) CLEARPAGEFLAG_NOOP(SwapCache)
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_UNEVICTABLE_LRU
|
||||
PAGEFLAG(Unevictable, unevictable) __CLEARPAGEFLAG(Unevictable, unevictable)
|
||||
TESTCLEARFLAG(Unevictable, unevictable)
|
||||
#else
|
||||
PAGEFLAG_FALSE(Unevictable) TESTCLEARFLAG_FALSE(Unevictable)
|
||||
SETPAGEFLAG_NOOP(Unevictable) CLEARPAGEFLAG_NOOP(Unevictable)
|
||||
__CLEARPAGEFLAG_NOOP(Unevictable)
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_HAVE_MLOCKED_PAGE_BIT
|
||||
#define MLOCK_PAGES 1
|
||||
@@ -382,12 +374,6 @@ static inline void __ClearPageTail(struct page *page)
|
||||
|
||||
#endif /* !PAGEFLAGS_EXTENDED */
|
||||
|
||||
#ifdef CONFIG_UNEVICTABLE_LRU
|
||||
#define __PG_UNEVICTABLE (1 << PG_unevictable)
|
||||
#else
|
||||
#define __PG_UNEVICTABLE 0
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_HAVE_MLOCKED_PAGE_BIT
|
||||
#define __PG_MLOCKED (1 << PG_mlocked)
|
||||
#else
|
||||
@@ -403,7 +389,7 @@ static inline void __ClearPageTail(struct page *page)
|
||||
1 << PG_private | 1 << PG_private_2 | \
|
||||
1 << PG_buddy | 1 << PG_writeback | 1 << PG_reserved | \
|
||||
1 << PG_slab | 1 << PG_swapcache | 1 << PG_active | \
|
||||
__PG_UNEVICTABLE | __PG_MLOCKED)
|
||||
1 << PG_unevictable | __PG_MLOCKED)
|
||||
|
||||
/*
|
||||
* Flags checked when a page is prepped for return by the page allocator.
|
||||
|
||||
@@ -22,9 +22,7 @@ enum mapping_flags {
|
||||
AS_EIO = __GFP_BITS_SHIFT + 0, /* IO error on async write */
|
||||
AS_ENOSPC = __GFP_BITS_SHIFT + 1, /* ENOSPC on async write */
|
||||
AS_MM_ALL_LOCKS = __GFP_BITS_SHIFT + 2, /* under mm_take_all_locks() */
|
||||
#ifdef CONFIG_UNEVICTABLE_LRU
|
||||
AS_UNEVICTABLE = __GFP_BITS_SHIFT + 3, /* e.g., ramdisk, SHM_LOCK */
|
||||
#endif
|
||||
};
|
||||
|
||||
static inline void mapping_set_error(struct address_space *mapping, int error)
|
||||
@@ -37,8 +35,6 @@ static inline void mapping_set_error(struct address_space *mapping, int error)
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef CONFIG_UNEVICTABLE_LRU
|
||||
|
||||
static inline void mapping_set_unevictable(struct address_space *mapping)
|
||||
{
|
||||
set_bit(AS_UNEVICTABLE, &mapping->flags);
|
||||
@@ -55,14 +51,6 @@ static inline int mapping_unevictable(struct address_space *mapping)
|
||||
return test_bit(AS_UNEVICTABLE, &mapping->flags);
|
||||
return !!mapping;
|
||||
}
|
||||
#else
|
||||
static inline void mapping_set_unevictable(struct address_space *mapping) { }
|
||||
static inline void mapping_clear_unevictable(struct address_space *mapping) { }
|
||||
static inline int mapping_unevictable(struct address_space *mapping)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
static inline gfp_t mapping_gfp_mask(struct address_space * mapping)
|
||||
{
|
||||
|
||||
@@ -32,6 +32,7 @@ typedef void (*poll_queue_proc)(struct file *, wait_queue_head_t *, struct poll_
|
||||
|
||||
typedef struct poll_table_struct {
|
||||
poll_queue_proc qproc;
|
||||
unsigned long key;
|
||||
} poll_table;
|
||||
|
||||
static inline void poll_wait(struct file * filp, wait_queue_head_t * wait_address, poll_table *p)
|
||||
@@ -43,10 +44,12 @@ static inline void poll_wait(struct file * filp, wait_queue_head_t * wait_addres
|
||||
static inline void init_poll_funcptr(poll_table *pt, poll_queue_proc qproc)
|
||||
{
|
||||
pt->qproc = qproc;
|
||||
pt->key = ~0UL; /* all events enabled */
|
||||
}
|
||||
|
||||
struct poll_table_entry {
|
||||
struct file *filp;
|
||||
unsigned long key;
|
||||
wait_queue_t wait;
|
||||
wait_queue_head_t *wait_address;
|
||||
};
|
||||
|
||||
@@ -167,6 +167,8 @@ radix_tree_gang_lookup_slot(struct radix_tree_root *root, void ***results,
|
||||
unsigned long first_index, unsigned int max_items);
|
||||
unsigned long radix_tree_next_hole(struct radix_tree_root *root,
|
||||
unsigned long index, unsigned long max_scan);
|
||||
unsigned long radix_tree_prev_hole(struct radix_tree_root *root,
|
||||
unsigned long index, unsigned long max_scan);
|
||||
int radix_tree_preload(gfp_t gfp_mask);
|
||||
void radix_tree_init(void);
|
||||
void *radix_tree_tag_set(struct radix_tree_root *root,
|
||||
|
||||
@@ -83,7 +83,8 @@ static inline void page_dup_rmap(struct page *page, struct vm_area_struct *vma,
|
||||
/*
|
||||
* Called from mm/vmscan.c to handle paging out
|
||||
*/
|
||||
int page_referenced(struct page *, int is_locked, struct mem_cgroup *cnt);
|
||||
int page_referenced(struct page *, int is_locked,
|
||||
struct mem_cgroup *cnt, unsigned long *vm_flags);
|
||||
int try_to_unmap(struct page *, int ignore_refs);
|
||||
|
||||
/*
|
||||
@@ -105,18 +106,11 @@ unsigned long page_address_in_vma(struct page *, struct vm_area_struct *);
|
||||
*/
|
||||
int page_mkclean(struct page *);
|
||||
|
||||
#ifdef CONFIG_UNEVICTABLE_LRU
|
||||
/*
|
||||
* called in munlock()/munmap() path to check for other vmas holding
|
||||
* the page mlocked.
|
||||
*/
|
||||
int try_to_munlock(struct page *);
|
||||
#else
|
||||
static inline int try_to_munlock(struct page *page)
|
||||
{
|
||||
return 0; /* a.k.a. SWAP_SUCCESS */
|
||||
}
|
||||
#endif
|
||||
|
||||
#else /* !CONFIG_MMU */
|
||||
|
||||
@@ -124,7 +118,7 @@ static inline int try_to_munlock(struct page *page)
|
||||
#define anon_vma_prepare(vma) (0)
|
||||
#define anon_vma_link(vma) do {} while (0)
|
||||
|
||||
#define page_referenced(page,l,cnt) TestClearPageReferenced(page)
|
||||
#define page_referenced(page, locked, cnt, flags) TestClearPageReferenced(page)
|
||||
#define try_to_unmap(page, refs) SWAP_FAIL
|
||||
|
||||
static inline int page_mkclean(struct page *page)
|
||||
|
||||
@@ -1178,7 +1178,6 @@ struct task_struct {
|
||||
* a short time
|
||||
*/
|
||||
unsigned char fpu_counter;
|
||||
s8 oomkilladj; /* OOM kill score adjustment (bit shift). */
|
||||
#ifdef CONFIG_BLK_DEV_IO_TRACE
|
||||
unsigned int btrace_seq;
|
||||
#endif
|
||||
@@ -1318,7 +1317,8 @@ struct task_struct {
|
||||
/* Thread group tracking */
|
||||
u32 parent_exec_id;
|
||||
u32 self_exec_id;
|
||||
/* Protection of (de-)allocation: mm, files, fs, tty, keyrings */
|
||||
/* Protection of (de-)allocation: mm, files, fs, tty, keyrings, mems_allowed,
|
||||
* mempolicy */
|
||||
spinlock_t alloc_lock;
|
||||
|
||||
#ifdef CONFIG_GENERIC_HARDIRQS
|
||||
@@ -1386,8 +1386,7 @@ struct task_struct {
|
||||
cputime_t acct_timexpd; /* stime + utime since last update */
|
||||
#endif
|
||||
#ifdef CONFIG_CPUSETS
|
||||
nodemask_t mems_allowed;
|
||||
int cpuset_mems_generation;
|
||||
nodemask_t mems_allowed; /* Protected by alloc_lock */
|
||||
int cpuset_mem_spread_rotor;
|
||||
#endif
|
||||
#ifdef CONFIG_CGROUPS
|
||||
@@ -1410,7 +1409,7 @@ struct task_struct {
|
||||
struct list_head perf_counter_list;
|
||||
#endif
|
||||
#ifdef CONFIG_NUMA
|
||||
struct mempolicy *mempolicy;
|
||||
struct mempolicy *mempolicy; /* Protected by alloc_lock */
|
||||
short il_next;
|
||||
#endif
|
||||
atomic_t fs_excl; /* holding fs exclusive resources */
|
||||
|
||||
@@ -177,7 +177,6 @@ static inline void init_call_single_data(void)
|
||||
|
||||
#define get_cpu() ({ preempt_disable(); smp_processor_id(); })
|
||||
#define put_cpu() preempt_enable()
|
||||
#define put_cpu_no_resched() preempt_enable_no_resched()
|
||||
|
||||
/*
|
||||
* Callback to arch code if there's nosmp or maxcpus=0 on the
|
||||
|
||||
+17
-25
@@ -129,9 +129,10 @@ enum {
|
||||
|
||||
#define SWAP_CLUSTER_MAX 32
|
||||
|
||||
#define SWAP_MAP_MAX 0x7fff
|
||||
#define SWAP_MAP_BAD 0x8000
|
||||
|
||||
#define SWAP_MAP_MAX 0x7ffe
|
||||
#define SWAP_MAP_BAD 0x7fff
|
||||
#define SWAP_HAS_CACHE 0x8000 /* There is a swap cache of entry. */
|
||||
#define SWAP_COUNT_MASK (~SWAP_HAS_CACHE)
|
||||
/*
|
||||
* The in-memory structure used to track swap areas.
|
||||
*/
|
||||
@@ -235,7 +236,6 @@ static inline int zone_reclaim(struct zone *z, gfp_t mask, unsigned int order)
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_UNEVICTABLE_LRU
|
||||
extern int page_evictable(struct page *page, struct vm_area_struct *vma);
|
||||
extern void scan_mapping_unevictable_pages(struct address_space *);
|
||||
|
||||
@@ -244,24 +244,6 @@ extern int scan_unevictable_handler(struct ctl_table *, int, struct file *,
|
||||
void __user *, size_t *, loff_t *);
|
||||
extern int scan_unevictable_register_node(struct node *node);
|
||||
extern void scan_unevictable_unregister_node(struct node *node);
|
||||
#else
|
||||
static inline int page_evictable(struct page *page,
|
||||
struct vm_area_struct *vma)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
static inline void scan_mapping_unevictable_pages(struct address_space *mapping)
|
||||
{
|
||||
}
|
||||
|
||||
static inline int scan_unevictable_register_node(struct node *node)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline void scan_unevictable_unregister_node(struct node *node) { }
|
||||
#endif
|
||||
|
||||
extern int kswapd_run(int nid);
|
||||
|
||||
@@ -274,7 +256,7 @@ extern void swap_unplug_io_fn(struct backing_dev_info *, struct page *);
|
||||
|
||||
#ifdef CONFIG_SWAP
|
||||
/* linux/mm/page_io.c */
|
||||
extern int swap_readpage(struct file *, struct page *);
|
||||
extern int swap_readpage(struct page *);
|
||||
extern int swap_writepage(struct page *page, struct writeback_control *wbc);
|
||||
extern void end_swap_bio_read(struct bio *bio, int err);
|
||||
|
||||
@@ -300,9 +282,11 @@ extern long total_swap_pages;
|
||||
extern void si_swapinfo(struct sysinfo *);
|
||||
extern swp_entry_t get_swap_page(void);
|
||||
extern swp_entry_t get_swap_page_of_type(int);
|
||||
extern int swap_duplicate(swp_entry_t);
|
||||
extern void swap_duplicate(swp_entry_t);
|
||||
extern int swapcache_prepare(swp_entry_t);
|
||||
extern int valid_swaphandles(swp_entry_t, unsigned long *);
|
||||
extern void swap_free(swp_entry_t);
|
||||
extern void swapcache_free(swp_entry_t, struct page *page);
|
||||
extern int free_swap_and_cache(swp_entry_t);
|
||||
extern int swap_type_of(dev_t, sector_t, struct block_device **);
|
||||
extern unsigned int count_swap_pages(int, int);
|
||||
@@ -370,12 +354,20 @@ static inline void show_swap_cache_info(void)
|
||||
}
|
||||
|
||||
#define free_swap_and_cache(swp) is_migration_entry(swp)
|
||||
#define swap_duplicate(swp) is_migration_entry(swp)
|
||||
#define swapcache_prepare(swp) is_migration_entry(swp)
|
||||
|
||||
static inline void swap_duplicate(swp_entry_t swp)
|
||||
{
|
||||
}
|
||||
|
||||
static inline void swap_free(swp_entry_t swp)
|
||||
{
|
||||
}
|
||||
|
||||
static inline void swapcache_free(swp_entry_t swp, struct page *page)
|
||||
{
|
||||
}
|
||||
|
||||
static inline struct page *swapin_readahead(swp_entry_t swp, gfp_t gfp_mask,
|
||||
struct vm_area_struct *vma, unsigned long addr)
|
||||
{
|
||||
|
||||
@@ -434,6 +434,7 @@ asmlinkage long sys_fcntl(unsigned int fd, unsigned int cmd, unsigned long arg);
|
||||
asmlinkage long sys_fcntl64(unsigned int fd,
|
||||
unsigned int cmd, unsigned long arg);
|
||||
#endif
|
||||
asmlinkage long sys_pipe(int __user *fildes);
|
||||
asmlinkage long sys_pipe2(int __user *fildes, int flags);
|
||||
asmlinkage long sys_dup(unsigned int fildes);
|
||||
asmlinkage long sys_dup2(unsigned int oldfd, unsigned int newfd);
|
||||
@@ -751,8 +752,6 @@ asmlinkage long sys_pselect6(int, fd_set __user *, fd_set __user *,
|
||||
asmlinkage long sys_ppoll(struct pollfd __user *, unsigned int,
|
||||
struct timespec __user *, const sigset_t __user *,
|
||||
size_t);
|
||||
asmlinkage long sys_pipe2(int __user *, int);
|
||||
asmlinkage long sys_pipe(int __user *);
|
||||
|
||||
int kernel_execve(const char *filename, char *const argv[], char *const envp[]);
|
||||
|
||||
|
||||
@@ -280,6 +280,9 @@ extern int do_adjtimex(struct timex *);
|
||||
|
||||
int read_current_timer(unsigned long *timer_val);
|
||||
|
||||
/* The clock frequency of the i8253/i8254 PIT */
|
||||
#define PIT_TICK_RATE 1193182ul
|
||||
|
||||
#endif /* KERNEL */
|
||||
|
||||
#endif /* LINUX_TIMEX_H */
|
||||
|
||||
@@ -22,12 +22,12 @@ struct old_utsname {
|
||||
};
|
||||
|
||||
struct new_utsname {
|
||||
char sysname[65];
|
||||
char nodename[65];
|
||||
char release[65];
|
||||
char version[65];
|
||||
char machine[65];
|
||||
char domainname[65];
|
||||
char sysname[__NEW_UTS_LEN + 1];
|
||||
char nodename[__NEW_UTS_LEN + 1];
|
||||
char release[__NEW_UTS_LEN + 1];
|
||||
char version[__NEW_UTS_LEN + 1];
|
||||
char machine[__NEW_UTS_LEN + 1];
|
||||
char domainname[__NEW_UTS_LEN + 1];
|
||||
};
|
||||
|
||||
#ifdef __KERNEL__
|
||||
|
||||
@@ -0,0 +1,161 @@
|
||||
/*
|
||||
* Copyright (C) 2006, 2007 Eugene Konev <ejka@openwrt.org>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
#ifndef __VLYNQ_H__
|
||||
#define __VLYNQ_H__
|
||||
|
||||
#include <linux/device.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/types.h>
|
||||
|
||||
#define VLYNQ_NUM_IRQS 32
|
||||
|
||||
struct vlynq_mapping {
|
||||
u32 size;
|
||||
u32 offset;
|
||||
};
|
||||
|
||||
enum vlynq_divisor {
|
||||
vlynq_div_auto = 0,
|
||||
vlynq_ldiv1,
|
||||
vlynq_ldiv2,
|
||||
vlynq_ldiv3,
|
||||
vlynq_ldiv4,
|
||||
vlynq_ldiv5,
|
||||
vlynq_ldiv6,
|
||||
vlynq_ldiv7,
|
||||
vlynq_ldiv8,
|
||||
vlynq_rdiv1,
|
||||
vlynq_rdiv2,
|
||||
vlynq_rdiv3,
|
||||
vlynq_rdiv4,
|
||||
vlynq_rdiv5,
|
||||
vlynq_rdiv6,
|
||||
vlynq_rdiv7,
|
||||
vlynq_rdiv8,
|
||||
vlynq_div_external
|
||||
};
|
||||
|
||||
struct vlynq_device_id {
|
||||
u32 id;
|
||||
enum vlynq_divisor divisor;
|
||||
unsigned long driver_data;
|
||||
};
|
||||
|
||||
struct vlynq_regs;
|
||||
struct vlynq_device {
|
||||
u32 id, dev_id;
|
||||
int local_irq;
|
||||
int remote_irq;
|
||||
enum vlynq_divisor divisor;
|
||||
u32 regs_start, regs_end;
|
||||
u32 mem_start, mem_end;
|
||||
u32 irq_start, irq_end;
|
||||
int irq;
|
||||
int enabled;
|
||||
struct vlynq_regs *local;
|
||||
struct vlynq_regs *remote;
|
||||
struct device dev;
|
||||
};
|
||||
|
||||
struct vlynq_driver {
|
||||
char *name;
|
||||
struct vlynq_device_id *id_table;
|
||||
int (*probe)(struct vlynq_device *dev, struct vlynq_device_id *id);
|
||||
void (*remove)(struct vlynq_device *dev);
|
||||
struct device_driver driver;
|
||||
};
|
||||
|
||||
struct plat_vlynq_ops {
|
||||
int (*on)(struct vlynq_device *dev);
|
||||
void (*off)(struct vlynq_device *dev);
|
||||
};
|
||||
|
||||
static inline struct vlynq_driver *to_vlynq_driver(struct device_driver *drv)
|
||||
{
|
||||
return container_of(drv, struct vlynq_driver, driver);
|
||||
}
|
||||
|
||||
static inline struct vlynq_device *to_vlynq_device(struct device *device)
|
||||
{
|
||||
return container_of(device, struct vlynq_device, dev);
|
||||
}
|
||||
|
||||
extern struct bus_type vlynq_bus_type;
|
||||
|
||||
extern int __vlynq_register_driver(struct vlynq_driver *driver,
|
||||
struct module *owner);
|
||||
|
||||
static inline int vlynq_register_driver(struct vlynq_driver *driver)
|
||||
{
|
||||
return __vlynq_register_driver(driver, THIS_MODULE);
|
||||
}
|
||||
|
||||
static inline void *vlynq_get_drvdata(struct vlynq_device *dev)
|
||||
{
|
||||
return dev_get_drvdata(&dev->dev);
|
||||
}
|
||||
|
||||
static inline void vlynq_set_drvdata(struct vlynq_device *dev, void *data)
|
||||
{
|
||||
dev_set_drvdata(&dev->dev, data);
|
||||
}
|
||||
|
||||
static inline u32 vlynq_mem_start(struct vlynq_device *dev)
|
||||
{
|
||||
return dev->mem_start;
|
||||
}
|
||||
|
||||
static inline u32 vlynq_mem_end(struct vlynq_device *dev)
|
||||
{
|
||||
return dev->mem_end;
|
||||
}
|
||||
|
||||
static inline u32 vlynq_mem_len(struct vlynq_device *dev)
|
||||
{
|
||||
return dev->mem_end - dev->mem_start + 1;
|
||||
}
|
||||
|
||||
static inline int vlynq_virq_to_irq(struct vlynq_device *dev, int virq)
|
||||
{
|
||||
int irq = dev->irq_start + virq;
|
||||
if ((irq < dev->irq_start) || (irq > dev->irq_end))
|
||||
return -EINVAL;
|
||||
|
||||
return irq;
|
||||
}
|
||||
|
||||
static inline int vlynq_irq_to_virq(struct vlynq_device *dev, int irq)
|
||||
{
|
||||
if ((irq < dev->irq_start) || (irq > dev->irq_end))
|
||||
return -EINVAL;
|
||||
|
||||
return irq - dev->irq_start;
|
||||
}
|
||||
|
||||
extern void vlynq_unregister_driver(struct vlynq_driver *driver);
|
||||
extern int vlynq_enable_device(struct vlynq_device *dev);
|
||||
extern void vlynq_disable_device(struct vlynq_device *dev);
|
||||
extern int vlynq_set_local_mapping(struct vlynq_device *dev, u32 tx_offset,
|
||||
struct vlynq_mapping *mapping);
|
||||
extern int vlynq_set_remote_mapping(struct vlynq_device *dev, u32 tx_offset,
|
||||
struct vlynq_mapping *mapping);
|
||||
extern int vlynq_set_local_irq(struct vlynq_device *dev, int virq);
|
||||
extern int vlynq_set_remote_irq(struct vlynq_device *dev, int virq);
|
||||
|
||||
#endif /* __VLYNQ_H__ */
|
||||
@@ -36,12 +36,14 @@ enum vm_event_item { PGPGIN, PGPGOUT, PSWPIN, PSWPOUT,
|
||||
FOR_ALL_ZONES(PGSTEAL),
|
||||
FOR_ALL_ZONES(PGSCAN_KSWAPD),
|
||||
FOR_ALL_ZONES(PGSCAN_DIRECT),
|
||||
#ifdef CONFIG_NUMA
|
||||
PGSCAN_ZONE_RECLAIM_FAILED,
|
||||
#endif
|
||||
PGINODESTEAL, SLABS_SCANNED, KSWAPD_STEAL, KSWAPD_INODESTEAL,
|
||||
PAGEOUTRUN, ALLOCSTALL, PGROTATED,
|
||||
#ifdef CONFIG_HUGETLB_PAGE
|
||||
HTLB_BUDDY_PGALLOC, HTLB_BUDDY_PGALLOC_FAIL,
|
||||
#endif
|
||||
#ifdef CONFIG_UNEVICTABLE_LRU
|
||||
UNEVICTABLE_PGCULLED, /* culled to noreclaim list */
|
||||
UNEVICTABLE_PGSCANNED, /* scanned for reclaimability */
|
||||
UNEVICTABLE_PGRESCUED, /* rescued from noreclaim list */
|
||||
@@ -50,7 +52,6 @@ enum vm_event_item { PGPGIN, PGPGOUT, PSWPIN, PSWPOUT,
|
||||
UNEVICTABLE_PGCLEARED, /* on COW, page truncate */
|
||||
UNEVICTABLE_PGSTRANDED, /* unable to isolate on unlock */
|
||||
UNEVICTABLE_MLOCKFREED,
|
||||
#endif
|
||||
NR_VM_EVENT_ITEMS
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user