diff options
Diffstat (limited to 'include/asm-ia64')
-rw-r--r-- | include/asm-ia64/machvec.h | 4 | ||||
-rw-r--r-- | include/asm-ia64/meminit.h | 6 | ||||
-rw-r--r-- | include/asm-ia64/mmzone.h | 10 | ||||
-rw-r--r-- | include/asm-ia64/nodedata.h | 4 | ||||
-rw-r--r-- | include/asm-ia64/page.h | 6 | ||||
-rw-r--r-- | include/asm-ia64/pgtable.h | 3 | ||||
-rw-r--r-- | include/asm-ia64/rwsem.h | 5 | ||||
-rw-r--r-- | include/asm-ia64/semaphore.h | 2 | ||||
-rw-r--r-- | include/asm-ia64/sn/arch.h | 36 | ||||
-rw-r--r-- | include/asm-ia64/sn/io.h | 11 | ||||
-rw-r--r-- | include/asm-ia64/sn/klconfig.h | 34 | ||||
-rw-r--r-- | include/asm-ia64/sn/l1.h | 12 | ||||
-rw-r--r-- | include/asm-ia64/sn/nodepda.h | 1 | ||||
-rw-r--r-- | include/asm-ia64/sn/sn_cpuid.h | 3 | ||||
-rw-r--r-- | include/asm-ia64/sn/sn_sal.h | 59 | ||||
-rw-r--r-- | include/asm-ia64/sn/tioca_provider.h | 14 | ||||
-rw-r--r-- | include/asm-ia64/sn/tiocx.h | 3 | ||||
-rw-r--r-- | include/asm-ia64/sn/xp.h | 16 | ||||
-rw-r--r-- | include/asm-ia64/sparsemem.h | 20 | ||||
-rw-r--r-- | include/asm-ia64/tlb.h | 19 | ||||
-rw-r--r-- | include/asm-ia64/unistd.h | 2 |
21 files changed, 165 insertions, 105 deletions
diff --git a/include/asm-ia64/machvec.h b/include/asm-ia64/machvec.h index 79e89a7db566..ca5ea994d688 100644 --- a/include/asm-ia64/machvec.h +++ b/include/asm-ia64/machvec.h | |||
@@ -26,7 +26,7 @@ typedef void ia64_mv_cpu_init_t (void); | |||
26 | typedef void ia64_mv_irq_init_t (void); | 26 | typedef void ia64_mv_irq_init_t (void); |
27 | typedef void ia64_mv_send_ipi_t (int, int, int, int); | 27 | typedef void ia64_mv_send_ipi_t (int, int, int, int); |
28 | typedef void ia64_mv_timer_interrupt_t (int, void *, struct pt_regs *); | 28 | typedef void ia64_mv_timer_interrupt_t (int, void *, struct pt_regs *); |
29 | typedef void ia64_mv_global_tlb_purge_t (unsigned long, unsigned long, unsigned long); | 29 | typedef void ia64_mv_global_tlb_purge_t (struct mm_struct *, unsigned long, unsigned long, unsigned long); |
30 | typedef void ia64_mv_tlb_migrate_finish_t (struct mm_struct *); | 30 | typedef void ia64_mv_tlb_migrate_finish_t (struct mm_struct *); |
31 | typedef unsigned int ia64_mv_local_vector_to_irq (u8); | 31 | typedef unsigned int ia64_mv_local_vector_to_irq (u8); |
32 | typedef char *ia64_mv_pci_get_legacy_mem_t (struct pci_bus *); | 32 | typedef char *ia64_mv_pci_get_legacy_mem_t (struct pci_bus *); |
@@ -37,7 +37,7 @@ typedef int ia64_mv_pci_legacy_write_t (struct pci_bus *, u16 port, u32 val, | |||
37 | 37 | ||
38 | /* DMA-mapping interface: */ | 38 | /* DMA-mapping interface: */ |
39 | typedef void ia64_mv_dma_init (void); | 39 | typedef void ia64_mv_dma_init (void); |
40 | typedef void *ia64_mv_dma_alloc_coherent (struct device *, size_t, dma_addr_t *, int); | 40 | typedef void *ia64_mv_dma_alloc_coherent (struct device *, size_t, dma_addr_t *, gfp_t); |
41 | typedef void ia64_mv_dma_free_coherent (struct device *, size_t, void *, dma_addr_t); | 41 | typedef void ia64_mv_dma_free_coherent (struct device *, size_t, void *, dma_addr_t); |
42 | typedef dma_addr_t ia64_mv_dma_map_single (struct device *, void *, size_t, int); | 42 | typedef dma_addr_t ia64_mv_dma_map_single (struct device *, void *, size_t, int); |
43 | typedef void ia64_mv_dma_unmap_single (struct device *, dma_addr_t, size_t, int); | 43 | typedef void ia64_mv_dma_unmap_single (struct device *, dma_addr_t, size_t, int); |
diff --git a/include/asm-ia64/meminit.h b/include/asm-ia64/meminit.h index 1590dc65b30b..46501b01a5c5 100644 --- a/include/asm-ia64/meminit.h +++ b/include/asm-ia64/meminit.h | |||
@@ -16,10 +16,11 @@ | |||
16 | * - initrd (optional) | 16 | * - initrd (optional) |
17 | * - command line string | 17 | * - command line string |
18 | * - kernel code & data | 18 | * - kernel code & data |
19 | * - Kernel memory map built from EFI memory map | ||
19 | * | 20 | * |
20 | * More could be added if necessary | 21 | * More could be added if necessary |
21 | */ | 22 | */ |
22 | #define IA64_MAX_RSVD_REGIONS 5 | 23 | #define IA64_MAX_RSVD_REGIONS 6 |
23 | 24 | ||
24 | struct rsvd_region { | 25 | struct rsvd_region { |
25 | unsigned long start; /* virtual address of beginning of element */ | 26 | unsigned long start; /* virtual address of beginning of element */ |
@@ -33,6 +34,7 @@ extern void find_memory (void); | |||
33 | extern void reserve_memory (void); | 34 | extern void reserve_memory (void); |
34 | extern void find_initrd (void); | 35 | extern void find_initrd (void); |
35 | extern int filter_rsvd_memory (unsigned long start, unsigned long end, void *arg); | 36 | extern int filter_rsvd_memory (unsigned long start, unsigned long end, void *arg); |
37 | extern void efi_memmap_init(unsigned long *, unsigned long *); | ||
36 | 38 | ||
37 | /* | 39 | /* |
38 | * For rounding an address to the next IA64_GRANULE_SIZE or order | 40 | * For rounding an address to the next IA64_GRANULE_SIZE or order |
@@ -41,7 +43,7 @@ extern int filter_rsvd_memory (unsigned long start, unsigned long end, void *arg | |||
41 | #define GRANULEROUNDUP(n) (((n)+IA64_GRANULE_SIZE-1) & ~(IA64_GRANULE_SIZE-1)) | 43 | #define GRANULEROUNDUP(n) (((n)+IA64_GRANULE_SIZE-1) & ~(IA64_GRANULE_SIZE-1)) |
42 | #define ORDERROUNDDOWN(n) ((n) & ~((PAGE_SIZE<<MAX_ORDER)-1)) | 44 | #define ORDERROUNDDOWN(n) ((n) & ~((PAGE_SIZE<<MAX_ORDER)-1)) |
43 | 45 | ||
44 | #ifdef CONFIG_DISCONTIGMEM | 46 | #ifdef CONFIG_NUMA |
45 | extern void call_pernode_memory (unsigned long start, unsigned long len, void *func); | 47 | extern void call_pernode_memory (unsigned long start, unsigned long len, void *func); |
46 | #else | 48 | #else |
47 | # define call_pernode_memory(start, len, func) (*func)(start, len, 0) | 49 | # define call_pernode_memory(start, len, func) (*func)(start, len, 0) |
diff --git a/include/asm-ia64/mmzone.h b/include/asm-ia64/mmzone.h index d32f51e3d6c2..34efe88eb849 100644 --- a/include/asm-ia64/mmzone.h +++ b/include/asm-ia64/mmzone.h | |||
@@ -15,7 +15,7 @@ | |||
15 | #include <asm/page.h> | 15 | #include <asm/page.h> |
16 | #include <asm/meminit.h> | 16 | #include <asm/meminit.h> |
17 | 17 | ||
18 | #ifdef CONFIG_DISCONTIGMEM | 18 | #ifdef CONFIG_NUMA |
19 | 19 | ||
20 | static inline int pfn_to_nid(unsigned long pfn) | 20 | static inline int pfn_to_nid(unsigned long pfn) |
21 | { | 21 | { |
@@ -31,6 +31,10 @@ static inline int pfn_to_nid(unsigned long pfn) | |||
31 | #endif | 31 | #endif |
32 | } | 32 | } |
33 | 33 | ||
34 | #ifdef CONFIG_HAVE_ARCH_EARLY_PFN_TO_NID | ||
35 | extern int early_pfn_to_nid(unsigned long pfn); | ||
36 | #endif | ||
37 | |||
34 | #ifdef CONFIG_IA64_DIG /* DIG systems are small */ | 38 | #ifdef CONFIG_IA64_DIG /* DIG systems are small */ |
35 | # define MAX_PHYSNODE_ID 8 | 39 | # define MAX_PHYSNODE_ID 8 |
36 | # define NR_NODE_MEMBLKS (MAX_NUMNODES * 8) | 40 | # define NR_NODE_MEMBLKS (MAX_NUMNODES * 8) |
@@ -39,8 +43,8 @@ static inline int pfn_to_nid(unsigned long pfn) | |||
39 | # define NR_NODE_MEMBLKS (MAX_NUMNODES * 4) | 43 | # define NR_NODE_MEMBLKS (MAX_NUMNODES * 4) |
40 | #endif | 44 | #endif |
41 | 45 | ||
42 | #else /* CONFIG_DISCONTIGMEM */ | 46 | #else /* CONFIG_NUMA */ |
43 | # define NR_NODE_MEMBLKS (MAX_NUMNODES * 4) | 47 | # define NR_NODE_MEMBLKS (MAX_NUMNODES * 4) |
44 | #endif /* CONFIG_DISCONTIGMEM */ | 48 | #endif /* CONFIG_NUMA */ |
45 | 49 | ||
46 | #endif /* _ASM_IA64_MMZONE_H */ | 50 | #endif /* _ASM_IA64_MMZONE_H */ |
diff --git a/include/asm-ia64/nodedata.h b/include/asm-ia64/nodedata.h index 6b0f3ed89b7e..9978c7ce7549 100644 --- a/include/asm-ia64/nodedata.h +++ b/include/asm-ia64/nodedata.h | |||
@@ -17,7 +17,7 @@ | |||
17 | #include <asm/percpu.h> | 17 | #include <asm/percpu.h> |
18 | #include <asm/mmzone.h> | 18 | #include <asm/mmzone.h> |
19 | 19 | ||
20 | #ifdef CONFIG_DISCONTIGMEM | 20 | #ifdef CONFIG_NUMA |
21 | 21 | ||
22 | /* | 22 | /* |
23 | * Node Data. One of these structures is located on each node of a NUMA system. | 23 | * Node Data. One of these structures is located on each node of a NUMA system. |
@@ -47,6 +47,6 @@ struct ia64_node_data { | |||
47 | */ | 47 | */ |
48 | #define NODE_DATA(nid) (local_node_data->pg_data_ptrs[nid]) | 48 | #define NODE_DATA(nid) (local_node_data->pg_data_ptrs[nid]) |
49 | 49 | ||
50 | #endif /* CONFIG_DISCONTIGMEM */ | 50 | #endif /* CONFIG_NUMA */ |
51 | 51 | ||
52 | #endif /* _ASM_IA64_NODEDATA_H */ | 52 | #endif /* _ASM_IA64_NODEDATA_H */ |
diff --git a/include/asm-ia64/page.h b/include/asm-ia64/page.h index 9edffad8c28b..ef436b9d06ad 100644 --- a/include/asm-ia64/page.h +++ b/include/asm-ia64/page.h | |||
@@ -102,15 +102,15 @@ do { \ | |||
102 | 102 | ||
103 | #ifdef CONFIG_VIRTUAL_MEM_MAP | 103 | #ifdef CONFIG_VIRTUAL_MEM_MAP |
104 | extern int ia64_pfn_valid (unsigned long pfn); | 104 | extern int ia64_pfn_valid (unsigned long pfn); |
105 | #else | 105 | #elif defined(CONFIG_FLATMEM) |
106 | # define ia64_pfn_valid(pfn) 1 | 106 | # define ia64_pfn_valid(pfn) 1 |
107 | #endif | 107 | #endif |
108 | 108 | ||
109 | #ifndef CONFIG_DISCONTIGMEM | 109 | #ifdef CONFIG_FLATMEM |
110 | # define pfn_valid(pfn) (((pfn) < max_mapnr) && ia64_pfn_valid(pfn)) | 110 | # define pfn_valid(pfn) (((pfn) < max_mapnr) && ia64_pfn_valid(pfn)) |
111 | # define page_to_pfn(page) ((unsigned long) (page - mem_map)) | 111 | # define page_to_pfn(page) ((unsigned long) (page - mem_map)) |
112 | # define pfn_to_page(pfn) (mem_map + (pfn)) | 112 | # define pfn_to_page(pfn) (mem_map + (pfn)) |
113 | #else | 113 | #elif defined(CONFIG_DISCONTIGMEM) |
114 | extern struct page *vmem_map; | 114 | extern struct page *vmem_map; |
115 | extern unsigned long max_low_pfn; | 115 | extern unsigned long max_low_pfn; |
116 | # define pfn_valid(pfn) (((pfn) < max_low_pfn) && ia64_pfn_valid(pfn)) | 116 | # define pfn_valid(pfn) (((pfn) < max_low_pfn) && ia64_pfn_valid(pfn)) |
diff --git a/include/asm-ia64/pgtable.h b/include/asm-ia64/pgtable.h index 3339c7b55a6f..21e32a06bc82 100644 --- a/include/asm-ia64/pgtable.h +++ b/include/asm-ia64/pgtable.h | |||
@@ -236,9 +236,6 @@ ia64_phys_addr_valid (unsigned long addr) | |||
236 | #define pte_modify(_pte, newprot) \ | 236 | #define pte_modify(_pte, newprot) \ |
237 | (__pte((pte_val(_pte) & ~_PAGE_CHG_MASK) | (pgprot_val(newprot) & _PAGE_CHG_MASK))) | 237 | (__pte((pte_val(_pte) & ~_PAGE_CHG_MASK) | (pgprot_val(newprot) & _PAGE_CHG_MASK))) |
238 | 238 | ||
239 | #define page_pte_prot(page,prot) mk_pte(page, prot) | ||
240 | #define page_pte(page) page_pte_prot(page, __pgprot(0)) | ||
241 | |||
242 | #define pte_none(pte) (!pte_val(pte)) | 239 | #define pte_none(pte) (!pte_val(pte)) |
243 | #define pte_present(pte) (pte_val(pte) & (_PAGE_P | _PAGE_PROTNONE)) | 240 | #define pte_present(pte) (pte_val(pte) & (_PAGE_P | _PAGE_PROTNONE)) |
244 | #define pte_clear(mm,addr,pte) (pte_val(*(pte)) = 0UL) | 241 | #define pte_clear(mm,addr,pte) (pte_val(*(pte)) = 0UL) |
diff --git a/include/asm-ia64/rwsem.h b/include/asm-ia64/rwsem.h index e18b5ab0cb75..1327c91ea39c 100644 --- a/include/asm-ia64/rwsem.h +++ b/include/asm-ia64/rwsem.h | |||
@@ -186,4 +186,9 @@ __downgrade_write (struct rw_semaphore *sem) | |||
186 | #define rwsem_atomic_add(delta, sem) atomic64_add(delta, (atomic64_t *)(&(sem)->count)) | 186 | #define rwsem_atomic_add(delta, sem) atomic64_add(delta, (atomic64_t *)(&(sem)->count)) |
187 | #define rwsem_atomic_update(delta, sem) atomic64_add_return(delta, (atomic64_t *)(&(sem)->count)) | 187 | #define rwsem_atomic_update(delta, sem) atomic64_add_return(delta, (atomic64_t *)(&(sem)->count)) |
188 | 188 | ||
189 | static inline int rwsem_is_locked(struct rw_semaphore *sem) | ||
190 | { | ||
191 | return (sem->count != 0); | ||
192 | } | ||
193 | |||
189 | #endif /* _ASM_IA64_RWSEM_H */ | 194 | #endif /* _ASM_IA64_RWSEM_H */ |
diff --git a/include/asm-ia64/semaphore.h b/include/asm-ia64/semaphore.h index 3a2f0f3f78f3..bb8906285fab 100644 --- a/include/asm-ia64/semaphore.h +++ b/include/asm-ia64/semaphore.h | |||
@@ -24,8 +24,6 @@ struct semaphore { | |||
24 | .wait = __WAIT_QUEUE_HEAD_INITIALIZER((name).wait) \ | 24 | .wait = __WAIT_QUEUE_HEAD_INITIALIZER((name).wait) \ |
25 | } | 25 | } |
26 | 26 | ||
27 | #define __MUTEX_INITIALIZER(name) __SEMAPHORE_INITIALIZER(name,1) | ||
28 | |||
29 | #define __DECLARE_SEMAPHORE_GENERIC(name,count) \ | 27 | #define __DECLARE_SEMAPHORE_GENERIC(name,count) \ |
30 | struct semaphore name = __SEMAPHORE_INITIALIZER(name, count) | 28 | struct semaphore name = __SEMAPHORE_INITIALIZER(name, count) |
31 | 29 | ||
diff --git a/include/asm-ia64/sn/arch.h b/include/asm-ia64/sn/arch.h index ab827d298569..1a3831c04af6 100644 --- a/include/asm-ia64/sn/arch.h +++ b/include/asm-ia64/sn/arch.h | |||
@@ -18,6 +18,32 @@ | |||
18 | #include <asm/sn/sn_cpuid.h> | 18 | #include <asm/sn/sn_cpuid.h> |
19 | 19 | ||
20 | /* | 20 | /* |
21 | * This is the maximum number of NUMALINK nodes that can be part of a single | ||
22 | * SSI kernel. This number includes C-brick, M-bricks, and TIOs. Nodes in | ||
23 | * remote partitions are NOT included in this number. | ||
24 | * The number of compact nodes cannot exceed size of a coherency domain. | ||
25 | * The purpose of this define is to specify a node count that includes | ||
26 | * all C/M/TIO nodes in an SSI system. | ||
27 | * | ||
28 | * SGI system can currently support up to 256 C/M nodes plus additional TIO nodes. | ||
29 | * | ||
30 | * Note: ACPI20 has an architectural limit of 256 nodes. When we upgrade | ||
31 | * to ACPI3.0, this limit will be removed. The notion of "compact nodes" | ||
32 | * should be deleted and TIOs should be included in MAX_NUMNODES. | ||
33 | */ | ||
34 | #define MAX_COMPACT_NODES 512 | ||
35 | |||
36 | /* | ||
37 | * Maximum number of nodes in all partitions and in all coherency domains. | ||
38 | * This is the total number of nodes accessible in the numalink fabric. It | ||
39 | * includes all C & M bricks, plus all TIOs. | ||
40 | * | ||
41 | * This value is also the value of the maximum number of NASIDs in the numalink | ||
42 | * fabric. | ||
43 | */ | ||
44 | #define MAX_NUMALINK_NODES 16384 | ||
45 | |||
46 | /* | ||
21 | * The following defines attributes of the HUB chip. These attributes are | 47 | * The following defines attributes of the HUB chip. These attributes are |
22 | * frequently referenced. They are kept in the per-cpu data areas of each cpu. | 48 | * frequently referenced. They are kept in the per-cpu data areas of each cpu. |
23 | * They are kept together in a struct to minimize cache misses. | 49 | * They are kept together in a struct to minimize cache misses. |
@@ -41,15 +67,6 @@ DECLARE_PER_CPU(struct sn_hub_info_s, __sn_hub_info); | |||
41 | 67 | ||
42 | 68 | ||
43 | /* | 69 | /* |
44 | * This is the maximum number of nodes that can be part of a kernel. | ||
45 | * Effectively, it's the maximum number of compact node ids (cnodeid_t). | ||
46 | * This is not necessarily the same as MAX_NASIDS. | ||
47 | */ | ||
48 | #define MAX_COMPACT_NODES 2048 | ||
49 | #define CPUS_PER_NODE 4 | ||
50 | |||
51 | |||
52 | /* | ||
53 | * Compact node ID to nasid mappings kept in the per-cpu data areas of each | 70 | * Compact node ID to nasid mappings kept in the per-cpu data areas of each |
54 | * cpu. | 71 | * cpu. |
55 | */ | 72 | */ |
@@ -57,7 +74,6 @@ DECLARE_PER_CPU(short, __sn_cnodeid_to_nasid[MAX_NUMNODES]); | |||
57 | #define sn_cnodeid_to_nasid (&__get_cpu_var(__sn_cnodeid_to_nasid[0])) | 74 | #define sn_cnodeid_to_nasid (&__get_cpu_var(__sn_cnodeid_to_nasid[0])) |
58 | 75 | ||
59 | 76 | ||
60 | |||
61 | extern u8 sn_partition_id; | 77 | extern u8 sn_partition_id; |
62 | extern u8 sn_system_size; | 78 | extern u8 sn_system_size; |
63 | extern u8 sn_sharing_domain_size; | 79 | extern u8 sn_sharing_domain_size; |
diff --git a/include/asm-ia64/sn/io.h b/include/asm-ia64/sn/io.h index 42209733f6b1..41c73a735628 100644 --- a/include/asm-ia64/sn/io.h +++ b/include/asm-ia64/sn/io.h | |||
@@ -14,7 +14,7 @@ | |||
14 | extern void * sn_io_addr(unsigned long port) __attribute_const__; /* Forward definition */ | 14 | extern void * sn_io_addr(unsigned long port) __attribute_const__; /* Forward definition */ |
15 | extern void __sn_mmiowb(void); /* Forward definition */ | 15 | extern void __sn_mmiowb(void); /* Forward definition */ |
16 | 16 | ||
17 | extern int numionodes; | 17 | extern int num_cnodes; |
18 | 18 | ||
19 | #define __sn_mf_a() ia64_mfa() | 19 | #define __sn_mf_a() ia64_mfa() |
20 | 20 | ||
@@ -36,6 +36,15 @@ extern void sn_dma_flush(unsigned long); | |||
36 | #define __sn_readq_relaxed ___sn_readq_relaxed | 36 | #define __sn_readq_relaxed ___sn_readq_relaxed |
37 | 37 | ||
38 | /* | 38 | /* |
39 | * Convenience macros for setting/clearing bits using the above accessors | ||
40 | */ | ||
41 | |||
42 | #define __sn_setq_relaxed(addr, val) \ | ||
43 | writeq((__sn_readq_relaxed(addr) | (val)), (addr)) | ||
44 | #define __sn_clrq_relaxed(addr, val) \ | ||
45 | writeq((__sn_readq_relaxed(addr) & ~(val)), (addr)) | ||
46 | |||
47 | /* | ||
39 | * The following routines are SN Platform specific, called when | 48 | * The following routines are SN Platform specific, called when |
40 | * a reference is made to inX/outX set macros. SN Platform | 49 | * a reference is made to inX/outX set macros. SN Platform |
41 | * inX set of macros ensures that Posted DMA writes on the | 50 | * inX set of macros ensures that Posted DMA writes on the |
diff --git a/include/asm-ia64/sn/klconfig.h b/include/asm-ia64/sn/klconfig.h index 9f920c70a62a..bcbf209d63be 100644 --- a/include/asm-ia64/sn/klconfig.h +++ b/include/asm-ia64/sn/klconfig.h | |||
@@ -208,19 +208,6 @@ typedef struct lboard_s { | |||
208 | klconf_off_t brd_next_same; /* Next BOARD with same nasid */ | 208 | klconf_off_t brd_next_same; /* Next BOARD with same nasid */ |
209 | } lboard_t; | 209 | } lboard_t; |
210 | 210 | ||
211 | #define KLCF_NUM_COMPS(_brd) ((_brd)->brd_numcompts) | ||
212 | #define NODE_OFFSET_TO_KLINFO(n,off) ((klinfo_t*) TO_NODE_CAC(n,off)) | ||
213 | #define KLCF_NEXT(_brd) \ | ||
214 | ((_brd)->brd_next_same ? \ | ||
215 | (NODE_OFFSET_TO_LBOARD((_brd)->brd_next_same_host, (_brd)->brd_next_same)): NULL) | ||
216 | #define KLCF_NEXT_ANY(_brd) \ | ||
217 | ((_brd)->brd_next_any ? \ | ||
218 | (NODE_OFFSET_TO_LBOARD(NASID_GET(_brd), (_brd)->brd_next_any)): NULL) | ||
219 | #define KLCF_COMP(_brd, _ndx) \ | ||
220 | ((((_brd)->brd_compts[(_ndx)]) == 0) ? 0 : \ | ||
221 | (NODE_OFFSET_TO_KLINFO(NASID_GET(_brd), (_brd)->brd_compts[(_ndx)]))) | ||
222 | |||
223 | |||
224 | /* | 211 | /* |
225 | * Generic info structure. This stores common info about a | 212 | * Generic info structure. This stores common info about a |
226 | * component. | 213 | * component. |
@@ -249,24 +236,11 @@ typedef struct klinfo_s { /* Generic info */ | |||
249 | } klinfo_t ; | 236 | } klinfo_t ; |
250 | 237 | ||
251 | 238 | ||
252 | static inline lboard_t *find_lboard_any(lboard_t * start, unsigned char brd_type) | 239 | static inline lboard_t *find_lboard_next(lboard_t * brd) |
253 | { | 240 | { |
254 | /* Search all boards stored on this node. */ | 241 | if (brd && brd->brd_next_any) |
255 | 242 | return NODE_OFFSET_TO_LBOARD(NASID_GET(brd), brd->brd_next_any); | |
256 | while (start) { | 243 | return NULL; |
257 | if (start->brd_type == brd_type) | ||
258 | return start; | ||
259 | start = KLCF_NEXT_ANY(start); | ||
260 | } | ||
261 | /* Didn't find it. */ | ||
262 | return (lboard_t *) NULL; | ||
263 | } | 244 | } |
264 | 245 | ||
265 | |||
266 | /* external declarations of Linux kernel functions. */ | ||
267 | |||
268 | extern lboard_t *root_lboard[]; | ||
269 | extern klinfo_t *find_component(lboard_t *brd, klinfo_t *kli, unsigned char type); | ||
270 | extern klinfo_t *find_first_component(lboard_t *brd, unsigned char type); | ||
271 | |||
272 | #endif /* _ASM_IA64_SN_KLCONFIG_H */ | 246 | #endif /* _ASM_IA64_SN_KLCONFIG_H */ |
diff --git a/include/asm-ia64/sn/l1.h b/include/asm-ia64/sn/l1.h index 2e5f0aa38889..e3b819110d47 100644 --- a/include/asm-ia64/sn/l1.h +++ b/include/asm-ia64/sn/l1.h | |||
@@ -35,4 +35,16 @@ | |||
35 | #define L1_BRICKTYPE_ATHENA 0x2b /* + */ | 35 | #define L1_BRICKTYPE_ATHENA 0x2b /* + */ |
36 | #define L1_BRICKTYPE_DAYTONA 0x7a /* z */ | 36 | #define L1_BRICKTYPE_DAYTONA 0x7a /* z */ |
37 | 37 | ||
38 | /* board type response codes */ | ||
39 | #define L1_BOARDTYPE_IP69 0x0100 /* CA */ | ||
40 | #define L1_BOARDTYPE_IP63 0x0200 /* CB */ | ||
41 | #define L1_BOARDTYPE_BASEIO 0x0300 /* IB */ | ||
42 | #define L1_BOARDTYPE_PCIE2SLOT 0x0400 /* IC */ | ||
43 | #define L1_BOARDTYPE_PCIX3SLOT 0x0500 /* ID */ | ||
44 | #define L1_BOARDTYPE_PCIXPCIE4SLOT 0x0600 /* IE */ | ||
45 | #define L1_BOARDTYPE_ABACUS 0x0700 /* AB */ | ||
46 | #define L1_BOARDTYPE_DAYTONA 0x0800 /* AD */ | ||
47 | #define L1_BOARDTYPE_INVAL (-1) /* invalid brick type */ | ||
48 | |||
49 | |||
38 | #endif /* _ASM_IA64_SN_L1_H */ | 50 | #endif /* _ASM_IA64_SN_L1_H */ |
diff --git a/include/asm-ia64/sn/nodepda.h b/include/asm-ia64/sn/nodepda.h index 47bb8100fd00..6f6d69e39ff5 100644 --- a/include/asm-ia64/sn/nodepda.h +++ b/include/asm-ia64/sn/nodepda.h | |||
@@ -55,7 +55,6 @@ struct nodepda_s { | |||
55 | */ | 55 | */ |
56 | struct phys_cpuid phys_cpuid[NR_CPUS]; | 56 | struct phys_cpuid phys_cpuid[NR_CPUS]; |
57 | spinlock_t ptc_lock ____cacheline_aligned_in_smp; | 57 | spinlock_t ptc_lock ____cacheline_aligned_in_smp; |
58 | spinlock_t bist_lock; | ||
59 | }; | 58 | }; |
60 | 59 | ||
61 | typedef struct nodepda_s nodepda_t; | 60 | typedef struct nodepda_s nodepda_t; |
diff --git a/include/asm-ia64/sn/sn_cpuid.h b/include/asm-ia64/sn/sn_cpuid.h index d2c1d34dcce4..749deb2ca6c1 100644 --- a/include/asm-ia64/sn/sn_cpuid.h +++ b/include/asm-ia64/sn/sn_cpuid.h | |||
@@ -105,7 +105,6 @@ extern short physical_node_map[]; /* indexed by nasid to get cnode */ | |||
105 | #define cpuid_to_nasid(cpuid) (sn_nodepda->phys_cpuid[cpuid].nasid) | 105 | #define cpuid_to_nasid(cpuid) (sn_nodepda->phys_cpuid[cpuid].nasid) |
106 | #define cpuid_to_subnode(cpuid) (sn_nodepda->phys_cpuid[cpuid].subnode) | 106 | #define cpuid_to_subnode(cpuid) (sn_nodepda->phys_cpuid[cpuid].subnode) |
107 | #define cpuid_to_slice(cpuid) (sn_nodepda->phys_cpuid[cpuid].slice) | 107 | #define cpuid_to_slice(cpuid) (sn_nodepda->phys_cpuid[cpuid].slice) |
108 | #define cpuid_to_cnodeid(cpuid) (physical_node_map[cpuid_to_nasid(cpuid)]) | ||
109 | 108 | ||
110 | 109 | ||
111 | /* | 110 | /* |
@@ -113,8 +112,6 @@ extern short physical_node_map[]; /* indexed by nasid to get cnode */ | |||
113 | * of potentially large tables. | 112 | * of potentially large tables. |
114 | */ | 113 | */ |
115 | extern int nasid_slice_to_cpuid(int, int); | 114 | extern int nasid_slice_to_cpuid(int, int); |
116 | #define nasid_slice_to_cpu_physical_id(nasid, slice) \ | ||
117 | cpu_physical_id(nasid_slice_to_cpuid(nasid, slice)) | ||
118 | 115 | ||
119 | /* | 116 | /* |
120 | * cnodeid_to_nasid - convert a cnodeid to a NASID | 117 | * cnodeid_to_nasid - convert a cnodeid to a NASID |
diff --git a/include/asm-ia64/sn/sn_sal.h b/include/asm-ia64/sn/sn_sal.h index fea35b33d4e4..3f7564dc0aa9 100644 --- a/include/asm-ia64/sn/sn_sal.h +++ b/include/asm-ia64/sn/sn_sal.h | |||
@@ -47,6 +47,7 @@ | |||
47 | #define SN_SAL_CONSOLE_PUTB 0x02000028 | 47 | #define SN_SAL_CONSOLE_PUTB 0x02000028 |
48 | #define SN_SAL_CONSOLE_XMIT_CHARS 0x0200002a | 48 | #define SN_SAL_CONSOLE_XMIT_CHARS 0x0200002a |
49 | #define SN_SAL_CONSOLE_READC 0x0200002b | 49 | #define SN_SAL_CONSOLE_READC 0x0200002b |
50 | #define SN_SAL_SYSCTL_OP 0x02000030 | ||
50 | #define SN_SAL_SYSCTL_MODID_GET 0x02000031 | 51 | #define SN_SAL_SYSCTL_MODID_GET 0x02000031 |
51 | #define SN_SAL_SYSCTL_GET 0x02000032 | 52 | #define SN_SAL_SYSCTL_GET 0x02000032 |
52 | #define SN_SAL_SYSCTL_IOBRICK_MODULE_GET 0x02000033 | 53 | #define SN_SAL_SYSCTL_IOBRICK_MODULE_GET 0x02000033 |
@@ -67,7 +68,7 @@ | |||
67 | #define SN_SAL_IOIF_INTERRUPT 0x0200004a | 68 | #define SN_SAL_IOIF_INTERRUPT 0x0200004a |
68 | #define SN_SAL_HWPERF_OP 0x02000050 // lock | 69 | #define SN_SAL_HWPERF_OP 0x02000050 // lock |
69 | #define SN_SAL_IOIF_ERROR_INTERRUPT 0x02000051 | 70 | #define SN_SAL_IOIF_ERROR_INTERRUPT 0x02000051 |
70 | 71 | #define SN_SAL_IOIF_PCI_SAFE 0x02000052 | |
71 | #define SN_SAL_IOIF_SLOT_ENABLE 0x02000053 | 72 | #define SN_SAL_IOIF_SLOT_ENABLE 0x02000053 |
72 | #define SN_SAL_IOIF_SLOT_DISABLE 0x02000054 | 73 | #define SN_SAL_IOIF_SLOT_DISABLE 0x02000054 |
73 | #define SN_SAL_IOIF_GET_HUBDEV_INFO 0x02000055 | 74 | #define SN_SAL_IOIF_GET_HUBDEV_INFO 0x02000055 |
@@ -101,6 +102,13 @@ | |||
101 | #define SAL_INTR_FREE 2 | 102 | #define SAL_INTR_FREE 2 |
102 | 103 | ||
103 | /* | 104 | /* |
105 | * operations available on the generic SN_SAL_SYSCTL_OP | ||
106 | * runtime service | ||
107 | */ | ||
108 | #define SAL_SYSCTL_OP_IOBOARD 0x0001 /* retrieve board type */ | ||
109 | #define SAL_SYSCTL_OP_TIO_JLCK_RST 0x0002 /* issue TIO clock reset */ | ||
110 | |||
111 | /* | ||
104 | * IRouter (i.e. generalized system controller) operations | 112 | * IRouter (i.e. generalized system controller) operations |
105 | */ | 113 | */ |
106 | #define SAL_IROUTER_OPEN 0 /* open a subchannel */ | 114 | #define SAL_IROUTER_OPEN 0 /* open a subchannel */ |
@@ -198,26 +206,16 @@ ia64_sn_get_master_baseio_nasid(void) | |||
198 | return ret_stuff.v0; | 206 | return ret_stuff.v0; |
199 | } | 207 | } |
200 | 208 | ||
201 | static inline char * | 209 | static inline void * |
202 | ia64_sn_get_klconfig_addr(nasid_t nasid) | 210 | ia64_sn_get_klconfig_addr(nasid_t nasid) |
203 | { | 211 | { |
204 | struct ia64_sal_retval ret_stuff; | 212 | struct ia64_sal_retval ret_stuff; |
205 | int cnodeid; | ||
206 | 213 | ||
207 | cnodeid = nasid_to_cnodeid(nasid); | ||
208 | ret_stuff.status = 0; | 214 | ret_stuff.status = 0; |
209 | ret_stuff.v0 = 0; | 215 | ret_stuff.v0 = 0; |
210 | ret_stuff.v1 = 0; | 216 | ret_stuff.v1 = 0; |
211 | ret_stuff.v2 = 0; | 217 | ret_stuff.v2 = 0; |
212 | SAL_CALL(ret_stuff, SN_SAL_GET_KLCONFIG_ADDR, (u64)nasid, 0, 0, 0, 0, 0, 0); | 218 | SAL_CALL(ret_stuff, SN_SAL_GET_KLCONFIG_ADDR, (u64)nasid, 0, 0, 0, 0, 0, 0); |
213 | |||
214 | /* | ||
215 | * We should panic if a valid cnode nasid does not produce | ||
216 | * a klconfig address. | ||
217 | */ | ||
218 | if (ret_stuff.status != 0) { | ||
219 | panic("ia64_sn_get_klconfig_addr: Returned error %lx\n", ret_stuff.status); | ||
220 | } | ||
221 | return ret_stuff.v0 ? __va(ret_stuff.v0) : NULL; | 219 | return ret_stuff.v0 ? __va(ret_stuff.v0) : NULL; |
222 | } | 220 | } |
223 | 221 | ||
@@ -694,12 +692,10 @@ sn_change_memprotect(u64 paddr, u64 len, u64 perms, u64 *nasid_array) | |||
694 | unsigned long irq_flags; | 692 | unsigned long irq_flags; |
695 | 693 | ||
696 | cnodeid = nasid_to_cnodeid(get_node_number(paddr)); | 694 | cnodeid = nasid_to_cnodeid(get_node_number(paddr)); |
697 | // spin_lock(&NODEPDA(cnodeid)->bist_lock); | ||
698 | local_irq_save(irq_flags); | 695 | local_irq_save(irq_flags); |
699 | ia64_sal_oemcall_nolock(&ret_stuff, SN_SAL_MEMPROTECT, paddr, len, | 696 | ia64_sal_oemcall_nolock(&ret_stuff, SN_SAL_MEMPROTECT, paddr, len, |
700 | (u64)nasid_array, perms, 0, 0, 0); | 697 | (u64)nasid_array, perms, 0, 0, 0); |
701 | local_irq_restore(irq_flags); | 698 | local_irq_restore(irq_flags); |
702 | // spin_unlock(&NODEPDA(cnodeid)->bist_lock); | ||
703 | return ret_stuff.status; | 699 | return ret_stuff.status; |
704 | } | 700 | } |
705 | #define SN_MEMPROT_ACCESS_CLASS_0 0x14a080 | 701 | #define SN_MEMPROT_ACCESS_CLASS_0 0x14a080 |
@@ -873,6 +869,41 @@ ia64_sn_sysctl_event_init(nasid_t nasid) | |||
873 | return (int) rv.v0; | 869 | return (int) rv.v0; |
874 | } | 870 | } |
875 | 871 | ||
872 | /* | ||
873 | * Ask the system controller on the specified nasid to reset | ||
874 | * the CX corelet clock. Only valid on TIO nodes. | ||
875 | */ | ||
876 | static inline int | ||
877 | ia64_sn_sysctl_tio_clock_reset(nasid_t nasid) | ||
878 | { | ||
879 | struct ia64_sal_retval rv; | ||
880 | SAL_CALL_REENTRANT(rv, SN_SAL_SYSCTL_OP, SAL_SYSCTL_OP_TIO_JLCK_RST, | ||
881 | nasid, 0, 0, 0, 0, 0); | ||
882 | if (rv.status != 0) | ||
883 | return (int)rv.status; | ||
884 | if (rv.v0 != 0) | ||
885 | return (int)rv.v0; | ||
886 | |||
887 | return 0; | ||
888 | } | ||
889 | |||
890 | /* | ||
891 | * Get the associated ioboard type for a given nasid. | ||
892 | */ | ||
893 | static inline int | ||
894 | ia64_sn_sysctl_ioboard_get(nasid_t nasid) | ||
895 | { | ||
896 | struct ia64_sal_retval rv; | ||
897 | SAL_CALL_REENTRANT(rv, SN_SAL_SYSCTL_OP, SAL_SYSCTL_OP_IOBOARD, | ||
898 | nasid, 0, 0, 0, 0, 0); | ||
899 | if (rv.v0 != 0) | ||
900 | return (int)rv.v0; | ||
901 | if (rv.v1 != 0) | ||
902 | return (int)rv.v1; | ||
903 | |||
904 | return 0; | ||
905 | } | ||
906 | |||
876 | /** | 907 | /** |
877 | * ia64_sn_get_fit_compt - read a FIT entry from the PROM header | 908 | * ia64_sn_get_fit_compt - read a FIT entry from the PROM header |
878 | * @nasid: NASID of node to read | 909 | * @nasid: NASID of node to read |
diff --git a/include/asm-ia64/sn/tioca_provider.h b/include/asm-ia64/sn/tioca_provider.h index 5ccec608d325..b532ef6148ed 100644 --- a/include/asm-ia64/sn/tioca_provider.h +++ b/include/asm-ia64/sn/tioca_provider.h | |||
@@ -182,11 +182,11 @@ tioca_tlbflush(struct tioca_kernel *tioca_kernel) | |||
182 | * touch every CL aligned GART entry. | 182 | * touch every CL aligned GART entry. |
183 | */ | 183 | */ |
184 | 184 | ||
185 | ca_base->ca_control2 &= ~(CA_GART_MEM_PARAM); | 185 | __sn_clrq_relaxed(&ca_base->ca_control2, CA_GART_MEM_PARAM); |
186 | ca_base->ca_control2 |= CA_GART_FLUSH_TLB; | 186 | __sn_setq_relaxed(&ca_base->ca_control2, CA_GART_FLUSH_TLB); |
187 | ca_base->ca_control2 |= | 187 | __sn_setq_relaxed(&ca_base->ca_control2, |
188 | (0x2ull << CA_GART_MEM_PARAM_SHFT); | 188 | (0x2ull << CA_GART_MEM_PARAM_SHFT)); |
189 | tmp = ca_base->ca_control2; | 189 | tmp = __sn_readq_relaxed(&ca_base->ca_control2); |
190 | } | 190 | } |
191 | 191 | ||
192 | return; | 192 | return; |
@@ -196,8 +196,8 @@ tioca_tlbflush(struct tioca_kernel *tioca_kernel) | |||
196 | * Gart in uncached mode ... need an explicit flush. | 196 | * Gart in uncached mode ... need an explicit flush. |
197 | */ | 197 | */ |
198 | 198 | ||
199 | ca_base->ca_control2 |= CA_GART_FLUSH_TLB; | 199 | __sn_setq_relaxed(&ca_base->ca_control2, CA_GART_FLUSH_TLB); |
200 | tmp = ca_base->ca_control2; | 200 | tmp = __sn_readq_relaxed(&ca_base->ca_control2); |
201 | } | 201 | } |
202 | 202 | ||
203 | extern uint32_t tioca_gart_found; | 203 | extern uint32_t tioca_gart_found; |
diff --git a/include/asm-ia64/sn/tiocx.h b/include/asm-ia64/sn/tiocx.h index c5447a504509..5699e75e5024 100644 --- a/include/asm-ia64/sn/tiocx.h +++ b/include/asm-ia64/sn/tiocx.h | |||
@@ -19,6 +19,7 @@ struct cx_id_s { | |||
19 | 19 | ||
20 | struct cx_dev { | 20 | struct cx_dev { |
21 | struct cx_id_s cx_id; | 21 | struct cx_id_s cx_id; |
22 | int bt; /* board/blade type */ | ||
22 | void *soft; /* driver specific */ | 23 | void *soft; /* driver specific */ |
23 | struct hubdev_info *hubdev; | 24 | struct hubdev_info *hubdev; |
24 | struct device dev; | 25 | struct device dev; |
@@ -59,7 +60,7 @@ struct cx_drv { | |||
59 | extern struct sn_irq_info *tiocx_irq_alloc(nasid_t, int, int, nasid_t, int); | 60 | extern struct sn_irq_info *tiocx_irq_alloc(nasid_t, int, int, nasid_t, int); |
60 | extern void tiocx_irq_free(struct sn_irq_info *); | 61 | extern void tiocx_irq_free(struct sn_irq_info *); |
61 | extern int cx_device_unregister(struct cx_dev *); | 62 | extern int cx_device_unregister(struct cx_dev *); |
62 | extern int cx_device_register(nasid_t, int, int, struct hubdev_info *); | 63 | extern int cx_device_register(nasid_t, int, int, struct hubdev_info *, int); |
63 | extern int cx_driver_unregister(struct cx_drv *); | 64 | extern int cx_driver_unregister(struct cx_drv *); |
64 | extern int cx_driver_register(struct cx_drv *); | 65 | extern int cx_driver_register(struct cx_drv *); |
65 | extern uint64_t tiocx_dma_addr(uint64_t addr); | 66 | extern uint64_t tiocx_dma_addr(uint64_t addr); |
diff --git a/include/asm-ia64/sn/xp.h b/include/asm-ia64/sn/xp.h index 1df1c9f61a65..49faf8f26430 100644 --- a/include/asm-ia64/sn/xp.h +++ b/include/asm-ia64/sn/xp.h | |||
@@ -49,7 +49,7 @@ | |||
49 | * C-brick nasids, thus the need for bitmaps which don't account for | 49 | * C-brick nasids, thus the need for bitmaps which don't account for |
50 | * odd-numbered (non C-brick) nasids. | 50 | * odd-numbered (non C-brick) nasids. |
51 | */ | 51 | */ |
52 | #define XP_MAX_PHYSNODE_ID (MAX_PHYSNODE_ID / 2) | 52 | #define XP_MAX_PHYSNODE_ID (MAX_NUMALINK_NODES / 2) |
53 | #define XP_NASID_MASK_BYTES ((XP_MAX_PHYSNODE_ID + 7) / 8) | 53 | #define XP_NASID_MASK_BYTES ((XP_MAX_PHYSNODE_ID + 7) / 8) |
54 | #define XP_NASID_MASK_WORDS ((XP_MAX_PHYSNODE_ID + 63) / 64) | 54 | #define XP_NASID_MASK_WORDS ((XP_MAX_PHYSNODE_ID + 63) / 64) |
55 | 55 | ||
@@ -217,7 +217,17 @@ enum xpc_retval { | |||
217 | xpcInvalidPartid, /* 42: invalid partition ID */ | 217 | xpcInvalidPartid, /* 42: invalid partition ID */ |
218 | xpcLocalPartid, /* 43: local partition ID */ | 218 | xpcLocalPartid, /* 43: local partition ID */ |
219 | 219 | ||
220 | xpcUnknownReason /* 44: unknown reason -- must be last in list */ | 220 | xpcOtherGoingDown, /* 44: other side going down, reason unknown */ |
221 | xpcSystemGoingDown, /* 45: system is going down, reason unknown */ | ||
222 | xpcSystemHalt, /* 46: system is being halted */ | ||
223 | xpcSystemReboot, /* 47: system is being rebooted */ | ||
224 | xpcSystemPoweroff, /* 48: system is being powered off */ | ||
225 | |||
226 | xpcDisconnecting, /* 49: channel disconnecting (closing) */ | ||
227 | |||
228 | xpcOpenCloseError, /* 50: channel open/close protocol error */ | ||
229 | |||
230 | xpcUnknownReason /* 51: unknown reason -- must be last in list */ | ||
221 | }; | 231 | }; |
222 | 232 | ||
223 | 233 | ||
@@ -342,7 +352,7 @@ typedef void (*xpc_notify_func)(enum xpc_retval reason, partid_t partid, | |||
342 | * | 352 | * |
343 | * The 'func' field points to the function to call when aynchronous | 353 | * The 'func' field points to the function to call when aynchronous |
344 | * notification is required for such events as: a connection established/lost, | 354 | * notification is required for such events as: a connection established/lost, |
345 | * or an incomming message received, or an error condition encountered. A | 355 | * or an incoming message received, or an error condition encountered. A |
346 | * non-NULL 'func' field indicates that there is an active registration for | 356 | * non-NULL 'func' field indicates that there is an active registration for |
347 | * the channel. | 357 | * the channel. |
348 | */ | 358 | */ |
diff --git a/include/asm-ia64/sparsemem.h b/include/asm-ia64/sparsemem.h new file mode 100644 index 000000000000..67a7c40ec27f --- /dev/null +++ b/include/asm-ia64/sparsemem.h | |||
@@ -0,0 +1,20 @@ | |||
1 | #ifndef _ASM_IA64_SPARSEMEM_H | ||
2 | #define _ASM_IA64_SPARSEMEM_H | ||
3 | |||
4 | #ifdef CONFIG_SPARSEMEM | ||
5 | /* | ||
6 | * SECTION_SIZE_BITS 2^N: how big each section will be | ||
7 | * MAX_PHYSMEM_BITS 2^N: how much memory we can have in that space | ||
8 | */ | ||
9 | |||
10 | #define SECTION_SIZE_BITS (30) | ||
11 | #define MAX_PHYSMEM_BITS (50) | ||
12 | #ifdef CONFIG_FORCE_MAX_ZONEORDER | ||
13 | #if ((CONFIG_FORCE_MAX_ZONEORDER - 1 + PAGE_SHIFT) > SECTION_SIZE_BITS) | ||
14 | #undef SECTION_SIZE_BITS | ||
15 | #define SECTION_SIZE_BITS (CONFIG_FORCE_MAX_ZONEORDER - 1 + PAGE_SHIFT) | ||
16 | #endif | ||
17 | #endif | ||
18 | |||
19 | #endif /* CONFIG_SPARSEMEM */ | ||
20 | #endif /* _ASM_IA64_SPARSEMEM_H */ | ||
diff --git a/include/asm-ia64/tlb.h b/include/asm-ia64/tlb.h index 3a9a6d1be75c..834370b9dea1 100644 --- a/include/asm-ia64/tlb.h +++ b/include/asm-ia64/tlb.h | |||
@@ -60,7 +60,6 @@ struct mmu_gather { | |||
60 | unsigned int nr; /* == ~0U => fast mode */ | 60 | unsigned int nr; /* == ~0U => fast mode */ |
61 | unsigned char fullmm; /* non-zero means full mm flush */ | 61 | unsigned char fullmm; /* non-zero means full mm flush */ |
62 | unsigned char need_flush; /* really unmapped some PTEs? */ | 62 | unsigned char need_flush; /* really unmapped some PTEs? */ |
63 | unsigned long freed; /* number of pages freed */ | ||
64 | unsigned long start_addr; | 63 | unsigned long start_addr; |
65 | unsigned long end_addr; | 64 | unsigned long end_addr; |
66 | struct page *pages[FREE_PTE_NR]; | 65 | struct page *pages[FREE_PTE_NR]; |
@@ -129,7 +128,7 @@ ia64_tlb_flush_mmu (struct mmu_gather *tlb, unsigned long start, unsigned long e | |||
129 | static inline struct mmu_gather * | 128 | static inline struct mmu_gather * |
130 | tlb_gather_mmu (struct mm_struct *mm, unsigned int full_mm_flush) | 129 | tlb_gather_mmu (struct mm_struct *mm, unsigned int full_mm_flush) |
131 | { | 130 | { |
132 | struct mmu_gather *tlb = &__get_cpu_var(mmu_gathers); | 131 | struct mmu_gather *tlb = &get_cpu_var(mmu_gathers); |
133 | 132 | ||
134 | tlb->mm = mm; | 133 | tlb->mm = mm; |
135 | /* | 134 | /* |
@@ -147,25 +146,17 @@ tlb_gather_mmu (struct mm_struct *mm, unsigned int full_mm_flush) | |||
147 | */ | 146 | */ |
148 | tlb->nr = (num_online_cpus() == 1) ? ~0U : 0; | 147 | tlb->nr = (num_online_cpus() == 1) ? ~0U : 0; |
149 | tlb->fullmm = full_mm_flush; | 148 | tlb->fullmm = full_mm_flush; |
150 | tlb->freed = 0; | ||
151 | tlb->start_addr = ~0UL; | 149 | tlb->start_addr = ~0UL; |
152 | return tlb; | 150 | return tlb; |
153 | } | 151 | } |
154 | 152 | ||
155 | /* | 153 | /* |
156 | * Called at the end of the shootdown operation to free up any resources that were | 154 | * Called at the end of the shootdown operation to free up any resources that were |
157 | * collected. The page table lock is still held at this point. | 155 | * collected. |
158 | */ | 156 | */ |
159 | static inline void | 157 | static inline void |
160 | tlb_finish_mmu (struct mmu_gather *tlb, unsigned long start, unsigned long end) | 158 | tlb_finish_mmu (struct mmu_gather *tlb, unsigned long start, unsigned long end) |
161 | { | 159 | { |
162 | unsigned long freed = tlb->freed; | ||
163 | struct mm_struct *mm = tlb->mm; | ||
164 | unsigned long rss = get_mm_counter(mm, rss); | ||
165 | |||
166 | if (rss < freed) | ||
167 | freed = rss; | ||
168 | add_mm_counter(mm, rss, -freed); | ||
169 | /* | 160 | /* |
170 | * Note: tlb->nr may be 0 at this point, so we can't rely on tlb->start_addr and | 161 | * Note: tlb->nr may be 0 at this point, so we can't rely on tlb->start_addr and |
171 | * tlb->end_addr. | 162 | * tlb->end_addr. |
@@ -174,12 +165,8 @@ tlb_finish_mmu (struct mmu_gather *tlb, unsigned long start, unsigned long end) | |||
174 | 165 | ||
175 | /* keep the page table cache within bounds */ | 166 | /* keep the page table cache within bounds */ |
176 | check_pgt_cache(); | 167 | check_pgt_cache(); |
177 | } | ||
178 | 168 | ||
179 | static inline unsigned int | 169 | put_cpu_var(mmu_gathers); |
180 | tlb_is_full_mm(struct mmu_gather *tlb) | ||
181 | { | ||
182 | return tlb->fullmm; | ||
183 | } | 170 | } |
184 | 171 | ||
185 | /* | 172 | /* |
diff --git a/include/asm-ia64/unistd.h b/include/asm-ia64/unistd.h index 3a0c69524656..6d96a67439be 100644 --- a/include/asm-ia64/unistd.h +++ b/include/asm-ia64/unistd.h | |||
@@ -383,8 +383,6 @@ struct sigaction; | |||
383 | long sys_execve(char __user *filename, char __user * __user *argv, | 383 | long sys_execve(char __user *filename, char __user * __user *argv, |
384 | char __user * __user *envp, struct pt_regs *regs); | 384 | char __user * __user *envp, struct pt_regs *regs); |
385 | asmlinkage long sys_pipe(void); | 385 | asmlinkage long sys_pipe(void); |
386 | asmlinkage long sys_ptrace(long request, pid_t pid, | ||
387 | unsigned long addr, unsigned long data); | ||
388 | asmlinkage long sys_rt_sigaction(int sig, | 386 | asmlinkage long sys_rt_sigaction(int sig, |
389 | const struct sigaction __user *act, | 387 | const struct sigaction __user *act, |
390 | struct sigaction __user *oact, | 388 | struct sigaction __user *oact, |