diff options
| author | Linus Torvalds <torvalds@home.transmeta.com> | 2002-06-02 04:24:30 -0700 |
|---|---|---|
| committer | Linus Torvalds <torvalds@home.transmeta.com> | 2002-06-02 04:24:30 -0700 |
| commit | b2ea3f319615bd297c22017fef7d5f12bce11a15 (patch) | |
| tree | c2e46c645e079f240bbf087e7c9b686e1058e4fd /include | |
| parent | 4da4483e5655259b2f3184a2833a6330276ab14a (diff) | |
| parent | 6d693005e1d16e2205daae79539d4103ac35e590 (diff) | |
Merge http://linux-isdn.bkbits.net/linux-2.5.make
into home.transmeta.com:/home/torvalds/v2.5/linux
Diffstat (limited to 'include')
33 files changed, 249 insertions, 279 deletions
diff --git a/include/asm-alpha/pgtable.h b/include/asm-alpha/pgtable.h index 073f2c8b5cd0..a972181fd540 100644 --- a/include/asm-alpha/pgtable.h +++ b/include/asm-alpha/pgtable.h @@ -340,14 +340,11 @@ extern inline void update_mmu_cache(struct vm_area_struct * vma, extern inline pte_t mk_swap_pte(unsigned long type, unsigned long offset) { pte_t pte; pte_val(pte) = (type << 32) | (offset << 40); return pte; } -#define SWP_TYPE(x) (((x).val >> 32) & 0xff) -#define SWP_OFFSET(x) ((x).val >> 40) -#define SWP_ENTRY(type, offset) ((swp_entry_t) { pte_val(mk_swap_pte((type),(offset))) }) -#define pte_to_swp_entry(pte) ((swp_entry_t) { pte_val(pte) }) -#define swp_entry_to_pte(x) ((pte_t) { (x).val }) - -/* Needs to be defined here and not in linux/mm.h, as it is arch dependent */ -#define PageSkip(page) (0) +#define __swp_type(x) (((x).val >> 32) & 0xff) +#define __swp_offset(x) ((x).val >> 40) +#define __swp_entry(type, offset) ((swp_entry_t) { pte_val(mk_swap_pte((type),(offset))) }) +#define __pte_to_swp_entry(pte) ((swp_entry_t) { pte_val(pte) }) +#define __swp_entry_to_pte(x) ((pte_t) { (x).val }) #ifndef CONFIG_DISCONTIGMEM #define kern_addr_valid(addr) (1) diff --git a/include/asm-arm/pgtable.h b/include/asm-arm/pgtable.h index dbbb85bd3995..62456af5582a 100644 --- a/include/asm-arm/pgtable.h +++ b/include/asm-arm/pgtable.h @@ -142,11 +142,11 @@ extern pgd_t swapper_pg_dir[PTRS_PER_PGD]; * * We support up to 32GB of swap on 4k machines */ -#define SWP_TYPE(x) (((x).val >> 2) & 0x7f) -#define SWP_OFFSET(x) ((x).val >> 9) -#define SWP_ENTRY(type,offset) ((swp_entry_t) { ((type) << 2) | ((offset) << 9) }) -#define pte_to_swp_entry(pte) ((swp_entry_t) { pte_val(pte) }) -#define swp_entry_to_pte(swp) ((pte_t) { (swp).val }) +#define __swp_type(x) (((x).val >> 2) & 0x7f) +#define __swp_offset(x) ((x).val >> 9) +#define __swp_entry(type,offset) ((swp_entry_t) { ((type) << 2) | ((offset) << 9) }) +#define __pte_to_swp_entry(pte) ((swp_entry_t) { pte_val(pte) }) +#define __swp_entry_to_pte(swp) ((pte_t) { (swp).val }) /* Needs to be defined here and not in linux/mm.h, as it is arch dependent */ /* FIXME: this is not correct */ diff --git a/include/asm-cris/pgtable.h b/include/asm-cris/pgtable.h index 51eb17d87f9d..57e391330752 100644 --- a/include/asm-cris/pgtable.h +++ b/include/asm-cris/pgtable.h @@ -500,14 +500,12 @@ static inline void update_mmu_cache(struct vm_area_struct * vma, /* Encode and de-code a swap entry (must be !pte_none(e) && !pte_present(e)) */ /* Since the PAGE_PRESENT bit is bit 4, we can use the bits above */ -#define SWP_TYPE(x) (((x).val >> 5) & 0x7f) -#define SWP_OFFSET(x) ((x).val >> 12) -#define SWP_ENTRY(type, offset) ((swp_entry_t) { ((type) << 5) | ((offset) << 12) }) -#define pte_to_swp_entry(pte) ((swp_entry_t) { pte_val(pte) }) -#define swp_entry_to_pte(x) ((pte_t) { (x).val }) - -/* Needs to be defined here and not in linux/mm.h, as it is arch dependent */ -#define PageSkip(page) (0) +#define __swp_type(x) (((x).val >> 5) & 0x7f) +#define __swp_offset(x) ((x).val >> 12) +#define __swp_entry(type, offset) ((swp_entry_t) { ((type) << 5) | ((offset) << 12) }) +#define __pte_to_swp_entry(pte) ((swp_entry_t) { pte_val(pte) }) +#define __swp_entry_to_pte(x) ((pte_t) { (x).val }) + #define kern_addr_valid(addr) (1) #include <asm-generic/pgtable.h> diff --git a/include/asm-i386/pgtable.h b/include/asm-i386/pgtable.h index 8785225614da..f48db2beeeba 100644 --- a/include/asm-i386/pgtable.h +++ b/include/asm-i386/pgtable.h @@ -269,16 +269,14 @@ static inline pte_t pte_modify(pte_t pte, pgprot_t newprot) #define update_mmu_cache(vma,address,pte) do { } while (0) /* Encode and de-code a swap entry */ -#define SWP_TYPE(x) (((x).val >> 1) & 0x3f) -#define SWP_OFFSET(x) ((x).val >> 8) -#define SWP_ENTRY(type, offset) ((swp_entry_t) { ((type) << 1) | ((offset) << 8) }) -#define pte_to_swp_entry(pte) ((swp_entry_t) { (pte).pte_low }) -#define swp_entry_to_pte(x) ((pte_t) { (x).val }) +#define __swp_type(x) (((x).val >> 1) & 0x3f) +#define __swp_offset(x) ((x).val >> 8) +#define __swp_entry(type, offset) ((swp_entry_t) { ((type) << 1) | ((offset) << 8) }) +#define __pte_to_swp_entry(pte) ((swp_entry_t) { (pte).pte_low }) +#define __swp_entry_to_pte(x) ((pte_t) { (x).val }) #endif /* !__ASSEMBLY__ */ -/* Needs to be defined here and not in linux/mm.h, as it is arch dependent */ -#define PageSkip(page) (0) #define kern_addr_valid(addr) (1) #define io_remap_page_range remap_page_range diff --git a/include/asm-ia64/pgtable.h b/include/asm-ia64/pgtable.h index 4ff23d54e418..cc8c0a29b335 100644 --- a/include/asm-ia64/pgtable.h +++ b/include/asm-ia64/pgtable.h @@ -402,14 +402,11 @@ pte_same (pte_t a, pte_t b) extern pgd_t swapper_pg_dir[PTRS_PER_PGD]; extern void paging_init (void); -#define SWP_TYPE(entry) (((entry).val >> 1) & 0xff) -#define SWP_OFFSET(entry) (((entry).val << 1) >> 10) -#define SWP_ENTRY(type,offset) ((swp_entry_t) { ((type) << 1) | ((long) (offset) << 9) }) -#define pte_to_swp_entry(pte) ((swp_entry_t) { pte_val(pte) }) -#define swp_entry_to_pte(x) ((pte_t) { (x).val }) - -/* Needs to be defined here and not in linux/mm.h, as it is arch dependent */ -#define PageSkip(page) (0) +#define __swp_type(entry) (((entry).val >> 1) & 0xff) +#define __swp_offset(entry) (((entry).val << 1) >> 10) +#define __swp_entry(type,offset) ((swp_entry_t) { ((type) << 1) | ((long) (offset) << 9) }) +#define __pte_to_swp_entry(pte) ((swp_entry_t) { pte_val(pte) }) +#define __swp_entry_to_pte(x) ((pte_t) { (x).val }) #define io_remap_page_range remap_page_range /* XXX is this right? */ diff --git a/include/asm-m68k/pgtable.h b/include/asm-m68k/pgtable.h index 0d20bd4ed997..597f08991de3 100644 --- a/include/asm-m68k/pgtable.h +++ b/include/asm-m68k/pgtable.h @@ -145,27 +145,25 @@ extern inline void update_mmu_cache(struct vm_area_struct * vma, #ifdef CONFIG_SUN3 /* Macros to (de)construct the fake PTEs representing swap pages. */ -#define SWP_TYPE(x) ((x).val & 0x7F) -#define SWP_OFFSET(x) (((x).val) >> 7) -#define SWP_ENTRY(type,offset) ((swp_entry_t) { ((type) | ((offset) << 7)) }) -#define pte_to_swp_entry(pte) ((swp_entry_t) { pte_val(pte) }) -#define swp_entry_to_pte(x) ((pte_t) { (x).val }) +#define __swp_type(x) ((x).val & 0x7F) +#define __swp_offset(x) (((x).val) >> 7) +#define __swp_entry(type,offset) ((swp_entry_t) { ((type) | ((offset) << 7)) }) +#define __pte_to_swp_entry(pte) ((swp_entry_t) { pte_val(pte) }) +#define __swp_entry_to_pte(x) ((pte_t) { (x).val }) #else /* Encode and de-code a swap entry (must be !pte_none(e) && !pte_present(e)) */ -#define SWP_TYPE(x) (((x).val >> 1) & 0xff) -#define SWP_OFFSET(x) ((x).val >> 10) -#define SWP_ENTRY(type, offset) ((swp_entry_t) { ((type) << 1) | ((offset) << 10) }) -#define pte_to_swp_entry(pte) ((swp_entry_t) { pte_val(pte) }) -#define swp_entry_to_pte(x) ((pte_t) { (x).val }) +#define __swp_type(x) (((x).val >> 1) & 0xff) +#define __swp_offset(x) ((x).val >> 10) +#define __swp_entry(type, offset) ((swp_entry_t) { ((type) << 1) | ((offset) << 10) }) +#define __pte_to_swp_entry(pte) ((swp_entry_t) { pte_val(pte) }) +#define __swp_entry_to_pte(x) ((pte_t) { (x).val }) #endif /* CONFIG_SUN3 */ #endif /* !__ASSEMBLY__ */ -/* Needs to be defined here and not in linux/mm.h, as it is arch dependent */ -#define PageSkip(page) (0) #define kern_addr_valid(addr) (1) #define io_remap_page_range remap_page_range diff --git a/include/asm-mips/pgtable.h b/include/asm-mips/pgtable.h index b70d53edab46..bec6e22366e5 100644 --- a/include/asm-mips/pgtable.h +++ b/include/asm-mips/pgtable.h @@ -493,15 +493,12 @@ extern void paging_init(void); extern void update_mmu_cache(struct vm_area_struct *vma, unsigned long address, pte_t pte); -#define SWP_TYPE(x) (((x).val >> 1) & 0x3f) -#define SWP_OFFSET(x) ((x).val >> 8) -#define SWP_ENTRY(type,offset) ((swp_entry_t) { ((type) << 1) | ((offset) << 8) }) -#define pte_to_swp_entry(pte) ((swp_entry_t) { pte_val(pte) }) -#define swp_entry_to_pte(x) ((pte_t) { (x).val }) +#define __swp_type(x) (((x).val >> 1) & 0x3f) +#define __swp_offset(x) ((x).val >> 8) +#define __swp_entry(type,offset) ((swp_entry_t) { ((type) << 1) | ((offset) << 8) }) +#define __pte_to_swp_entry(pte) ((swp_entry_t) { pte_val(pte) }) +#define __swp_entry_to_pte(x) ((pte_t) { (x).val }) - -/* Needs to be defined here and not in linux/mm.h, as it is arch dependent */ -#define PageSkip(page) (0) #define kern_addr_valid(addr) (1) /* TLB operations. */ diff --git a/include/asm-mips64/pgtable.h b/include/asm-mips64/pgtable.h index d5f16df89c8a..d3118912a2a5 100644 --- a/include/asm-mips64/pgtable.h +++ b/include/asm-mips64/pgtable.h @@ -553,14 +553,12 @@ extern void (*update_mmu_cache)(struct vm_area_struct *vma, extern inline pte_t mk_swap_pte(unsigned long type, unsigned long offset) { pte_t pte; pte_val(pte) = (type << 32) | (offset << 40); return pte; } -#define SWP_TYPE(x) (((x).val >> 32) & 0xff) -#define SWP_OFFSET(x) ((x).val >> 40) -#define SWP_ENTRY(type,offset) ((swp_entry_t) { pte_val(mk_swap_pte((type),(offset))) }) -#define pte_to_swp_entry(pte) ((swp_entry_t) { pte_val(pte) }) -#define swp_entry_to_pte(x) ((pte_t) { (x).val }) - -/* Needs to be defined here and not in linux/mm.h, as it is arch dependent */ -#define PageSkip(page) (0) +#define __swp_type(x) (((x).val >> 32) & 0xff) +#define __swp_offset(x) ((x).val >> 40) +#define __swp_entry(type,offset) ((swp_entry_t) { pte_val(mk_swap_pte((type),(offset))) }) +#define __pte_to_swp_entry(pte) ((swp_entry_t) { pte_val(pte) }) +#define __swp_entry_to_pte(x) ((pte_t) { (x).val }) + #ifndef CONFIG_DISCONTIGMEM #define kern_addr_valid(addr) (1) #endif diff --git a/include/asm-parisc/pgtable.h b/include/asm-parisc/pgtable.h index df853449c900..c1d676cf92ea 100644 --- a/include/asm-parisc/pgtable.h +++ b/include/asm-parisc/pgtable.h @@ -312,14 +312,14 @@ extern inline void update_mmu_cache(struct vm_area_struct * vma, /* Encode and de-code a swap entry */ -#define SWP_TYPE(x) ((x).val & 0x3f) -#define SWP_OFFSET(x) ( (((x).val >> 6) & 0x7) | \ +#define __swp_type(x) ((x).val & 0x3f) +#define __swp_offset(x) ( (((x).val >> 6) & 0x7) | \ (((x).val >> 7) & ~0x7) ) -#define SWP_ENTRY(type, offset) ((swp_entry_t) { (type) | \ +#define __swp_entry(type, offset) ((swp_entry_t) { (type) | \ ((offset & 0x7) << 6) | \ ((offset & ~0x7) << 7) }) -#define pte_to_swp_entry(pte) ((swp_entry_t) { pte_val(pte) }) -#define swp_entry_to_pte(x) ((pte_t) { (x).val }) +#define __pte_to_swp_entry(pte) ((swp_entry_t) { pte_val(pte) }) +#define __swp_entry_to_pte(x) ((pte_t) { (x).val }) #define module_map vmalloc #define module_unmap vfree @@ -328,9 +328,6 @@ extern inline void update_mmu_cache(struct vm_area_struct * vma, #endif /* !__ASSEMBLY__ */ -/* Needs to be defined here and not in linux/mm.h, as it is arch dependent */ -#define PageSkip(page) (0) - #define io_remap_page_range remap_page_range /* diff --git a/include/asm-ppc/pgtable.h b/include/asm-ppc/pgtable.h index a0514543259c..c5bfc1332e5f 100644 --- a/include/asm-ppc/pgtable.h +++ b/include/asm-ppc/pgtable.h @@ -482,11 +482,11 @@ extern void add_hash_page(unsigned context, unsigned long va, * must not include the _PAGE_PRESENT bit, or the _PAGE_HASHPTE bit * (if used). -- paulus */ -#define SWP_TYPE(entry) ((entry).val & 0x3f) -#define SWP_OFFSET(entry) ((entry).val >> 6) -#define SWP_ENTRY(type, offset) ((swp_entry_t) { (type) | ((offset) << 6) }) -#define pte_to_swp_entry(pte) ((swp_entry_t) { pte_val(pte) >> 2 }) -#define swp_entry_to_pte(x) ((pte_t) { (x).val << 2 }) +#define __swp_type(entry) ((entry).val & 0x3f) +#define __swp_offset(entry) ((entry).val >> 6) +#define __swp_entry(type, offset) ((swp_entry_t) { (type) | ((offset) << 6) }) +#define __pte_to_swp_entry(pte) ((swp_entry_t) { pte_val(pte) >> 2 }) +#define __swp_entry_to_pte(x) ((pte_t) { (x).val << 2 }) /* CONFIG_APUS */ /* For virtual address to physical address conversion */ diff --git a/include/asm-ppc64/pgtable.h b/include/asm-ppc64/pgtable.h index 48d9f43a3e49..e546e3f0f88c 100644 --- a/include/asm-ppc64/pgtable.h +++ b/include/asm-ppc64/pgtable.h @@ -359,11 +359,11 @@ extern void paging_init(void); extern void update_mmu_cache(struct vm_area_struct *, unsigned long, pte_t); /* Encode and de-code a swap entry */ -#define SWP_TYPE(entry) (((entry).val >> 1) & 0x3f) -#define SWP_OFFSET(entry) ((entry).val >> 8) -#define SWP_ENTRY(type, offset) ((swp_entry_t) { ((type) << 1) | ((offset) << 8) }) -#define pte_to_swp_entry(pte) ((swp_entry_t) { pte_val(pte) >> PTE_SHIFT }) -#define swp_entry_to_pte(x) ((pte_t) { (x).val << PTE_SHIFT }) +#define __swp_type(entry) (((entry).val >> 1) & 0x3f) +#define __swp_offset(entry) ((entry).val >> 8) +#define __swp_entry(type, offset) ((swp_entry_t) { ((type) << 1) | ((offset) << 8) }) +#define __pte_to_swp_entry(pte) ((swp_entry_t) { pte_val(pte) >> PTE_SHIFT }) +#define __swp_entry_to_pte(x) ((pte_t) { (x).val << PTE_SHIFT }) /* * kern_addr_valid is intended to indicate whether an address is a valid diff --git a/include/asm-s390/pgtable.h b/include/asm-s390/pgtable.h index 026e0ee40a23..fa9993ad8e9d 100644 --- a/include/asm-s390/pgtable.h +++ b/include/asm-s390/pgtable.h @@ -485,17 +485,15 @@ extern inline pte_t mk_swap_pte(unsigned long type, unsigned long offset) return pte; } -#define SWP_TYPE(entry) (((entry).val >> 1) & 0x3f) -#define SWP_OFFSET(entry) (((entry).val >> 12) & 0x7FFFF ) -#define SWP_ENTRY(type,offset) ((swp_entry_t) { pte_val(mk_swap_pte((type),(offset))) }) +#define __swp_type(entry) (((entry).val >> 1) & 0x3f) +#define __swp_offset(entry) (((entry).val >> 12) & 0x7FFFF ) +#define __swp_entry(type,offset) ((swp_entry_t) { pte_val(mk_swap_pte((type),(offset))) }) -#define pte_to_swp_entry(pte) ((swp_entry_t) { pte_val(pte) }) -#define swp_entry_to_pte(x) ((pte_t) { (x).val }) +#define __pte_to_swp_entry(pte) ((swp_entry_t) { pte_val(pte) }) +#define __swp_entry_to_pte(x) ((pte_t) { (x).val }) #endif /* !__ASSEMBLY__ */ -/* Needs to be defined here and not in linux/mm.h, as it is arch dependent */ -#define PageSkip(page) (0) #define kern_addr_valid(addr) (1) /* diff --git a/include/asm-s390x/pgtable.h b/include/asm-s390x/pgtable.h index 4fee035ea2dc..a2729aa46c35 100644 --- a/include/asm-s390x/pgtable.h +++ b/include/asm-s390x/pgtable.h @@ -505,17 +505,15 @@ extern inline pte_t mk_swap_pte(unsigned long type, unsigned long offset) return pte; } -#define SWP_TYPE(entry) (((entry).val >> 1) & 0x3f) -#define SWP_OFFSET(entry) ((entry).val >> 12) -#define SWP_ENTRY(type,offset) ((swp_entry_t) { pte_val(mk_swap_pte((type),(offset))) }) +#define __swp_type(entry) (((entry).val >> 1) & 0x3f) +#define __swp_offset(entry) ((entry).val >> 12) +#define __swp_entry(type,offset) ((swp_entry_t) { pte_val(mk_swap_pte((type),(offset))) }) -#define pte_to_swp_entry(pte) ((swp_entry_t) { pte_val(pte) }) -#define swp_entry_to_pte(x) ((pte_t) { (x).val }) +#define __pte_to_swp_entry(pte) ((swp_entry_t) { pte_val(pte) }) +#define __swp_entry_to_pte(x) ((pte_t) { (x).val }) #endif /* !__ASSEMBLY__ */ -/* Needs to be defined here and not in linux/mm.h, as it is arch dependent */ -#define PageSkip(page) (0) #define kern_addr_valid(addr) (1) /* diff --git a/include/asm-sh/pgtable.h b/include/asm-sh/pgtable.h index a7e2b8dfecaf..74034ac9c862 100644 --- a/include/asm-sh/pgtable.h +++ b/include/asm-sh/pgtable.h @@ -294,11 +294,11 @@ extern void update_mmu_cache(struct vm_area_struct * vma, * NOTE: We should set ZEROs at the position of _PAGE_PRESENT * and _PAGE_PROTONOE bits */ -#define SWP_TYPE(x) ((x).val & 0xff) -#define SWP_OFFSET(x) ((x).val >> 10) -#define SWP_ENTRY(type, offset) ((swp_entry_t) { (type) | ((offset) << 10) }) -#define pte_to_swp_entry(pte) ((swp_entry_t) { pte_val(pte) }) -#define swp_entry_to_pte(x) ((pte_t) { (x).val }) +#define __swp_type(x) ((x).val & 0xff) +#define __swp_offset(x) ((x).val >> 10) +#define __swp_entry(type, offset) ((swp_entry_t) { (type) | ((offset) << 10) }) +#define __pte_to_swp_entry(pte) ((swp_entry_t) { pte_val(pte) }) +#define __swp_entry_to_pte(x) ((pte_t) { (x).val }) /* * Routines for update of PTE @@ -312,8 +312,6 @@ extern void update_mmu_cache(struct vm_area_struct * vma, #endif /* !__ASSEMBLY__ */ -/* Needs to be defined here and not in linux/mm.h, as it is arch dependent */ -#define PageSkip(page) (0) #define kern_addr_valid(addr) (1) #define io_remap_page_range remap_page_range diff --git a/include/asm-sparc/pgtable.h b/include/asm-sparc/pgtable.h index b73aaa20847e..775e8483859a 100644 --- a/include/asm-sparc/pgtable.h +++ b/include/asm-sparc/pgtable.h @@ -376,11 +376,11 @@ BTFIXUPDEF_CALL(void, update_mmu_cache, struct vm_area_struct *, unsigned long, extern int invalid_segment; /* Encode and de-code a swap entry */ -#define SWP_TYPE(x) (((x).val >> 2) & 0x7f) -#define SWP_OFFSET(x) (((x).val >> 9) & 0x3ffff) -#define SWP_ENTRY(type,offset) ((swp_entry_t) { (((type) & 0x7f) << 2) | (((offset) & 0x3ffff) << 9) }) -#define pte_to_swp_entry(pte) ((swp_entry_t) { pte_val(pte) }) -#define swp_entry_to_pte(x) ((pte_t) { (x).val }) +#define __swp_type(x) (((x).val >> 2) & 0x7f) +#define __swp_offset(x) (((x).val >> 9) & 0x3ffff) +#define __swp_entry(type,offset) ((swp_entry_t) { (((type) & 0x7f) << 2) | (((offset) & 0x3ffff) << 9) }) +#define __pte_to_swp_entry(pte) ((swp_entry_t) { pte_val(pte) }) +#define __swp_entry_to_pte(x) ((pte_t) { (x).val }) struct ctx_list { struct ctx_list *next; diff --git a/include/asm-sparc64/pgtable.h b/include/asm-sparc64/pgtable.h index 73d5951edfb9..e5c086958155 100644 --- a/include/asm-sparc64/pgtable.h +++ b/include/asm-sparc64/pgtable.h @@ -298,16 +298,16 @@ extern inline pte_t mk_pte_io(unsigned long page, pgprot_t prot, int space) } /* Encode and de-code a swap entry */ -#define SWP_TYPE(entry) (((entry).val >> PAGE_SHIFT) & 0xffUL) -#define SWP_OFFSET(entry) ((entry).val >> (PAGE_SHIFT + 8UL)) -#define SWP_ENTRY(type, offset) \ +#define __swp_type(entry) (((entry).val >> PAGE_SHIFT) & 0xffUL) +#define __swp_offset(entry) ((entry).val >> (PAGE_SHIFT + 8UL)) +#define __swp_entry(type, offset) \ ( (swp_entry_t) \ { \ (((long)(type) << PAGE_SHIFT) | \ ((long)(offset) << (PAGE_SHIFT + 8UL))) \ } ) -#define pte_to_swp_entry(pte) ((swp_entry_t) { pte_val(pte) }) -#define swp_entry_to_pte(x) ((pte_t) { (x).val }) +#define __pte_to_swp_entry(pte) ((swp_entry_t) { pte_val(pte) }) +#define __swp_entry_to_pte(x) ((pte_t) { (x).val }) extern unsigned long prom_virt_to_phys(unsigned long, int *); diff --git a/include/asm-x86_64/pgtable.h b/include/asm-x86_64/pgtable.h index 6a79a3d416d1..09d3254fa9a7 100644 --- a/include/asm-x86_64/pgtable.h +++ b/include/asm-x86_64/pgtable.h @@ -329,16 +329,14 @@ extern inline pte_t pte_modify(pte_t pte, pgprot_t newprot) #define update_mmu_cache(vma,address,pte) do { } while (0) /* Encode and de-code a swap entry */ -#define SWP_TYPE(x) (((x).val >> 1) & 0x3f) -#define SWP_OFFSET(x) ((x).val >> 8) -#define SWP_ENTRY(type, offset) ((swp_entry_t) { ((type) << 1) | ((offset) << 8) }) -#define pte_to_swp_entry(pte) ((swp_entry_t) { pte_val(pte) }) -#define swp_entry_to_pte(x) ((pte_t) { (x).val }) +#define __swp_type(x) (((x).val >> 1) & 0x3f) +#define __swp_offset(x) ((x).val >> 8) +#define __swp_entry(type, offset) ((swp_entry_t) { ((type) << 1) | ((offset) << 8) }) +#define __pte_to_swp_entry(pte) ((swp_entry_t) { pte_val(pte) }) +#define __swp_entry_to_pte(x) ((pte_t) { (x).val }) #endif /* !__ASSEMBLY__ */ -/* Needs to be defined here and not in linux/mm.h, as it is arch dependent */ -#define PageSkip(page) (0) #define kern_addr_valid(addr) (1) #define io_remap_page_range remap_page_range diff --git a/include/linux/blk.h b/include/linux/blk.h index 8126a0cc27fd..de2f1acc9071 100644 --- a/include/linux/blk.h +++ b/include/linux/blk.h @@ -125,7 +125,6 @@ extern inline struct request *elv_next_request(request_queue_t *q) static void floppy_off(unsigned int nr); #define DEVICE_NAME "floppy" -#define DEVICE_INTR do_floppy #define DEVICE_NR(device) ( (minor(device) & 3) | ((minor(device) & 0x80 ) >> 5 )) #elif (MAJOR_NR == HD_MAJOR) @@ -149,14 +148,14 @@ static void floppy_off(unsigned int nr); #elif (MAJOR_NR == SCSI_TAPE_MAJOR) #define DEVICE_NAME "scsitape" -#define DEVICE_INTR do_st +#define DEVICE_INTR do_st #define DEVICE_NR(device) (minor(device) & 0x7f) #elif (MAJOR_NR == OSST_MAJOR) -#define DEVICE_NAME "onstream" +#define DEVICE_NAME "onstream" #define DEVICE_INTR do_osst -#define DEVICE_NR(device) (minor(device) & 0x7f) +#define DEVICE_NR(device) (minor(device) & 0x7f) #elif (MAJOR_NR == SCSI_CDROM_MAJOR) @@ -187,33 +186,16 @@ static void floppy_off(unsigned int nr); #elif (MAJOR_NR == MITSUMI_CDROM_MAJOR) #define DEVICE_NAME "Mitsumi CD-ROM" -/* #define DEVICE_INTR do_mcd */ #define DEVICE_NR(device) (minor(device)) #elif (MAJOR_NR == MITSUMI_X_CDROM_MAJOR) #define DEVICE_NAME "Mitsumi CD-ROM" -/* #define DEVICE_INTR do_mcdx */ #define DEVICE_NR(device) (minor(device)) #elif (MAJOR_NR == MATSUSHITA_CDROM_MAJOR) -#define DEVICE_NAME "Matsushita CD-ROM controller #1" -#define DEVICE_NR(device) (minor(device)) - -#elif (MAJOR_NR == MATSUSHITA_CDROM2_MAJOR) - -#define DEVICE_NAME "Matsushita CD-ROM controller #2" -#define DEVICE_NR(device) (minor(device)) - -#elif (MAJOR_NR == MATSUSHITA_CDROM3_MAJOR) - -#define DEVICE_NAME "Matsushita CD-ROM controller #3" -#define DEVICE_NR(device) (minor(device)) - -#elif (MAJOR_NR == MATSUSHITA_CDROM4_MAJOR) - -#define DEVICE_NAME "Matsushita CD-ROM controller #4" +#define DEVICE_NAME "Matsushita CD-ROM controller" #define DEVICE_NR(device) (minor(device)) #elif (MAJOR_NR == AZTECH_CDROM_MAJOR) @@ -292,27 +274,23 @@ static void floppy_off(unsigned int nr); #if (MAJOR_NR != SCSI_TAPE_MAJOR) && (MAJOR_NR != OSST_MAJOR) #if !defined(IDE_DRIVER) -#ifndef CURRENT -# define CURRENT elv_next_request(&blk_dev[MAJOR_NR].request_queue) -#endif #ifndef QUEUE # define QUEUE (&blk_dev[MAJOR_NR].request_queue) #endif +#ifndef CURRENT +# define CURRENT elv_next_request(QUEUE) +#endif #ifndef DEVICE_NAME # define DEVICE_NAME "unknown" #endif #ifdef DEVICE_INTR static void (*DEVICE_INTR)(void) = NULL; -#endif - -#define SET_INTR(x) (DEVICE_INTR = (x)) - -# ifdef DEVICE_INTR -# define CLEAR_INTR SET_INTR(NULL) +# define CLEAR_INTR DEVICE_INTR = NULL # else # define CLEAR_INTR # endif + #endif /* !defined(IDE_DRIVER) */ /* diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h index 407b176d7dad..a3e1c02d6d63 100644 --- a/include/linux/blkdev.h +++ b/include/linux/blkdev.h @@ -81,7 +81,6 @@ enum rq_flag_bits { /* * for ATA/ATAPI devices */ - __REQ_DRIVE_CMD, __REQ_DRIVE_ACB, __REQ_PC, /* packet command (special) */ @@ -101,7 +100,6 @@ enum rq_flag_bits { #define REQ_STARTED (1 << __REQ_STARTED) #define REQ_DONTPREP (1 << __REQ_DONTPREP) #define REQ_QUEUED (1 << __REQ_QUEUED) -#define REQ_DRIVE_CMD (1 << __REQ_DRIVE_CMD) #define REQ_DRIVE_ACB (1 << __REQ_DRIVE_ACB) #define REQ_PC (1 << __REQ_PC) #define REQ_BLOCK_PC (1 << __REQ_BLOCK_PC) diff --git a/include/linux/buffer_head.h b/include/linux/buffer_head.h index 9bcb2b34df84..90767fc78617 100644 --- a/include/linux/buffer_head.h +++ b/include/linux/buffer_head.h @@ -191,8 +191,7 @@ void FASTCALL(unlock_buffer(struct buffer_head *bh)); * address_spaces. */ int try_to_release_page(struct page * page, int gfp_mask); -int block_flushpage(struct page *page, unsigned long offset); -int block_symlink(struct inode *, const char *, int); +int block_invalidatepage(struct page *page, unsigned long offset); int block_write_full_page(struct page*, get_block_t*); int block_read_full_page(struct page*, get_block_t*); int block_prepare_write(struct page*, unsigned, unsigned, get_block_t*); diff --git a/include/linux/ext3_fs.h b/include/linux/ext3_fs.h index f8630de86518..5847e06c1020 100644 --- a/include/linux/ext3_fs.h +++ b/include/linux/ext3_fs.h @@ -695,6 +695,7 @@ extern struct file_operations ext3_file_operations; /* inode.c */ extern struct address_space_operations ext3_aops; +extern struct address_space_operations ext3_writeback_aops; /* namei.c */ extern struct inode_operations ext3_dir_inode_operations; diff --git a/include/linux/ext3_jbd.h b/include/linux/ext3_jbd.h index ece9ec115665..05645eb7afca 100644 --- a/include/linux/ext3_jbd.h +++ b/include/linux/ext3_jbd.h @@ -299,5 +299,10 @@ static inline int ext3_should_order_data(struct inode *inode) return (test_opt(inode->i_sb, DATA_FLAGS) == EXT3_MOUNT_ORDERED_DATA); } +static inline int ext3_should_writeback_data(struct inode *inode) +{ + return !ext3_should_journal_data(inode) && + !ext3_should_order_data(inode); +} #endif /* _LINUX_EXT3_JBD_H */ diff --git a/include/linux/fs.h b/include/linux/fs.h index 31a691491a9f..839dfbd712e2 100644 --- a/include/linux/fs.h +++ b/include/linux/fs.h @@ -306,7 +306,7 @@ struct address_space_operations { int (*commit_write)(struct file *, struct page *, unsigned, unsigned); /* Unfortunately this kludge is needed for FIBMAP. Don't use it */ int (*bmap)(struct address_space *, long); - int (*flushpage) (struct page *, unsigned long); + int (*invalidatepage) (struct page *, unsigned long); int (*releasepage) (struct page *, int); #define KERNEL_HAS_O_DIRECT /* this is for modules out of the kernel */ int (*direct_IO)(int, struct inode *, struct kiobuf *, unsigned long, int); @@ -383,7 +383,6 @@ struct inode { struct inode_operations *i_op; struct file_operations *i_fop; /* former ->i_op->default_file_ops */ struct super_block *i_sb; - wait_queue_head_t i_wait; struct file_lock *i_flock; struct address_space *i_mapping; struct address_space i_data; @@ -1245,6 +1244,7 @@ extern int vfs_readlink(struct dentry *, char *, int, const char *); extern int vfs_follow_link(struct nameidata *, const char *); extern int page_readlink(struct dentry *, char *, int); extern int page_follow_link(struct dentry *, struct nameidata *); +extern int page_symlink(struct inode *inode, const char *symname, int len); extern struct inode_operations page_symlink_inode_operations; extern void generic_fillattr(struct inode *, struct kstat *); diff --git a/include/linux/hdreg.h b/include/linux/hdreg.h index 598827f0ee06..6f1fd4aae99a 100644 --- a/include/linux/hdreg.h +++ b/include/linux/hdreg.h @@ -74,25 +74,12 @@ #define IDE_DRIVE_TASK_RAW_WRITE 4 struct hd_drive_task_hdr { - u8 data; u8 feature; u8 sector_count; u8 sector_number; u8 low_cylinder; u8 high_cylinder; u8 device_head; - u8 command; -} __attribute__((packed)); - -struct hd_drive_hob_hdr { - u8 data; - u8 feature; - u8 sector_count; - u8 sector_number; - u8 low_cylinder; - u8 high_cylinder; - u8 device_head; - u8 control; } __attribute__((packed)); /* diff --git a/include/linux/ide.h b/include/linux/ide.h index f9b112fa19b2..24f5ce47a19d 100644 --- a/include/linux/ide.h +++ b/include/linux/ide.h @@ -38,11 +38,6 @@ # define SUPPORT_SLOW_DATA_PORTS 1 /* 0 to reduce kernel size */ #endif -/* Right now this is only needed by a promise controlled. - */ -#ifndef OK_TO_RESET_CONTROLLER /* 1 needed for good error recovery */ -# define OK_TO_RESET_CONTROLLER 0 /* 0 for use with AH2372A/B interface */ -#endif #ifndef FANCY_STATUS_DUMPS /* 1 for human-readable drive errors */ # define FANCY_STATUS_DUMPS 1 /* 0 to reduce kernel size */ #endif @@ -73,21 +68,22 @@ typedef unsigned char byte; /* used everywhere */ */ enum { - IDE_DATA_OFFSET = 0, - IDE_ERROR_OFFSET = 1, - IDE_NSECTOR_OFFSET = 2, - IDE_SECTOR_OFFSET = 3, - IDE_LCYL_OFFSET = 4, - IDE_HCYL_OFFSET = 5, - IDE_SELECT_OFFSET = 6, - IDE_STATUS_OFFSET = 7, - IDE_CONTROL_OFFSET = 8, - IDE_IRQ_OFFSET = 9, - IDE_NR_PORTS = 10 + IDE_DATA_OFFSET = 0, + IDE_ERROR_OFFSET = 1, + IDE_FEATURE_OFFSET = 1, + IDE_NSECTOR_OFFSET = 2, + IDE_SECTOR_OFFSET = 3, + IDE_LCYL_OFFSET = 4, + IDE_HCYL_OFFSET = 5, + IDE_SELECT_OFFSET = 6, + IDE_STATUS_OFFSET = 7, + IDE_COMMAND_OFFSET = 7, + IDE_CONTROL_OFFSET = 8, + IDE_ALTSTATUS_OFFSET = 8, + IDE_IRQ_OFFSET = 9, + IDE_NR_PORTS = 10 }; -#define IDE_FEATURE_OFFSET IDE_ERROR_OFFSET -#define IDE_COMMAND_OFFSET IDE_STATUS_OFFSET #define IDE_DATA_REG (drive->channel->io_ports[IDE_DATA_OFFSET]) #define IDE_ERROR_REG (drive->channel->io_ports[IDE_ERROR_OFFSET]) @@ -96,20 +92,16 @@ enum { #define IDE_LCYL_REG (drive->channel->io_ports[IDE_LCYL_OFFSET]) #define IDE_HCYL_REG (drive->channel->io_ports[IDE_HCYL_OFFSET]) #define IDE_SELECT_REG (drive->channel->io_ports[IDE_SELECT_OFFSET]) -#define IDE_STATUS_REG (drive->channel->io_ports[IDE_STATUS_OFFSET]) -#define IDE_CONTROL_REG (drive->channel->io_ports[IDE_CONTROL_OFFSET]) +#define IDE_COMMAND_REG (drive->channel->io_ports[IDE_STATUS_OFFSET]) #define IDE_IRQ_REG (drive->channel->io_ports[IDE_IRQ_OFFSET]) #define IDE_FEATURE_REG IDE_ERROR_REG -#define IDE_COMMAND_REG IDE_STATUS_REG -#define IDE_ALTSTATUS_REG IDE_CONTROL_REG #define IDE_IREASON_REG IDE_NSECTOR_REG #define IDE_BCOUNTL_REG IDE_LCYL_REG #define IDE_BCOUNTH_REG IDE_HCYL_REG #define GET_ERR() IN_BYTE(IDE_ERROR_REG) -#define GET_STAT() IN_BYTE(IDE_STATUS_REG) -#define GET_ALTSTAT() IN_BYTE(IDE_CONTROL_REG) +#define GET_ALTSTAT() IN_BYTE(drive->channel->io_ports[IDE_CONTROL_OFFSET]) #define GET_FEAT() IN_BYTE(IDE_NSECTOR_REG) #define BAD_R_STAT (BUSY_STAT | ERR_STAT) @@ -278,29 +270,6 @@ typedef union { } b; } select_t; -typedef union { - unsigned all : 8; /* all of the bits together */ - struct { -#if defined(__LITTLE_ENDIAN_BITFIELD) - unsigned bit0 : 1; - unsigned nIEN : 1; /* device INTRQ to host */ - unsigned SRST : 1; /* host soft reset bit */ - unsigned bit3 : 1; /* ATA-2 thingy */ - unsigned reserved456 : 3; - unsigned HOB : 1; /* 48-bit address ordering */ -#elif defined(__BIG_ENDIAN_BITFIELD) - unsigned HOB : 1; - unsigned reserved456 : 3; - unsigned bit3 : 1; - unsigned SRST : 1; - unsigned nIEN : 1; - unsigned bit0 : 1; -#else -#error "Please fix <asm/byteorder.h>" -#endif - } b; -} control_t; - /* * ATA/ATAPI device structure : */ @@ -346,8 +315,6 @@ struct ata_device { byte scsi; /* 0=default, 1=skip current ide-subdriver for ide-scsi emulation */ select_t select; /* basic drive/head select reg value */ - - u8 ctl; /* "normal" value for IDE_CONTROL_REG */ u8 status; /* last retrived status value for device */ byte ready_stat; /* min status value for drive ready */ @@ -458,7 +425,7 @@ struct ata_channel { * mode itself. */ - /* setup disk on a channel for a particular transfer mode */ + /* setup disk on a channel for a particular PIO transfer mode */ void (*tuneproc) (struct ata_device *, byte pio); /* setup the chipset timing for a particular transfer mode */ @@ -488,18 +455,13 @@ struct ata_channel { void (*atapi_read)(struct ata_device *, void *, unsigned int); void (*atapi_write)(struct ata_device *, void *, unsigned int); - int (*XXX_udma)(struct ata_device *); + int (*udma_setup)(struct ata_device *); void (*udma_enable)(struct ata_device *, int, int); - int (*udma_start) (struct ata_device *, struct request *rq); int (*udma_stop) (struct ata_device *); - - int (*udma_read) (struct ata_device *, struct request *rq); - int (*udma_write) (struct ata_device *, struct request *rq); - + int (*udma_init) (struct ata_device *, struct request *rq); int (*udma_irq_status) (struct ata_device *); - void (*udma_timeout) (struct ata_device *); void (*udma_irq_lost) (struct ata_device *); @@ -540,7 +502,7 @@ struct ata_channel { * Register new hardware with ide */ extern int ide_register_hw(hw_regs_t *hw); -extern void ide_unregister(struct ata_channel *hwif); +extern void ide_unregister(struct ata_channel *); struct ata_taskfile; @@ -653,25 +615,10 @@ extern void ide_set_handler(struct ata_device *drive, ata_handler_t handler, */ extern u8 ide_dump_status(struct ata_device *, struct request *rq, const char *, u8); -extern ide_startstop_t ide_error(struct ata_device *, struct request *rq, - const char *, byte); +extern ide_startstop_t ata_error(struct ata_device *, struct request *rq, const char *); -/* - * ide_fixstring() cleans up and (optionally) byte-swaps a text string, - * removing leading/trailing blanks and compressing internal blanks. - * It is primarily used to tidy up the model name/number fields as - * returned by the WIN_[P]IDENTIFY commands. - */ -void ide_fixstring(byte *s, const int bytecount, const int byteswap); +extern void ide_fixstring(char *s, const int bytecount, const int byteswap); -/* - * This routine busy-waits for the drive status to be not "busy". - * It then checks the status for all of the "good" bits and none - * of the "bad" bits, and if all is okay it returns 0. All other - * cases return 1 after doing "*startstop = ide_error()", and the - * caller should return the updated value of "startstop" in this case. - * "startstop" is unchanged when the function returns 0; - */ extern int ide_wait_stat(ide_startstop_t *, struct ata_device *, struct request *rq, byte, byte, unsigned long); @@ -696,11 +643,6 @@ struct ata_device *get_info_ptr(kdev_t i_rdev); ide_startstop_t restart_request(struct ata_device *); /* - * This function is intended to be used prior to invoking ide_do_drive_cmd(). - */ -extern void ide_init_drive_cmd(struct request *rq); - -/* * "action" parameter type for ide_do_drive_cmd() below. */ typedef enum { @@ -719,11 +661,12 @@ extern int ide_do_drive_cmd(struct ata_device *, struct request *, ide_action_t) /* * Clean up after success/failure of an explicit drive cmd. */ -extern void ide_end_drive_cmd(struct ata_device *, struct request *, u8); +extern void ide_end_drive_cmd(struct ata_device *, struct request *); struct ata_taskfile { struct hd_drive_task_hdr taskfile; - struct hd_drive_hob_hdr hobfile; + struct hd_drive_task_hdr hobfile; + u8 cmd; /* actual ATA command */ int command_type; ide_startstop_t (*prehandler)(struct ata_device *, struct request *); ide_startstop_t (*handler)(struct ata_device *, struct request *); @@ -742,21 +685,18 @@ extern ide_startstop_t ata_taskfile(struct ata_device *, extern ide_startstop_t recal_intr(struct ata_device *, struct request *); extern ide_startstop_t task_no_data_intr(struct ata_device *, struct request *); - -/* This is setting up all fields in args, which depend upon the command type. - */ extern void ide_cmd_type_parser(struct ata_taskfile *args); extern int ide_raw_taskfile(struct ata_device *, struct ata_taskfile *); -extern int ide_cmd_ioctl(struct ata_device *drive, unsigned long arg); extern void ide_fix_driveid(struct hd_driveid *id); extern int ide_config_drive_speed(struct ata_device *, byte); extern byte eighty_ninty_three(struct ata_device *); -extern int system_bus_speed; extern void ide_stall_queue(struct ata_device *, unsigned long); +extern int system_bus_speed; + /* * CompactFlash cards and their brethern pretend to be removable hard disks, * but they never have a slave unit, and they don't have doorlock mechanisms. @@ -825,14 +765,12 @@ static inline int udma_stop(struct ata_device *drive) return drive->channel->udma_stop(drive); } -static inline int udma_read(struct ata_device *drive, struct request *rq) -{ - return drive->channel->udma_read(drive, rq); -} - -static inline int udma_write(struct ata_device *drive, struct request *rq) +/* + * Initiate actual DMA data transfer. The direction is encoded in the request. + */ +static inline int udma_init(struct ata_device *drive, struct request *rq) { - return drive->channel->udma_write(drive, rq); + return drive->channel->udma_init(drive, rq); } static inline int udma_irq_status(struct ata_device *drive) @@ -852,14 +790,14 @@ static inline void udma_irq_lost(struct ata_device *drive) #ifdef CONFIG_BLK_DEV_IDEDMA -void udma_pci_enable(struct ata_device *drive, int on, int verbose); -int udma_pci_start(struct ata_device *drive, struct request *rq); -int udma_pci_stop(struct ata_device *drive); -int udma_pci_read(struct ata_device *drive, struct request *rq); -int udma_pci_write(struct ata_device *drive, struct request *rq); -int udma_pci_irq_status(struct ata_device *drive); -void udma_pci_timeout(struct ata_device *drive); -void udma_pci_irq_lost(struct ata_device *); +extern void udma_pci_enable(struct ata_device *drive, int on, int verbose); +extern int udma_pci_start(struct ata_device *drive, struct request *rq); +extern int udma_pci_stop(struct ata_device *drive); +extern int udma_pci_init(struct ata_device *drive, struct request *rq); +extern int udma_pci_irq_status(struct ata_device *drive); +extern void udma_pci_timeout(struct ata_device *drive); +extern void udma_pci_irq_lost(struct ata_device *); +extern int udma_pci_setup(struct ata_device *); extern int udma_new_table(struct ata_channel *, struct request *); extern void udma_destroy_table(struct ata_channel *); @@ -868,14 +806,11 @@ extern void udma_print(struct ata_device *); extern int udma_black_list(struct ata_device *); extern int udma_white_list(struct ata_device *); -extern int ata_do_udma(unsigned int reading, struct ata_device *drive, struct request *rq); - extern ide_startstop_t udma_tcq_taskfile(struct ata_device *, struct request *); extern int udma_tcq_enable(struct ata_device *, int); extern ide_startstop_t ide_dma_intr(struct ata_device *, struct request *); extern int check_drive_lists(struct ata_device *, int good_bad); -extern int XXX_ide_dmaproc(struct ata_device *); extern void ide_release_dma(struct ata_channel *); extern int ata_start_dma(struct ata_device *, struct request *rq); @@ -896,5 +831,8 @@ extern int drive_is_ready(struct ata_device *drive); extern void ata_select(struct ata_device *, unsigned long); extern void ata_mask(struct ata_device *); extern int ata_status(struct ata_device *, u8, u8); +extern int ata_irq_enable(struct ata_device *, int); +extern void ata_reset(struct ata_channel *); +extern void ata_out_regfile(struct ata_device *, struct hd_drive_task_hdr *); #endif diff --git a/include/linux/jbd.h b/include/linux/jbd.h index d0c52537a274..835d38c9dbfc 100644 --- a/include/linux/jbd.h +++ b/include/linux/jbd.h @@ -641,7 +641,8 @@ extern int journal_dirty_metadata (handle_t *, struct buffer_head *); extern void journal_release_buffer (handle_t *, struct buffer_head *); extern void journal_forget (handle_t *, struct buffer_head *); extern void journal_sync_buffer (struct buffer_head *); -extern int journal_flushpage(journal_t *, struct page *, unsigned long); +extern int journal_invalidatepage(journal_t *, + struct page *, unsigned long); extern int journal_try_to_free_buffers(journal_t *, struct page *, int); extern int journal_stop(handle_t *); extern int journal_flush (journal_t *); diff --git a/include/linux/list.h b/include/linux/list.h index 99da4ab62ec2..f6ea9d2d9f25 100644 --- a/include/linux/list.h +++ b/include/linux/list.h @@ -94,6 +94,8 @@ static __inline__ void __list_del(struct list_head * prev, static __inline__ void list_del(struct list_head *entry) { __list_del(entry->prev, entry->next); + entry->next = (void *) 0; + entry->prev = (void *) 0; } /** diff --git a/include/linux/nfs_fs.h b/include/linux/nfs_fs.h index 027986b2f336..64c3b5ef2d88 100644 --- a/include/linux/nfs_fs.h +++ b/include/linux/nfs_fs.h @@ -13,6 +13,7 @@ #include <linux/in.h> #include <linux/mm.h> #include <linux/pagemap.h> +#include <linux/wait.h> #include <linux/nfs_fs_sb.h> @@ -159,6 +160,8 @@ struct nfs_inode { /* Credentials for shared mmap */ struct rpc_cred *mm_cred; + wait_queue_head_t nfs_i_wait; + struct inode vfs_inode; }; diff --git a/include/linux/raid/md_k.h b/include/linux/raid/md_k.h index 62024cab73f2..7b270a50487e 100644 --- a/include/linux/raid/md_k.h +++ b/include/linux/raid/md_k.h @@ -355,7 +355,7 @@ do { \ if (condition) \ break; \ spin_unlock_irq(&lock); \ - run_task_queue(&tq_disk); \ + blk_run_queues(); \ schedule(); \ spin_lock_irq(&lock); \ } \ @@ -381,7 +381,7 @@ do { \ set_current_state(TASK_UNINTERRUPTIBLE); \ if (condition) \ break; \ - run_task_queue(&tq_disk); \ + blk_run_queues(); \ schedule(); \ } \ current->state = TASK_RUNNING; \ diff --git a/include/linux/swap.h b/include/linux/swap.h index 7e20b3016c7f..d0160265e3c5 100644 --- a/include/linux/swap.h +++ b/include/linux/swap.h @@ -11,7 +11,16 @@ #define SWAP_FLAG_PRIO_MASK 0x7fff #define SWAP_FLAG_PRIO_SHIFT 0 -#define MAX_SWAPFILES 32 +/* + * MAX_SWAPFILES defines the maximum number of swaptypes: things which can + * be swapped to. The swap type and the offset into that swap type are + * encoded into pte's and into pgoff_t's in the swapcache. Using five bits + * for the type means that the maximum number of swapcache pages is 27 bits + * on 32-bit-pgoff_t architectures. And that assumes that the architecture packs + * the type/offset into the pte as 5/27 as well. + */ +#define MAX_SWAPFILES_SHIFT 5 +#define MAX_SWAPFILES (1 << MAX_SWAPFILES_SHIFT) /* * Magic header for a swap area. The first part of the union is diff --git a/include/linux/swapops.h b/include/linux/swapops.h new file mode 100644 index 000000000000..500f9960d939 --- /dev/null +++ b/include/linux/swapops.h @@ -0,0 +1,68 @@ +/* + * swapcache pages are stored in the swapper_space radix tree. We want to + * get good packing density in that tree, so the index should be dense in + * the low-order bits. + * + * We arrange the `type' and `offset' fields so that `type' is at the five + * high-order bits of the smp_entry_t and `offset' is right-aligned in the + * remaining bits. + * + * swp_entry_t's are *never* stored anywhere in their arch-dependent format. + */ +#define SWP_TYPE_SHIFT(e) (sizeof(e.val) * 8 - MAX_SWAPFILES_SHIFT) +#define SWP_OFFSET_MASK(e) ((1 << SWP_TYPE_SHIFT(e)) - 1) + +/* + * Store a type+offset into a swp_entry_t in an arch-independent format + */ +static inline swp_entry_t swp_entry(unsigned type, pgoff_t offset) +{ + swp_entry_t ret; + + ret.val = (type << SWP_TYPE_SHIFT(ret)) | + (offset & SWP_OFFSET_MASK(ret)); + return ret; +} + +/* + * Extract the `type' field from a swp_entry_t. The swp_entry_t is in + * arch-independent format + */ +static inline unsigned swp_type(swp_entry_t entry) +{ + return (entry.val >> SWP_TYPE_SHIFT(entry)) & + ((1 << MAX_SWAPFILES_SHIFT) - 1); +} + +/* + * Extract the `offset' field from a swp_entry_t. The swp_entry_t is in + * arch-independent format + */ +static inline pgoff_t swp_offset(swp_entry_t entry) +{ + return entry.val & SWP_OFFSET_MASK(entry); +} + +/* + * Convert the arch-dependent pte representation of a swp_entry_t into an + * arch-independent swp_entry_t. + */ +static inline swp_entry_t pte_to_swp_entry(pte_t pte) +{ + swp_entry_t arch_entry; + + arch_entry = __pte_to_swp_entry(pte); + return swp_entry(__swp_type(arch_entry), __swp_offset(arch_entry)); +} + +/* + * Convert the arch-independent representation of a swp_entry_t into the + * arch-dependent pte representation. + */ +static inline pte_t swp_entry_to_pte(swp_entry_t entry) +{ + swp_entry_t arch_entry; + + arch_entry = __swp_entry(swp_type(entry), swp_offset(entry)); + return __swp_entry_to_pte(arch_entry); +} diff --git a/include/linux/types.h b/include/linux/types.h index 211461bc97c0..c102bcf8be83 100644 --- a/include/linux/types.h +++ b/include/linux/types.h @@ -124,6 +124,14 @@ typedef u64 sector_t; typedef unsigned long sector_t; #endif +/* + * The type of an index into the pagecache. Use a #define so asm/types.h + * can override it. + */ +#ifndef pgoff_t +#define pgoff_t unsigned long +#endif + #endif /* __KERNEL_STRICT_NAMES */ /* diff --git a/include/linux/writeback.h b/include/linux/writeback.h index 5f035892d26f..cf706c783eda 100644 --- a/include/linux/writeback.h +++ b/include/linux/writeback.h @@ -31,6 +31,7 @@ static inline int current_is_pdflush(void) void writeback_unlocked_inodes(int *nr_to_write, int sync_mode, unsigned long *older_than_this); +void wake_up_inode(struct inode *inode); void __wait_on_inode(struct inode * inode); void sync_inodes_sb(struct super_block *, int wait); void sync_inodes(int wait); |
