diff options
Diffstat (limited to 'arch')
171 files changed, 1034 insertions, 3707 deletions
diff --git a/arch/alpha/Kconfig b/arch/alpha/Kconfig index bd7261ea8f94..75291fdd379f 100644 --- a/arch/alpha/Kconfig +++ b/arch/alpha/Kconfig | |||
@@ -10,6 +10,7 @@ config ALPHA | |||
10 | select HAVE_OPROFILE | 10 | select HAVE_OPROFILE |
11 | select HAVE_SYSCALL_WRAPPERS | 11 | select HAVE_SYSCALL_WRAPPERS |
12 | select HAVE_PERF_EVENTS | 12 | select HAVE_PERF_EVENTS |
13 | select HAVE_DMA_ATTRS | ||
13 | help | 14 | help |
14 | The Alpha is a 64-bit general-purpose processor designed and | 15 | The Alpha is a 64-bit general-purpose processor designed and |
15 | marketed by the Digital Equipment Corporation of blessed memory, | 16 | marketed by the Digital Equipment Corporation of blessed memory, |
@@ -58,6 +59,9 @@ config ZONE_DMA | |||
58 | bool | 59 | bool |
59 | default y | 60 | default y |
60 | 61 | ||
62 | config NEED_DMA_MAP_STATE | ||
63 | def_bool y | ||
64 | |||
61 | config GENERIC_ISA_DMA | 65 | config GENERIC_ISA_DMA |
62 | bool | 66 | bool |
63 | default y | 67 | default y |
diff --git a/arch/alpha/include/asm/dma-mapping.h b/arch/alpha/include/asm/dma-mapping.h index 04eb5681448c..1bce8169733c 100644 --- a/arch/alpha/include/asm/dma-mapping.h +++ b/arch/alpha/include/asm/dma-mapping.h | |||
@@ -1,71 +1,49 @@ | |||
1 | #ifndef _ALPHA_DMA_MAPPING_H | 1 | #ifndef _ALPHA_DMA_MAPPING_H |
2 | #define _ALPHA_DMA_MAPPING_H | 2 | #define _ALPHA_DMA_MAPPING_H |
3 | 3 | ||
4 | #include <linux/dma-attrs.h> | ||
4 | 5 | ||
5 | #ifdef CONFIG_PCI | 6 | extern struct dma_map_ops *dma_ops; |
6 | 7 | ||
7 | #include <linux/pci.h> | 8 | static inline struct dma_map_ops *get_dma_ops(struct device *dev) |
9 | { | ||
10 | return dma_ops; | ||
11 | } | ||
8 | 12 | ||
9 | #define dma_map_single(dev, va, size, dir) \ | 13 | #include <asm-generic/dma-mapping-common.h> |
10 | pci_map_single(alpha_gendev_to_pci(dev), va, size, dir) | ||
11 | #define dma_unmap_single(dev, addr, size, dir) \ | ||
12 | pci_unmap_single(alpha_gendev_to_pci(dev), addr, size, dir) | ||
13 | #define dma_alloc_coherent(dev, size, addr, gfp) \ | ||
14 | __pci_alloc_consistent(alpha_gendev_to_pci(dev), size, addr, gfp) | ||
15 | #define dma_free_coherent(dev, size, va, addr) \ | ||
16 | pci_free_consistent(alpha_gendev_to_pci(dev), size, va, addr) | ||
17 | #define dma_map_page(dev, page, off, size, dir) \ | ||
18 | pci_map_page(alpha_gendev_to_pci(dev), page, off, size, dir) | ||
19 | #define dma_unmap_page(dev, addr, size, dir) \ | ||
20 | pci_unmap_page(alpha_gendev_to_pci(dev), addr, size, dir) | ||
21 | #define dma_map_sg(dev, sg, nents, dir) \ | ||
22 | pci_map_sg(alpha_gendev_to_pci(dev), sg, nents, dir) | ||
23 | #define dma_unmap_sg(dev, sg, nents, dir) \ | ||
24 | pci_unmap_sg(alpha_gendev_to_pci(dev), sg, nents, dir) | ||
25 | #define dma_supported(dev, mask) \ | ||
26 | pci_dma_supported(alpha_gendev_to_pci(dev), mask) | ||
27 | #define dma_mapping_error(dev, addr) \ | ||
28 | pci_dma_mapping_error(alpha_gendev_to_pci(dev), addr) | ||
29 | 14 | ||
30 | #else /* no PCI - no IOMMU. */ | 15 | static inline void *dma_alloc_coherent(struct device *dev, size_t size, |
16 | dma_addr_t *dma_handle, gfp_t gfp) | ||
17 | { | ||
18 | return get_dma_ops(dev)->alloc_coherent(dev, size, dma_handle, gfp); | ||
19 | } | ||
31 | 20 | ||
32 | #include <asm/io.h> /* for virt_to_phys() */ | 21 | static inline void dma_free_coherent(struct device *dev, size_t size, |
22 | void *vaddr, dma_addr_t dma_handle) | ||
23 | { | ||
24 | get_dma_ops(dev)->free_coherent(dev, size, vaddr, dma_handle); | ||
25 | } | ||
33 | 26 | ||
34 | struct scatterlist; | 27 | static inline int dma_mapping_error(struct device *dev, dma_addr_t dma_addr) |
35 | void *dma_alloc_coherent(struct device *dev, size_t size, | 28 | { |
36 | dma_addr_t *dma_handle, gfp_t gfp); | 29 | return get_dma_ops(dev)->mapping_error(dev, dma_addr); |
37 | int dma_map_sg(struct device *dev, struct scatterlist *sg, int nents, | 30 | } |
38 | enum dma_data_direction direction); | ||
39 | 31 | ||
40 | #define dma_free_coherent(dev, size, va, addr) \ | 32 | static inline int dma_supported(struct device *dev, u64 mask) |
41 | free_pages((unsigned long)va, get_order(size)) | 33 | { |
42 | #define dma_supported(dev, mask) (mask < 0x00ffffffUL ? 0 : 1) | 34 | return get_dma_ops(dev)->dma_supported(dev, mask); |
43 | #define dma_map_single(dev, va, size, dir) virt_to_phys(va) | 35 | } |
44 | #define dma_map_page(dev, page, off, size, dir) (page_to_pa(page) + off) | ||
45 | 36 | ||
46 | #define dma_unmap_single(dev, addr, size, dir) ((void)0) | 37 | static inline int dma_set_mask(struct device *dev, u64 mask) |
47 | #define dma_unmap_page(dev, addr, size, dir) ((void)0) | 38 | { |
48 | #define dma_unmap_sg(dev, sg, nents, dir) ((void)0) | 39 | return get_dma_ops(dev)->set_dma_mask(dev, mask); |
49 | 40 | } | |
50 | #define dma_mapping_error(dev, addr) (0) | ||
51 | |||
52 | #endif /* !CONFIG_PCI */ | ||
53 | 41 | ||
54 | #define dma_alloc_noncoherent(d, s, h, f) dma_alloc_coherent(d, s, h, f) | 42 | #define dma_alloc_noncoherent(d, s, h, f) dma_alloc_coherent(d, s, h, f) |
55 | #define dma_free_noncoherent(d, s, v, h) dma_free_coherent(d, s, v, h) | 43 | #define dma_free_noncoherent(d, s, v, h) dma_free_coherent(d, s, v, h) |
56 | #define dma_is_consistent(d, h) (1) | 44 | #define dma_is_consistent(d, h) (1) |
57 | 45 | ||
58 | int dma_set_mask(struct device *dev, u64 mask); | ||
59 | |||
60 | #define dma_sync_single_for_cpu(dev, addr, size, dir) ((void)0) | ||
61 | #define dma_sync_single_for_device(dev, addr, size, dir) ((void)0) | ||
62 | #define dma_sync_single_range(dev, addr, off, size, dir) ((void)0) | ||
63 | #define dma_sync_sg_for_cpu(dev, sg, nents, dir) ((void)0) | ||
64 | #define dma_sync_sg_for_device(dev, sg, nents, dir) ((void)0) | ||
65 | #define dma_cache_sync(dev, va, size, dir) ((void)0) | 46 | #define dma_cache_sync(dev, va, size, dir) ((void)0) |
66 | #define dma_sync_single_range_for_cpu(dev, addr, offset, size, dir) ((void)0) | ||
67 | #define dma_sync_single_range_for_device(dev, addr, offset, size, dir) ((void)0) | ||
68 | |||
69 | #define dma_get_cache_alignment() L1_CACHE_BYTES | 47 | #define dma_get_cache_alignment() L1_CACHE_BYTES |
70 | 48 | ||
71 | #endif /* _ALPHA_DMA_MAPPING_H */ | 49 | #endif /* _ALPHA_DMA_MAPPING_H */ |
diff --git a/arch/alpha/include/asm/pci.h b/arch/alpha/include/asm/pci.h index dd8dcabf160f..28d0497fd3c7 100644 --- a/arch/alpha/include/asm/pci.h +++ b/arch/alpha/include/asm/pci.h | |||
@@ -70,142 +70,11 @@ extern inline void pcibios_penalize_isa_irq(int irq, int active) | |||
70 | decisions. */ | 70 | decisions. */ |
71 | #define PCI_DMA_BUS_IS_PHYS 0 | 71 | #define PCI_DMA_BUS_IS_PHYS 0 |
72 | 72 | ||
73 | /* Allocate and map kernel buffer using consistent mode DMA for PCI | 73 | #ifdef CONFIG_PCI |
74 | device. Returns non-NULL cpu-view pointer to the buffer if | ||
75 | successful and sets *DMA_ADDRP to the pci side dma address as well, | ||
76 | else DMA_ADDRP is undefined. */ | ||
77 | |||
78 | extern void *__pci_alloc_consistent(struct pci_dev *, size_t, | ||
79 | dma_addr_t *, gfp_t); | ||
80 | static inline void * | ||
81 | pci_alloc_consistent(struct pci_dev *dev, size_t size, dma_addr_t *dma) | ||
82 | { | ||
83 | return __pci_alloc_consistent(dev, size, dma, GFP_ATOMIC); | ||
84 | } | ||
85 | |||
86 | /* Free and unmap a consistent DMA buffer. CPU_ADDR and DMA_ADDR must | ||
87 | be values that were returned from pci_alloc_consistent. SIZE must | ||
88 | be the same as what as passed into pci_alloc_consistent. | ||
89 | References to the memory and mappings associated with CPU_ADDR or | ||
90 | DMA_ADDR past this call are illegal. */ | ||
91 | |||
92 | extern void pci_free_consistent(struct pci_dev *, size_t, void *, dma_addr_t); | ||
93 | |||
94 | /* Map a single buffer of the indicate size for PCI DMA in streaming mode. | ||
95 | The 32-bit PCI bus mastering address to use is returned. Once the device | ||
96 | is given the dma address, the device owns this memory until either | ||
97 | pci_unmap_single or pci_dma_sync_single_for_cpu is performed. */ | ||
98 | |||
99 | extern dma_addr_t pci_map_single(struct pci_dev *, void *, size_t, int); | ||
100 | |||
101 | /* Likewise, but for a page instead of an address. */ | ||
102 | extern dma_addr_t pci_map_page(struct pci_dev *, struct page *, | ||
103 | unsigned long, size_t, int); | ||
104 | |||
105 | /* Test for pci_map_single or pci_map_page having generated an error. */ | ||
106 | |||
107 | static inline int | ||
108 | pci_dma_mapping_error(struct pci_dev *pdev, dma_addr_t dma_addr) | ||
109 | { | ||
110 | return dma_addr == 0; | ||
111 | } | ||
112 | |||
113 | /* Unmap a single streaming mode DMA translation. The DMA_ADDR and | ||
114 | SIZE must match what was provided for in a previous pci_map_single | ||
115 | call. All other usages are undefined. After this call, reads by | ||
116 | the cpu to the buffer are guaranteed to see whatever the device | ||
117 | wrote there. */ | ||
118 | |||
119 | extern void pci_unmap_single(struct pci_dev *, dma_addr_t, size_t, int); | ||
120 | extern void pci_unmap_page(struct pci_dev *, dma_addr_t, size_t, int); | ||
121 | |||
122 | /* pci_unmap_{single,page} is not a nop, thus... */ | ||
123 | #define DECLARE_PCI_UNMAP_ADDR(ADDR_NAME) \ | ||
124 | dma_addr_t ADDR_NAME; | ||
125 | #define DECLARE_PCI_UNMAP_LEN(LEN_NAME) \ | ||
126 | __u32 LEN_NAME; | ||
127 | #define pci_unmap_addr(PTR, ADDR_NAME) \ | ||
128 | ((PTR)->ADDR_NAME) | ||
129 | #define pci_unmap_addr_set(PTR, ADDR_NAME, VAL) \ | ||
130 | (((PTR)->ADDR_NAME) = (VAL)) | ||
131 | #define pci_unmap_len(PTR, LEN_NAME) \ | ||
132 | ((PTR)->LEN_NAME) | ||
133 | #define pci_unmap_len_set(PTR, LEN_NAME, VAL) \ | ||
134 | (((PTR)->LEN_NAME) = (VAL)) | ||
135 | |||
136 | /* Map a set of buffers described by scatterlist in streaming mode for | ||
137 | PCI DMA. This is the scatter-gather version of the above | ||
138 | pci_map_single interface. Here the scatter gather list elements | ||
139 | are each tagged with the appropriate PCI dma address and length. | ||
140 | They are obtained via sg_dma_{address,length}(SG). | ||
141 | |||
142 | NOTE: An implementation may be able to use a smaller number of DMA | ||
143 | address/length pairs than there are SG table elements. (for | ||
144 | example via virtual mapping capabilities) The routine returns the | ||
145 | number of addr/length pairs actually used, at most nents. | ||
146 | |||
147 | Device ownership issues as mentioned above for pci_map_single are | ||
148 | the same here. */ | ||
149 | |||
150 | extern int pci_map_sg(struct pci_dev *, struct scatterlist *, int, int); | ||
151 | |||
152 | /* Unmap a set of streaming mode DMA translations. Again, cpu read | ||
153 | rules concerning calls here are the same as for pci_unmap_single() | ||
154 | above. */ | ||
155 | |||
156 | extern void pci_unmap_sg(struct pci_dev *, struct scatterlist *, int, int); | ||
157 | |||
158 | /* Make physical memory consistent for a single streaming mode DMA | ||
159 | translation after a transfer and device currently has ownership | ||
160 | of the buffer. | ||
161 | |||
162 | If you perform a pci_map_single() but wish to interrogate the | ||
163 | buffer using the cpu, yet do not wish to teardown the PCI dma | ||
164 | mapping, you must call this function before doing so. At the next | ||
165 | point you give the PCI dma address back to the card, you must first | ||
166 | perform a pci_dma_sync_for_device, and then the device again owns | ||
167 | the buffer. */ | ||
168 | |||
169 | static inline void | ||
170 | pci_dma_sync_single_for_cpu(struct pci_dev *dev, dma_addr_t dma_addr, | ||
171 | long size, int direction) | ||
172 | { | ||
173 | /* Nothing to do. */ | ||
174 | } | ||
175 | |||
176 | static inline void | ||
177 | pci_dma_sync_single_for_device(struct pci_dev *dev, dma_addr_t dma_addr, | ||
178 | size_t size, int direction) | ||
179 | { | ||
180 | /* Nothing to do. */ | ||
181 | } | ||
182 | |||
183 | /* Make physical memory consistent for a set of streaming mode DMA | ||
184 | translations after a transfer. The same as pci_dma_sync_single_* | ||
185 | but for a scatter-gather list, same rules and usage. */ | ||
186 | |||
187 | static inline void | ||
188 | pci_dma_sync_sg_for_cpu(struct pci_dev *dev, struct scatterlist *sg, | ||
189 | int nents, int direction) | ||
190 | { | ||
191 | /* Nothing to do. */ | ||
192 | } | ||
193 | |||
194 | static inline void | ||
195 | pci_dma_sync_sg_for_device(struct pci_dev *dev, struct scatterlist *sg, | ||
196 | int nents, int direction) | ||
197 | { | ||
198 | /* Nothing to do. */ | ||
199 | } | ||
200 | |||
201 | /* Return whether the given PCI device DMA address mask can | ||
202 | be supported properly. For example, if your device can | ||
203 | only drive the low 24-bits during PCI bus mastering, then | ||
204 | you would pass 0x00ffffff as the mask to this function. */ | ||
205 | 74 | ||
206 | extern int pci_dma_supported(struct pci_dev *hwdev, u64 mask); | 75 | /* implement the pci_ DMA API in terms of the generic device dma_ one */ |
76 | #include <asm-generic/pci-dma-compat.h> | ||
207 | 77 | ||
208 | #ifdef CONFIG_PCI | ||
209 | static inline void pci_dma_burst_advice(struct pci_dev *pdev, | 78 | static inline void pci_dma_burst_advice(struct pci_dev *pdev, |
210 | enum pci_dma_burst_strategy *strat, | 79 | enum pci_dma_burst_strategy *strat, |
211 | unsigned long *strategy_parameter) | 80 | unsigned long *strategy_parameter) |
@@ -244,8 +113,6 @@ static inline int pci_proc_domain(struct pci_bus *bus) | |||
244 | return hose->need_domain_info; | 113 | return hose->need_domain_info; |
245 | } | 114 | } |
246 | 115 | ||
247 | struct pci_dev *alpha_gendev_to_pci(struct device *dev); | ||
248 | |||
249 | #endif /* __KERNEL__ */ | 116 | #endif /* __KERNEL__ */ |
250 | 117 | ||
251 | /* Values for the `which' argument to sys_pciconfig_iobase. */ | 118 | /* Values for the `which' argument to sys_pciconfig_iobase. */ |
diff --git a/arch/alpha/include/asm/ptrace.h b/arch/alpha/include/asm/ptrace.h index 32c7a5cddd59..65cf3e28e2f4 100644 --- a/arch/alpha/include/asm/ptrace.h +++ b/arch/alpha/include/asm/ptrace.h | |||
@@ -68,6 +68,7 @@ struct switch_stack { | |||
68 | 68 | ||
69 | #ifdef __KERNEL__ | 69 | #ifdef __KERNEL__ |
70 | 70 | ||
71 | #define arch_has_single_step() (1) | ||
71 | #define user_mode(regs) (((regs)->ps & 8) != 0) | 72 | #define user_mode(regs) (((regs)->ps & 8) != 0) |
72 | #define instruction_pointer(regs) ((regs)->pc) | 73 | #define instruction_pointer(regs) ((regs)->pc) |
73 | #define profile_pc(regs) instruction_pointer(regs) | 74 | #define profile_pc(regs) instruction_pointer(regs) |
diff --git a/arch/alpha/kernel/pci-noop.c b/arch/alpha/kernel/pci-noop.c index c19a376520f4..823a540f9f5b 100644 --- a/arch/alpha/kernel/pci-noop.c +++ b/arch/alpha/kernel/pci-noop.c | |||
@@ -106,58 +106,8 @@ sys_pciconfig_write(unsigned long bus, unsigned long dfn, | |||
106 | return -ENODEV; | 106 | return -ENODEV; |
107 | } | 107 | } |
108 | 108 | ||
109 | /* Stubs for the routines in pci_iommu.c: */ | 109 | static void *alpha_noop_alloc_coherent(struct device *dev, size_t size, |
110 | 110 | dma_addr_t *dma_handle, gfp_t gfp) | |
111 | void * | ||
112 | __pci_alloc_consistent(struct pci_dev *pdev, size_t size, | ||
113 | dma_addr_t *dma_addrp, gfp_t gfp) | ||
114 | { | ||
115 | return NULL; | ||
116 | } | ||
117 | |||
118 | void | ||
119 | pci_free_consistent(struct pci_dev *pdev, size_t size, void *cpu_addr, | ||
120 | dma_addr_t dma_addr) | ||
121 | { | ||
122 | } | ||
123 | |||
124 | dma_addr_t | ||
125 | pci_map_single(struct pci_dev *pdev, void *cpu_addr, size_t size, | ||
126 | int direction) | ||
127 | { | ||
128 | return (dma_addr_t) 0; | ||
129 | } | ||
130 | |||
131 | void | ||
132 | pci_unmap_single(struct pci_dev *pdev, dma_addr_t dma_addr, size_t size, | ||
133 | int direction) | ||
134 | { | ||
135 | } | ||
136 | |||
137 | int | ||
138 | pci_map_sg(struct pci_dev *pdev, struct scatterlist *sg, int nents, | ||
139 | int direction) | ||
140 | { | ||
141 | return 0; | ||
142 | } | ||
143 | |||
144 | void | ||
145 | pci_unmap_sg(struct pci_dev *pdev, struct scatterlist *sg, int nents, | ||
146 | int direction) | ||
147 | { | ||
148 | } | ||
149 | |||
150 | int | ||
151 | pci_dma_supported(struct pci_dev *hwdev, dma_addr_t mask) | ||
152 | { | ||
153 | return 0; | ||
154 | } | ||
155 | |||
156 | /* Generic DMA mapping functions: */ | ||
157 | |||
158 | void * | ||
159 | dma_alloc_coherent(struct device *dev, size_t size, | ||
160 | dma_addr_t *dma_handle, gfp_t gfp) | ||
161 | { | 111 | { |
162 | void *ret; | 112 | void *ret; |
163 | 113 | ||
@@ -171,11 +121,22 @@ dma_alloc_coherent(struct device *dev, size_t size, | |||
171 | return ret; | 121 | return ret; |
172 | } | 122 | } |
173 | 123 | ||
174 | EXPORT_SYMBOL(dma_alloc_coherent); | 124 | static void alpha_noop_free_coherent(struct device *dev, size_t size, |
125 | void *cpu_addr, dma_addr_t dma_addr) | ||
126 | { | ||
127 | free_pages((unsigned long)cpu_addr, get_order(size)); | ||
128 | } | ||
129 | |||
130 | static dma_addr_t alpha_noop_map_page(struct device *dev, struct page *page, | ||
131 | unsigned long offset, size_t size, | ||
132 | enum dma_data_direction dir, | ||
133 | struct dma_attrs *attrs) | ||
134 | { | ||
135 | return page_to_pa(page) + offset; | ||
136 | } | ||
175 | 137 | ||
176 | int | 138 | static int alpha_noop_map_sg(struct device *dev, struct scatterlist *sgl, int nents, |
177 | dma_map_sg(struct device *dev, struct scatterlist *sgl, int nents, | 139 | enum dma_data_direction dir, struct dma_attrs *attrs) |
178 | enum dma_data_direction direction) | ||
179 | { | 140 | { |
180 | int i; | 141 | int i; |
181 | struct scatterlist *sg; | 142 | struct scatterlist *sg; |
@@ -192,19 +153,37 @@ dma_map_sg(struct device *dev, struct scatterlist *sgl, int nents, | |||
192 | return nents; | 153 | return nents; |
193 | } | 154 | } |
194 | 155 | ||
195 | EXPORT_SYMBOL(dma_map_sg); | 156 | static int alpha_noop_mapping_error(struct device *dev, dma_addr_t dma_addr) |
157 | { | ||
158 | return 0; | ||
159 | } | ||
160 | |||
161 | static int alpha_noop_supported(struct device *dev, u64 mask) | ||
162 | { | ||
163 | return mask < 0x00ffffffUL ? 0 : 1; | ||
164 | } | ||
196 | 165 | ||
197 | int | 166 | static int alpha_noop_set_mask(struct device *dev, u64 mask) |
198 | dma_set_mask(struct device *dev, u64 mask) | ||
199 | { | 167 | { |
200 | if (!dev->dma_mask || !dma_supported(dev, mask)) | 168 | if (!dev->dma_mask || !dma_supported(dev, mask)) |
201 | return -EIO; | 169 | return -EIO; |
202 | 170 | ||
203 | *dev->dma_mask = mask; | 171 | *dev->dma_mask = mask; |
204 | |||
205 | return 0; | 172 | return 0; |
206 | } | 173 | } |
207 | EXPORT_SYMBOL(dma_set_mask); | 174 | |
175 | struct dma_map_ops alpha_noop_ops = { | ||
176 | .alloc_coherent = alpha_noop_alloc_coherent, | ||
177 | .free_coherent = alpha_noop_free_coherent, | ||
178 | .map_page = alpha_noop_map_page, | ||
179 | .map_sg = alpha_noop_map_sg, | ||
180 | .mapping_error = alpha_noop_mapping_error, | ||
181 | .dma_supported = alpha_noop_supported, | ||
182 | .set_dma_mask = alpha_noop_set_mask, | ||
183 | }; | ||
184 | |||
185 | struct dma_map_ops *dma_ops = &alpha_noop_ops; | ||
186 | EXPORT_SYMBOL(dma_ops); | ||
208 | 187 | ||
209 | void __iomem *pci_iomap(struct pci_dev *dev, int bar, unsigned long maxlen) | 188 | void __iomem *pci_iomap(struct pci_dev *dev, int bar, unsigned long maxlen) |
210 | { | 189 | { |
diff --git a/arch/alpha/kernel/pci_iommu.c b/arch/alpha/kernel/pci_iommu.c index 8449504f5e0b..ce9e54c887fa 100644 --- a/arch/alpha/kernel/pci_iommu.c +++ b/arch/alpha/kernel/pci_iommu.c | |||
@@ -216,10 +216,30 @@ iommu_arena_free(struct pci_iommu_arena *arena, long ofs, long n) | |||
216 | for (i = 0; i < n; ++i) | 216 | for (i = 0; i < n; ++i) |
217 | p[i] = 0; | 217 | p[i] = 0; |
218 | } | 218 | } |
219 | 219 | ||
220 | /* True if the machine supports DAC addressing, and DEV can | 220 | /* |
221 | make use of it given MASK. */ | 221 | * True if the machine supports DAC addressing, and DEV can |
222 | static int pci_dac_dma_supported(struct pci_dev *hwdev, u64 mask); | 222 | * make use of it given MASK. |
223 | */ | ||
224 | static int pci_dac_dma_supported(struct pci_dev *dev, u64 mask) | ||
225 | { | ||
226 | dma64_addr_t dac_offset = alpha_mv.pci_dac_offset; | ||
227 | int ok = 1; | ||
228 | |||
229 | /* If this is not set, the machine doesn't support DAC at all. */ | ||
230 | if (dac_offset == 0) | ||
231 | ok = 0; | ||
232 | |||
233 | /* The device has to be able to address our DAC bit. */ | ||
234 | if ((dac_offset & dev->dma_mask) != dac_offset) | ||
235 | ok = 0; | ||
236 | |||
237 | /* If both conditions above are met, we are fine. */ | ||
238 | DBGA("pci_dac_dma_supported %s from %p\n", | ||
239 | ok ? "yes" : "no", __builtin_return_address(0)); | ||
240 | |||
241 | return ok; | ||
242 | } | ||
223 | 243 | ||
224 | /* Map a single buffer of the indicated size for PCI DMA in streaming | 244 | /* Map a single buffer of the indicated size for PCI DMA in streaming |
225 | mode. The 32-bit PCI bus mastering address to use is returned. | 245 | mode. The 32-bit PCI bus mastering address to use is returned. |
@@ -301,23 +321,36 @@ pci_map_single_1(struct pci_dev *pdev, void *cpu_addr, size_t size, | |||
301 | return ret; | 321 | return ret; |
302 | } | 322 | } |
303 | 323 | ||
304 | dma_addr_t | 324 | /* Helper for generic DMA-mapping functions. */ |
305 | pci_map_single(struct pci_dev *pdev, void *cpu_addr, size_t size, int dir) | 325 | static struct pci_dev *alpha_gendev_to_pci(struct device *dev) |
306 | { | 326 | { |
307 | int dac_allowed; | 327 | if (dev && dev->bus == &pci_bus_type) |
328 | return to_pci_dev(dev); | ||
308 | 329 | ||
309 | if (dir == PCI_DMA_NONE) | 330 | /* Assume that non-PCI devices asking for DMA are either ISA or EISA, |
310 | BUG(); | 331 | BUG() otherwise. */ |
332 | BUG_ON(!isa_bridge); | ||
311 | 333 | ||
312 | dac_allowed = pdev ? pci_dac_dma_supported(pdev, pdev->dma_mask) : 0; | 334 | /* Assume non-busmaster ISA DMA when dma_mask is not set (the ISA |
313 | return pci_map_single_1(pdev, cpu_addr, size, dac_allowed); | 335 | bridge is bus master then). */ |
336 | if (!dev || !dev->dma_mask || !*dev->dma_mask) | ||
337 | return isa_bridge; | ||
338 | |||
339 | /* For EISA bus masters, return isa_bridge (it might have smaller | ||
340 | dma_mask due to wiring limitations). */ | ||
341 | if (*dev->dma_mask >= isa_bridge->dma_mask) | ||
342 | return isa_bridge; | ||
343 | |||
344 | /* This assumes ISA bus master with dma_mask 0xffffff. */ | ||
345 | return NULL; | ||
314 | } | 346 | } |
315 | EXPORT_SYMBOL(pci_map_single); | ||
316 | 347 | ||
317 | dma_addr_t | 348 | static dma_addr_t alpha_pci_map_page(struct device *dev, struct page *page, |
318 | pci_map_page(struct pci_dev *pdev, struct page *page, unsigned long offset, | 349 | unsigned long offset, size_t size, |
319 | size_t size, int dir) | 350 | enum dma_data_direction dir, |
351 | struct dma_attrs *attrs) | ||
320 | { | 352 | { |
353 | struct pci_dev *pdev = alpha_gendev_to_pci(dev); | ||
321 | int dac_allowed; | 354 | int dac_allowed; |
322 | 355 | ||
323 | if (dir == PCI_DMA_NONE) | 356 | if (dir == PCI_DMA_NONE) |
@@ -327,7 +360,6 @@ pci_map_page(struct pci_dev *pdev, struct page *page, unsigned long offset, | |||
327 | return pci_map_single_1(pdev, (char *)page_address(page) + offset, | 360 | return pci_map_single_1(pdev, (char *)page_address(page) + offset, |
328 | size, dac_allowed); | 361 | size, dac_allowed); |
329 | } | 362 | } |
330 | EXPORT_SYMBOL(pci_map_page); | ||
331 | 363 | ||
332 | /* Unmap a single streaming mode DMA translation. The DMA_ADDR and | 364 | /* Unmap a single streaming mode DMA translation. The DMA_ADDR and |
333 | SIZE must match what was provided for in a previous pci_map_single | 365 | SIZE must match what was provided for in a previous pci_map_single |
@@ -335,16 +367,17 @@ EXPORT_SYMBOL(pci_map_page); | |||
335 | the cpu to the buffer are guaranteed to see whatever the device | 367 | the cpu to the buffer are guaranteed to see whatever the device |
336 | wrote there. */ | 368 | wrote there. */ |
337 | 369 | ||
338 | void | 370 | static void alpha_pci_unmap_page(struct device *dev, dma_addr_t dma_addr, |
339 | pci_unmap_single(struct pci_dev *pdev, dma_addr_t dma_addr, size_t size, | 371 | size_t size, enum dma_data_direction dir, |
340 | int direction) | 372 | struct dma_attrs *attrs) |
341 | { | 373 | { |
342 | unsigned long flags; | 374 | unsigned long flags; |
375 | struct pci_dev *pdev = alpha_gendev_to_pci(dev); | ||
343 | struct pci_controller *hose = pdev ? pdev->sysdata : pci_isa_hose; | 376 | struct pci_controller *hose = pdev ? pdev->sysdata : pci_isa_hose; |
344 | struct pci_iommu_arena *arena; | 377 | struct pci_iommu_arena *arena; |
345 | long dma_ofs, npages; | 378 | long dma_ofs, npages; |
346 | 379 | ||
347 | if (direction == PCI_DMA_NONE) | 380 | if (dir == PCI_DMA_NONE) |
348 | BUG(); | 381 | BUG(); |
349 | 382 | ||
350 | if (dma_addr >= __direct_map_base | 383 | if (dma_addr >= __direct_map_base |
@@ -393,25 +426,16 @@ pci_unmap_single(struct pci_dev *pdev, dma_addr_t dma_addr, size_t size, | |||
393 | DBGA2("pci_unmap_single: sg [%llx,%zx] np %ld from %p\n", | 426 | DBGA2("pci_unmap_single: sg [%llx,%zx] np %ld from %p\n", |
394 | dma_addr, size, npages, __builtin_return_address(0)); | 427 | dma_addr, size, npages, __builtin_return_address(0)); |
395 | } | 428 | } |
396 | EXPORT_SYMBOL(pci_unmap_single); | ||
397 | |||
398 | void | ||
399 | pci_unmap_page(struct pci_dev *pdev, dma_addr_t dma_addr, | ||
400 | size_t size, int direction) | ||
401 | { | ||
402 | pci_unmap_single(pdev, dma_addr, size, direction); | ||
403 | } | ||
404 | EXPORT_SYMBOL(pci_unmap_page); | ||
405 | 429 | ||
406 | /* Allocate and map kernel buffer using consistent mode DMA for PCI | 430 | /* Allocate and map kernel buffer using consistent mode DMA for PCI |
407 | device. Returns non-NULL cpu-view pointer to the buffer if | 431 | device. Returns non-NULL cpu-view pointer to the buffer if |
408 | successful and sets *DMA_ADDRP to the pci side dma address as well, | 432 | successful and sets *DMA_ADDRP to the pci side dma address as well, |
409 | else DMA_ADDRP is undefined. */ | 433 | else DMA_ADDRP is undefined. */ |
410 | 434 | ||
411 | void * | 435 | static void *alpha_pci_alloc_coherent(struct device *dev, size_t size, |
412 | __pci_alloc_consistent(struct pci_dev *pdev, size_t size, | 436 | dma_addr_t *dma_addrp, gfp_t gfp) |
413 | dma_addr_t *dma_addrp, gfp_t gfp) | ||
414 | { | 437 | { |
438 | struct pci_dev *pdev = alpha_gendev_to_pci(dev); | ||
415 | void *cpu_addr; | 439 | void *cpu_addr; |
416 | long order = get_order(size); | 440 | long order = get_order(size); |
417 | 441 | ||
@@ -439,13 +463,12 @@ try_again: | |||
439 | gfp |= GFP_DMA; | 463 | gfp |= GFP_DMA; |
440 | goto try_again; | 464 | goto try_again; |
441 | } | 465 | } |
442 | 466 | ||
443 | DBGA2("pci_alloc_consistent: %zx -> [%p,%llx] from %p\n", | 467 | DBGA2("pci_alloc_consistent: %zx -> [%p,%llx] from %p\n", |
444 | size, cpu_addr, *dma_addrp, __builtin_return_address(0)); | 468 | size, cpu_addr, *dma_addrp, __builtin_return_address(0)); |
445 | 469 | ||
446 | return cpu_addr; | 470 | return cpu_addr; |
447 | } | 471 | } |
448 | EXPORT_SYMBOL(__pci_alloc_consistent); | ||
449 | 472 | ||
450 | /* Free and unmap a consistent DMA buffer. CPU_ADDR and DMA_ADDR must | 473 | /* Free and unmap a consistent DMA buffer. CPU_ADDR and DMA_ADDR must |
451 | be values that were returned from pci_alloc_consistent. SIZE must | 474 | be values that were returned from pci_alloc_consistent. SIZE must |
@@ -453,17 +476,16 @@ EXPORT_SYMBOL(__pci_alloc_consistent); | |||
453 | References to the memory and mappings associated with CPU_ADDR or | 476 | References to the memory and mappings associated with CPU_ADDR or |
454 | DMA_ADDR past this call are illegal. */ | 477 | DMA_ADDR past this call are illegal. */ |
455 | 478 | ||
456 | void | 479 | static void alpha_pci_free_coherent(struct device *dev, size_t size, |
457 | pci_free_consistent(struct pci_dev *pdev, size_t size, void *cpu_addr, | 480 | void *cpu_addr, dma_addr_t dma_addr) |
458 | dma_addr_t dma_addr) | ||
459 | { | 481 | { |
482 | struct pci_dev *pdev = alpha_gendev_to_pci(dev); | ||
460 | pci_unmap_single(pdev, dma_addr, size, PCI_DMA_BIDIRECTIONAL); | 483 | pci_unmap_single(pdev, dma_addr, size, PCI_DMA_BIDIRECTIONAL); |
461 | free_pages((unsigned long)cpu_addr, get_order(size)); | 484 | free_pages((unsigned long)cpu_addr, get_order(size)); |
462 | 485 | ||
463 | DBGA2("pci_free_consistent: [%llx,%zx] from %p\n", | 486 | DBGA2("pci_free_consistent: [%llx,%zx] from %p\n", |
464 | dma_addr, size, __builtin_return_address(0)); | 487 | dma_addr, size, __builtin_return_address(0)); |
465 | } | 488 | } |
466 | EXPORT_SYMBOL(pci_free_consistent); | ||
467 | 489 | ||
468 | /* Classify the elements of the scatterlist. Write dma_address | 490 | /* Classify the elements of the scatterlist. Write dma_address |
469 | of each element with: | 491 | of each element with: |
@@ -626,23 +648,21 @@ sg_fill(struct device *dev, struct scatterlist *leader, struct scatterlist *end, | |||
626 | return 1; | 648 | return 1; |
627 | } | 649 | } |
628 | 650 | ||
629 | int | 651 | static int alpha_pci_map_sg(struct device *dev, struct scatterlist *sg, |
630 | pci_map_sg(struct pci_dev *pdev, struct scatterlist *sg, int nents, | 652 | int nents, enum dma_data_direction dir, |
631 | int direction) | 653 | struct dma_attrs *attrs) |
632 | { | 654 | { |
655 | struct pci_dev *pdev = alpha_gendev_to_pci(dev); | ||
633 | struct scatterlist *start, *end, *out; | 656 | struct scatterlist *start, *end, *out; |
634 | struct pci_controller *hose; | 657 | struct pci_controller *hose; |
635 | struct pci_iommu_arena *arena; | 658 | struct pci_iommu_arena *arena; |
636 | dma_addr_t max_dma; | 659 | dma_addr_t max_dma; |
637 | int dac_allowed; | 660 | int dac_allowed; |
638 | struct device *dev; | ||
639 | 661 | ||
640 | if (direction == PCI_DMA_NONE) | 662 | if (dir == PCI_DMA_NONE) |
641 | BUG(); | 663 | BUG(); |
642 | 664 | ||
643 | dac_allowed = pdev ? pci_dac_dma_supported(pdev, pdev->dma_mask) : 0; | 665 | dac_allowed = dev ? pci_dac_dma_supported(pdev, pdev->dma_mask) : 0; |
644 | |||
645 | dev = pdev ? &pdev->dev : NULL; | ||
646 | 666 | ||
647 | /* Fast path single entry scatterlists. */ | 667 | /* Fast path single entry scatterlists. */ |
648 | if (nents == 1) { | 668 | if (nents == 1) { |
@@ -699,19 +719,19 @@ pci_map_sg(struct pci_dev *pdev, struct scatterlist *sg, int nents, | |||
699 | /* Some allocation failed while mapping the scatterlist | 719 | /* Some allocation failed while mapping the scatterlist |
700 | entries. Unmap them now. */ | 720 | entries. Unmap them now. */ |
701 | if (out > start) | 721 | if (out > start) |
702 | pci_unmap_sg(pdev, start, out - start, direction); | 722 | pci_unmap_sg(pdev, start, out - start, dir); |
703 | return 0; | 723 | return 0; |
704 | } | 724 | } |
705 | EXPORT_SYMBOL(pci_map_sg); | ||
706 | 725 | ||
707 | /* Unmap a set of streaming mode DMA translations. Again, cpu read | 726 | /* Unmap a set of streaming mode DMA translations. Again, cpu read |
708 | rules concerning calls here are the same as for pci_unmap_single() | 727 | rules concerning calls here are the same as for pci_unmap_single() |
709 | above. */ | 728 | above. */ |
710 | 729 | ||
711 | void | 730 | static void alpha_pci_unmap_sg(struct device *dev, struct scatterlist *sg, |
712 | pci_unmap_sg(struct pci_dev *pdev, struct scatterlist *sg, int nents, | 731 | int nents, enum dma_data_direction dir, |
713 | int direction) | 732 | struct dma_attrs *attrs) |
714 | { | 733 | { |
734 | struct pci_dev *pdev = alpha_gendev_to_pci(dev); | ||
715 | unsigned long flags; | 735 | unsigned long flags; |
716 | struct pci_controller *hose; | 736 | struct pci_controller *hose; |
717 | struct pci_iommu_arena *arena; | 737 | struct pci_iommu_arena *arena; |
@@ -719,7 +739,7 @@ pci_unmap_sg(struct pci_dev *pdev, struct scatterlist *sg, int nents, | |||
719 | dma_addr_t max_dma; | 739 | dma_addr_t max_dma; |
720 | dma_addr_t fbeg, fend; | 740 | dma_addr_t fbeg, fend; |
721 | 741 | ||
722 | if (direction == PCI_DMA_NONE) | 742 | if (dir == PCI_DMA_NONE) |
723 | BUG(); | 743 | BUG(); |
724 | 744 | ||
725 | if (! alpha_mv.mv_pci_tbi) | 745 | if (! alpha_mv.mv_pci_tbi) |
@@ -783,15 +803,13 @@ pci_unmap_sg(struct pci_dev *pdev, struct scatterlist *sg, int nents, | |||
783 | 803 | ||
784 | DBGA("pci_unmap_sg: %ld entries\n", nents - (end - sg)); | 804 | DBGA("pci_unmap_sg: %ld entries\n", nents - (end - sg)); |
785 | } | 805 | } |
786 | EXPORT_SYMBOL(pci_unmap_sg); | ||
787 | |||
788 | 806 | ||
789 | /* Return whether the given PCI device DMA address mask can be | 807 | /* Return whether the given PCI device DMA address mask can be |
790 | supported properly. */ | 808 | supported properly. */ |
791 | 809 | ||
792 | int | 810 | static int alpha_pci_supported(struct device *dev, u64 mask) |
793 | pci_dma_supported(struct pci_dev *pdev, u64 mask) | ||
794 | { | 811 | { |
812 | struct pci_dev *pdev = alpha_gendev_to_pci(dev); | ||
795 | struct pci_controller *hose; | 813 | struct pci_controller *hose; |
796 | struct pci_iommu_arena *arena; | 814 | struct pci_iommu_arena *arena; |
797 | 815 | ||
@@ -818,7 +836,6 @@ pci_dma_supported(struct pci_dev *pdev, u64 mask) | |||
818 | 836 | ||
819 | return 0; | 837 | return 0; |
820 | } | 838 | } |
821 | EXPORT_SYMBOL(pci_dma_supported); | ||
822 | 839 | ||
823 | 840 | ||
824 | /* | 841 | /* |
@@ -918,66 +935,32 @@ iommu_unbind(struct pci_iommu_arena *arena, long pg_start, long pg_count) | |||
918 | return 0; | 935 | return 0; |
919 | } | 936 | } |
920 | 937 | ||
921 | /* True if the machine supports DAC addressing, and DEV can | 938 | static int alpha_pci_mapping_error(struct device *dev, dma_addr_t dma_addr) |
922 | make use of it given MASK. */ | ||
923 | |||
924 | static int | ||
925 | pci_dac_dma_supported(struct pci_dev *dev, u64 mask) | ||
926 | { | ||
927 | dma64_addr_t dac_offset = alpha_mv.pci_dac_offset; | ||
928 | int ok = 1; | ||
929 | |||
930 | /* If this is not set, the machine doesn't support DAC at all. */ | ||
931 | if (dac_offset == 0) | ||
932 | ok = 0; | ||
933 | |||
934 | /* The device has to be able to address our DAC bit. */ | ||
935 | if ((dac_offset & dev->dma_mask) != dac_offset) | ||
936 | ok = 0; | ||
937 | |||
938 | /* If both conditions above are met, we are fine. */ | ||
939 | DBGA("pci_dac_dma_supported %s from %p\n", | ||
940 | ok ? "yes" : "no", __builtin_return_address(0)); | ||
941 | |||
942 | return ok; | ||
943 | } | ||
944 | |||
945 | /* Helper for generic DMA-mapping functions. */ | ||
946 | |||
947 | struct pci_dev * | ||
948 | alpha_gendev_to_pci(struct device *dev) | ||
949 | { | 939 | { |
950 | if (dev && dev->bus == &pci_bus_type) | 940 | return dma_addr == 0; |
951 | return to_pci_dev(dev); | ||
952 | |||
953 | /* Assume that non-PCI devices asking for DMA are either ISA or EISA, | ||
954 | BUG() otherwise. */ | ||
955 | BUG_ON(!isa_bridge); | ||
956 | |||
957 | /* Assume non-busmaster ISA DMA when dma_mask is not set (the ISA | ||
958 | bridge is bus master then). */ | ||
959 | if (!dev || !dev->dma_mask || !*dev->dma_mask) | ||
960 | return isa_bridge; | ||
961 | |||
962 | /* For EISA bus masters, return isa_bridge (it might have smaller | ||
963 | dma_mask due to wiring limitations). */ | ||
964 | if (*dev->dma_mask >= isa_bridge->dma_mask) | ||
965 | return isa_bridge; | ||
966 | |||
967 | /* This assumes ISA bus master with dma_mask 0xffffff. */ | ||
968 | return NULL; | ||
969 | } | 941 | } |
970 | EXPORT_SYMBOL(alpha_gendev_to_pci); | ||
971 | 942 | ||
972 | int | 943 | static int alpha_pci_set_mask(struct device *dev, u64 mask) |
973 | dma_set_mask(struct device *dev, u64 mask) | ||
974 | { | 944 | { |
975 | if (!dev->dma_mask || | 945 | if (!dev->dma_mask || |
976 | !pci_dma_supported(alpha_gendev_to_pci(dev), mask)) | 946 | !pci_dma_supported(alpha_gendev_to_pci(dev), mask)) |
977 | return -EIO; | 947 | return -EIO; |
978 | 948 | ||
979 | *dev->dma_mask = mask; | 949 | *dev->dma_mask = mask; |
980 | |||
981 | return 0; | 950 | return 0; |
982 | } | 951 | } |
983 | EXPORT_SYMBOL(dma_set_mask); | 952 | |
953 | struct dma_map_ops alpha_pci_ops = { | ||
954 | .alloc_coherent = alpha_pci_alloc_coherent, | ||
955 | .free_coherent = alpha_pci_free_coherent, | ||
956 | .map_page = alpha_pci_map_page, | ||
957 | .unmap_page = alpha_pci_unmap_page, | ||
958 | .map_sg = alpha_pci_map_sg, | ||
959 | .unmap_sg = alpha_pci_unmap_sg, | ||
960 | .mapping_error = alpha_pci_mapping_error, | ||
961 | .dma_supported = alpha_pci_supported, | ||
962 | .set_dma_mask = alpha_pci_set_mask, | ||
963 | }; | ||
964 | |||
965 | struct dma_map_ops *dma_ops = &alpha_pci_ops; | ||
966 | EXPORT_SYMBOL(dma_ops); | ||
diff --git a/arch/alpha/kernel/ptrace.c b/arch/alpha/kernel/ptrace.c index e072041d19f8..9acadc6b16a0 100644 --- a/arch/alpha/kernel/ptrace.c +++ b/arch/alpha/kernel/ptrace.c | |||
@@ -249,6 +249,17 @@ ptrace_cancel_bpt(struct task_struct * child) | |||
249 | return (nsaved != 0); | 249 | return (nsaved != 0); |
250 | } | 250 | } |
251 | 251 | ||
252 | void user_enable_single_step(struct task_struct *child) | ||
253 | { | ||
254 | /* Mark single stepping. */ | ||
255 | task_thread_info(child)->bpt_nsaved = -1; | ||
256 | } | ||
257 | |||
258 | void user_disable_single_step(struct task_struct *child) | ||
259 | { | ||
260 | ptrace_cancel_bpt(child); | ||
261 | } | ||
262 | |||
252 | /* | 263 | /* |
253 | * Called by kernel/ptrace.c when detaching.. | 264 | * Called by kernel/ptrace.c when detaching.. |
254 | * | 265 | * |
@@ -256,7 +267,7 @@ ptrace_cancel_bpt(struct task_struct * child) | |||
256 | */ | 267 | */ |
257 | void ptrace_disable(struct task_struct *child) | 268 | void ptrace_disable(struct task_struct *child) |
258 | { | 269 | { |
259 | ptrace_cancel_bpt(child); | 270 | user_disable_single_step(child); |
260 | } | 271 | } |
261 | 272 | ||
262 | long arch_ptrace(struct task_struct *child, long request, long addr, long data) | 273 | long arch_ptrace(struct task_struct *child, long request, long addr, long data) |
@@ -295,52 +306,6 @@ long arch_ptrace(struct task_struct *child, long request, long addr, long data) | |||
295 | DBG(DBG_MEM, ("poke $%ld<-%#lx\n", addr, data)); | 306 | DBG(DBG_MEM, ("poke $%ld<-%#lx\n", addr, data)); |
296 | ret = put_reg(child, addr, data); | 307 | ret = put_reg(child, addr, data); |
297 | break; | 308 | break; |
298 | |||
299 | case PTRACE_SYSCALL: | ||
300 | /* continue and stop at next (return from) syscall */ | ||
301 | case PTRACE_CONT: /* restart after signal. */ | ||
302 | ret = -EIO; | ||
303 | if (!valid_signal(data)) | ||
304 | break; | ||
305 | if (request == PTRACE_SYSCALL) | ||
306 | set_tsk_thread_flag(child, TIF_SYSCALL_TRACE); | ||
307 | else | ||
308 | clear_tsk_thread_flag(child, TIF_SYSCALL_TRACE); | ||
309 | child->exit_code = data; | ||
310 | /* make sure single-step breakpoint is gone. */ | ||
311 | ptrace_cancel_bpt(child); | ||
312 | wake_up_process(child); | ||
313 | ret = 0; | ||
314 | break; | ||
315 | |||
316 | /* | ||
317 | * Make the child exit. Best I can do is send it a sigkill. | ||
318 | * perhaps it should be put in the status that it wants to | ||
319 | * exit. | ||
320 | */ | ||
321 | case PTRACE_KILL: | ||
322 | ret = 0; | ||
323 | if (child->exit_state == EXIT_ZOMBIE) | ||
324 | break; | ||
325 | child->exit_code = SIGKILL; | ||
326 | /* make sure single-step breakpoint is gone. */ | ||
327 | ptrace_cancel_bpt(child); | ||
328 | wake_up_process(child); | ||
329 | break; | ||
330 | |||
331 | case PTRACE_SINGLESTEP: /* execute single instruction. */ | ||
332 | ret = -EIO; | ||
333 | if (!valid_signal(data)) | ||
334 | break; | ||
335 | /* Mark single stepping. */ | ||
336 | task_thread_info(child)->bpt_nsaved = -1; | ||
337 | clear_tsk_thread_flag(child, TIF_SYSCALL_TRACE); | ||
338 | child->exit_code = data; | ||
339 | wake_up_process(child); | ||
340 | /* give it a chance to run. */ | ||
341 | ret = 0; | ||
342 | break; | ||
343 | |||
344 | default: | 309 | default: |
345 | ret = ptrace_request(child, request, addr, data); | 310 | ret = ptrace_request(child, request, addr, data); |
346 | break; | 311 | break; |
diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig index e12d700d985a..cadfe2ee66a5 100644 --- a/arch/arm/Kconfig +++ b/arch/arm/Kconfig | |||
@@ -155,6 +155,9 @@ config ARCH_MAY_HAVE_PC_FDC | |||
155 | config ZONE_DMA | 155 | config ZONE_DMA |
156 | bool | 156 | bool |
157 | 157 | ||
158 | config NEED_DMA_MAP_STATE | ||
159 | def_bool y | ||
160 | |||
158 | config GENERIC_ISA_DMA | 161 | config GENERIC_ISA_DMA |
159 | bool | 162 | bool |
160 | 163 | ||
diff --git a/arch/arm/common/it8152.c b/arch/arm/common/it8152.c index 2793447621c3..ee1d3b85eb65 100644 --- a/arch/arm/common/it8152.c +++ b/arch/arm/common/it8152.c | |||
@@ -272,33 +272,6 @@ int dma_needs_bounce(struct device *dev, dma_addr_t dma_addr, size_t size) | |||
272 | ((dma_addr + size - PHYS_OFFSET) >= SZ_64M); | 272 | ((dma_addr + size - PHYS_OFFSET) >= SZ_64M); |
273 | } | 273 | } |
274 | 274 | ||
275 | /* | ||
276 | * We override these so we properly do dmabounce otherwise drivers | ||
277 | * are able to set the dma_mask to 0xffffffff and we can no longer | ||
278 | * trap bounces. :( | ||
279 | * | ||
280 | * We just return true on everyhing except for < 64MB in which case | ||
281 | * we will fail miseralby and die since we can't handle that case. | ||
282 | */ | ||
283 | int pci_set_dma_mask(struct pci_dev *dev, u64 mask) | ||
284 | { | ||
285 | dev_dbg(&dev->dev, "%s: %llx\n", __func__, mask); | ||
286 | if (mask >= PHYS_OFFSET + SZ_64M - 1) | ||
287 | return 0; | ||
288 | |||
289 | return -EIO; | ||
290 | } | ||
291 | |||
292 | int | ||
293 | pci_set_consistent_dma_mask(struct pci_dev *dev, u64 mask) | ||
294 | { | ||
295 | dev_dbg(&dev->dev, "%s: %llx\n", __func__, mask); | ||
296 | if (mask >= PHYS_OFFSET + SZ_64M - 1) | ||
297 | return 0; | ||
298 | |||
299 | return -EIO; | ||
300 | } | ||
301 | |||
302 | int __init it8152_pci_setup(int nr, struct pci_sys_data *sys) | 275 | int __init it8152_pci_setup(int nr, struct pci_sys_data *sys) |
303 | { | 276 | { |
304 | it8152_io.start = IT8152_IO_BASE + 0x12000; | 277 | it8152_io.start = IT8152_IO_BASE + 0x12000; |
diff --git a/arch/arm/configs/nuc950_defconfig b/arch/arm/configs/nuc950_defconfig index 97300ec478dd..51cc2a260cbb 100644 --- a/arch/arm/configs/nuc950_defconfig +++ b/arch/arm/configs/nuc950_defconfig | |||
@@ -590,8 +590,40 @@ CONFIG_SSB_POSSIBLE=y | |||
590 | # | 590 | # |
591 | # CONFIG_VGASTATE is not set | 591 | # CONFIG_VGASTATE is not set |
592 | # CONFIG_VIDEO_OUTPUT_CONTROL is not set | 592 | # CONFIG_VIDEO_OUTPUT_CONTROL is not set |
593 | # CONFIG_FB is not set | ||
594 | # CONFIG_BACKLIGHT_LCD_SUPPORT is not set | 593 | # CONFIG_BACKLIGHT_LCD_SUPPORT is not set |
594 | CONFIG_FB=y | ||
595 | # CONFIG_FIRMWARE_EDID is not set | ||
596 | # CONFIG_FB_DDC is not set | ||
597 | # CONFIG_FB_BOOT_VESA_SUPPORT is not set | ||
598 | CONFIG_FB_CFB_FILLRECT=y | ||
599 | CONFIG_FB_CFB_COPYAREA=y | ||
600 | CONFIG_FB_CFB_IMAGEBLIT=y | ||
601 | # CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set | ||
602 | # CONFIG_FB_SYS_FILLRECT is not set | ||
603 | # CONFIG_FB_SYS_COPYAREA is not set | ||
604 | # CONFIG_FB_SYS_IMAGEBLIT is not set | ||
605 | # CONFIG_FB_FOREIGN_ENDIAN is not set | ||
606 | # CONFIG_FB_SYS_FOPS is not set | ||
607 | # CONFIG_FB_SVGALIB is not set | ||
608 | # CONFIG_FB_MACMODES is not set | ||
609 | # CONFIG_FB_BACKLIGHT is not set | ||
610 | # CONFIG_FB_MODE_HELPERS is not set | ||
611 | # CONFIG_FB_TILEBLITTING is not set | ||
612 | |||
613 | # | ||
614 | # Frame buffer hardware drivers | ||
615 | # | ||
616 | # CONFIG_FB_S1D13XXX is not set | ||
617 | CONFIG_FB_NUC900=y | ||
618 | CONFIG_GPM1040A0_320X240=y | ||
619 | CONFIG_FB_NUC900_DEBUG=y | ||
620 | # CONFIG_FB_VIRTUAL is not set | ||
621 | # CONFIG_FB_METRONOME is not set | ||
622 | # CONFIG_FB_MB862XX is not set | ||
623 | # CONFIG_FB_BROADSHEET is not set | ||
624 | # CONFIG_BACKLIGHT_LCD_SUPPORT is not set | ||
625 | |||
626 | |||
595 | 627 | ||
596 | # | 628 | # |
597 | # Display device support | 629 | # Display device support |
@@ -603,6 +635,25 @@ CONFIG_SSB_POSSIBLE=y | |||
603 | # | 635 | # |
604 | # CONFIG_VGA_CONSOLE is not set | 636 | # CONFIG_VGA_CONSOLE is not set |
605 | CONFIG_DUMMY_CONSOLE=y | 637 | CONFIG_DUMMY_CONSOLE=y |
638 | CONFIG_FRAMEBUFFER_CONSOLE=y | ||
639 | CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY=y | ||
640 | # CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set | ||
641 | CONFIG_FONTS=y | ||
642 | # CONFIG_FONT_8x8 is not set | ||
643 | CONFIG_FONT_8x16=y | ||
644 | # CONFIG_FONT_6x11 is not set | ||
645 | # CONFIG_FONT_7x14 is not set | ||
646 | # CONFIG_FONT_PEARL_8x8 is not set | ||
647 | # CONFIG_FONT_ACORN_8x8 is not set | ||
648 | # CONFIG_FONT_MINI_4x6 is not set | ||
649 | # CONFIG_FONT_SUN8x16 is not set | ||
650 | # CONFIG_FONT_SUN12x22 is not set | ||
651 | # CONFIG_FONT_10x18 is not set | ||
652 | CONFIG_LOGO=y | ||
653 | # CONFIG_LOGO_LINUX_MONO is not set | ||
654 | # CONFIG_LOGO_LINUX_VGA16 is not set | ||
655 | CONFIG_LOGO_LINUX_CLUT224=y | ||
656 | |||
606 | # CONFIG_SOUND is not set | 657 | # CONFIG_SOUND is not set |
607 | # CONFIG_HID_SUPPORT is not set | 658 | # CONFIG_HID_SUPPORT is not set |
608 | CONFIG_USB_SUPPORT=y | 659 | CONFIG_USB_SUPPORT=y |
diff --git a/arch/arm/include/asm/dma-mapping.h b/arch/arm/include/asm/dma-mapping.h index 256ee1c9f51a..69ce0727edb5 100644 --- a/arch/arm/include/asm/dma-mapping.h +++ b/arch/arm/include/asm/dma-mapping.h | |||
@@ -128,6 +128,14 @@ static inline int dma_supported(struct device *dev, u64 mask) | |||
128 | 128 | ||
129 | static inline int dma_set_mask(struct device *dev, u64 dma_mask) | 129 | static inline int dma_set_mask(struct device *dev, u64 dma_mask) |
130 | { | 130 | { |
131 | #ifdef CONFIG_DMABOUNCE | ||
132 | if (dev->archdata.dmabounce) { | ||
133 | if (dma_mask >= ISA_DMA_THRESHOLD) | ||
134 | return 0; | ||
135 | else | ||
136 | return -EIO; | ||
137 | } | ||
138 | #endif | ||
131 | if (!dev->dma_mask || !dma_supported(dev, dma_mask)) | 139 | if (!dev->dma_mask || !dma_supported(dev, dma_mask)) |
132 | return -EIO; | 140 | return -EIO; |
133 | 141 | ||
diff --git a/arch/arm/include/asm/pci.h b/arch/arm/include/asm/pci.h index 226cddd2fb65..47980118d0a5 100644 --- a/arch/arm/include/asm/pci.h +++ b/arch/arm/include/asm/pci.h | |||
@@ -30,17 +30,6 @@ static inline void pcibios_penalize_isa_irq(int irq, int active) | |||
30 | */ | 30 | */ |
31 | #define PCI_DMA_BUS_IS_PHYS (1) | 31 | #define PCI_DMA_BUS_IS_PHYS (1) |
32 | 32 | ||
33 | /* | ||
34 | * Whether pci_unmap_{single,page} is a nop depends upon the | ||
35 | * configuration. | ||
36 | */ | ||
37 | #define DECLARE_PCI_UNMAP_ADDR(ADDR_NAME) dma_addr_t ADDR_NAME; | ||
38 | #define DECLARE_PCI_UNMAP_LEN(LEN_NAME) __u32 LEN_NAME; | ||
39 | #define pci_unmap_addr(PTR, ADDR_NAME) ((PTR)->ADDR_NAME) | ||
40 | #define pci_unmap_addr_set(PTR, ADDR_NAME, VAL) (((PTR)->ADDR_NAME) = (VAL)) | ||
41 | #define pci_unmap_len(PTR, LEN_NAME) ((PTR)->LEN_NAME) | ||
42 | #define pci_unmap_len_set(PTR, LEN_NAME, VAL) (((PTR)->LEN_NAME) = (VAL)) | ||
43 | |||
44 | #ifdef CONFIG_PCI | 33 | #ifdef CONFIG_PCI |
45 | static inline void pci_dma_burst_advice(struct pci_dev *pdev, | 34 | static inline void pci_dma_burst_advice(struct pci_dev *pdev, |
46 | enum pci_dma_burst_strategy *strat, | 35 | enum pci_dma_burst_strategy *strat, |
diff --git a/arch/arm/include/asm/ptrace.h b/arch/arm/include/asm/ptrace.h index eec6e897ceb2..9dcb11e59026 100644 --- a/arch/arm/include/asm/ptrace.h +++ b/arch/arm/include/asm/ptrace.h | |||
@@ -128,6 +128,8 @@ struct pt_regs { | |||
128 | 128 | ||
129 | #ifdef __KERNEL__ | 129 | #ifdef __KERNEL__ |
130 | 130 | ||
131 | #define arch_has_single_step() (1) | ||
132 | |||
131 | #define user_mode(regs) \ | 133 | #define user_mode(regs) \ |
132 | (((regs)->ARM_cpsr & 0xf) == 0) | 134 | (((regs)->ARM_cpsr & 0xf) == 0) |
133 | 135 | ||
diff --git a/arch/arm/include/asm/unistd.h b/arch/arm/include/asm/unistd.h index cf9cdaa2d4d4..dd2bf53000fe 100644 --- a/arch/arm/include/asm/unistd.h +++ b/arch/arm/include/asm/unistd.h | |||
@@ -443,9 +443,12 @@ | |||
443 | #define __ARCH_WANT_SYS_SIGPROCMASK | 443 | #define __ARCH_WANT_SYS_SIGPROCMASK |
444 | #define __ARCH_WANT_SYS_RT_SIGACTION | 444 | #define __ARCH_WANT_SYS_RT_SIGACTION |
445 | #define __ARCH_WANT_SYS_RT_SIGSUSPEND | 445 | #define __ARCH_WANT_SYS_RT_SIGSUSPEND |
446 | #define __ARCH_WANT_SYS_OLD_MMAP | ||
447 | #define __ARCH_WANT_SYS_OLD_SELECT | ||
446 | 448 | ||
447 | #if !defined(CONFIG_AEABI) || defined(CONFIG_OABI_COMPAT) | 449 | #if !defined(CONFIG_AEABI) || defined(CONFIG_OABI_COMPAT) |
448 | #define __ARCH_WANT_SYS_TIME | 450 | #define __ARCH_WANT_SYS_TIME |
451 | #define __ARCH_WANT_SYS_IPC | ||
449 | #define __ARCH_WANT_SYS_OLDUMOUNT | 452 | #define __ARCH_WANT_SYS_OLDUMOUNT |
450 | #define __ARCH_WANT_SYS_ALARM | 453 | #define __ARCH_WANT_SYS_ALARM |
451 | #define __ARCH_WANT_SYS_UTIME | 454 | #define __ARCH_WANT_SYS_UTIME |
diff --git a/arch/arm/kernel/calls.S b/arch/arm/kernel/calls.S index 9314a2d681f1..37ae301cc47c 100644 --- a/arch/arm/kernel/calls.S +++ b/arch/arm/kernel/calls.S | |||
@@ -91,7 +91,7 @@ | |||
91 | CALL(sys_settimeofday) | 91 | CALL(sys_settimeofday) |
92 | /* 80 */ CALL(sys_getgroups16) | 92 | /* 80 */ CALL(sys_getgroups16) |
93 | CALL(sys_setgroups16) | 93 | CALL(sys_setgroups16) |
94 | CALL(OBSOLETE(old_select)) /* used by libc4 */ | 94 | CALL(OBSOLETE(sys_old_select)) /* used by libc4 */ |
95 | CALL(sys_symlink) | 95 | CALL(sys_symlink) |
96 | CALL(sys_ni_syscall) /* was sys_lstat */ | 96 | CALL(sys_ni_syscall) /* was sys_lstat */ |
97 | /* 85 */ CALL(sys_readlink) | 97 | /* 85 */ CALL(sys_readlink) |
@@ -99,7 +99,7 @@ | |||
99 | CALL(sys_swapon) | 99 | CALL(sys_swapon) |
100 | CALL(sys_reboot) | 100 | CALL(sys_reboot) |
101 | CALL(OBSOLETE(sys_old_readdir)) /* used by libc4 */ | 101 | CALL(OBSOLETE(sys_old_readdir)) /* used by libc4 */ |
102 | /* 90 */ CALL(OBSOLETE(old_mmap)) /* used by libc4 */ | 102 | /* 90 */ CALL(OBSOLETE(sys_old_mmap)) /* used by libc4 */ |
103 | CALL(sys_munmap) | 103 | CALL(sys_munmap) |
104 | CALL(sys_truncate) | 104 | CALL(sys_truncate) |
105 | CALL(sys_ftruncate) | 105 | CALL(sys_ftruncate) |
diff --git a/arch/arm/kernel/ptrace.c b/arch/arm/kernel/ptrace.c index 08f899fb76a6..3f562a7c0a99 100644 --- a/arch/arm/kernel/ptrace.c +++ b/arch/arm/kernel/ptrace.c | |||
@@ -452,12 +452,23 @@ void ptrace_cancel_bpt(struct task_struct *child) | |||
452 | clear_breakpoint(child, &child->thread.debug.bp[i]); | 452 | clear_breakpoint(child, &child->thread.debug.bp[i]); |
453 | } | 453 | } |
454 | 454 | ||
455 | void user_disable_single_step(struct task_struct *task) | ||
456 | { | ||
457 | task->ptrace &= ~PT_SINGLESTEP; | ||
458 | ptrace_cancel_bpt(task); | ||
459 | } | ||
460 | |||
461 | void user_enable_single_step(struct task_struct *task) | ||
462 | { | ||
463 | task->ptrace |= PT_SINGLESTEP; | ||
464 | } | ||
465 | |||
455 | /* | 466 | /* |
456 | * Called by kernel/ptrace.c when detaching.. | 467 | * Called by kernel/ptrace.c when detaching.. |
457 | */ | 468 | */ |
458 | void ptrace_disable(struct task_struct *child) | 469 | void ptrace_disable(struct task_struct *child) |
459 | { | 470 | { |
460 | single_step_disable(child); | 471 | user_disable_single_step(child); |
461 | } | 472 | } |
462 | 473 | ||
463 | /* | 474 | /* |
@@ -753,53 +764,6 @@ long arch_ptrace(struct task_struct *child, long request, long addr, long data) | |||
753 | ret = ptrace_write_user(child, addr, data); | 764 | ret = ptrace_write_user(child, addr, data); |
754 | break; | 765 | break; |
755 | 766 | ||
756 | /* | ||
757 | * continue/restart and stop at next (return from) syscall | ||
758 | */ | ||
759 | case PTRACE_SYSCALL: | ||
760 | case PTRACE_CONT: | ||
761 | ret = -EIO; | ||
762 | if (!valid_signal(data)) | ||
763 | break; | ||
764 | if (request == PTRACE_SYSCALL) | ||
765 | set_tsk_thread_flag(child, TIF_SYSCALL_TRACE); | ||
766 | else | ||
767 | clear_tsk_thread_flag(child, TIF_SYSCALL_TRACE); | ||
768 | child->exit_code = data; | ||
769 | single_step_disable(child); | ||
770 | wake_up_process(child); | ||
771 | ret = 0; | ||
772 | break; | ||
773 | |||
774 | /* | ||
775 | * make the child exit. Best I can do is send it a sigkill. | ||
776 | * perhaps it should be put in the status that it wants to | ||
777 | * exit. | ||
778 | */ | ||
779 | case PTRACE_KILL: | ||
780 | single_step_disable(child); | ||
781 | if (child->exit_state != EXIT_ZOMBIE) { | ||
782 | child->exit_code = SIGKILL; | ||
783 | wake_up_process(child); | ||
784 | } | ||
785 | ret = 0; | ||
786 | break; | ||
787 | |||
788 | /* | ||
789 | * execute single instruction. | ||
790 | */ | ||
791 | case PTRACE_SINGLESTEP: | ||
792 | ret = -EIO; | ||
793 | if (!valid_signal(data)) | ||
794 | break; | ||
795 | single_step_enable(child); | ||
796 | clear_tsk_thread_flag(child, TIF_SYSCALL_TRACE); | ||
797 | child->exit_code = data; | ||
798 | /* give it a chance to run. */ | ||
799 | wake_up_process(child); | ||
800 | ret = 0; | ||
801 | break; | ||
802 | |||
803 | case PTRACE_GETREGS: | 767 | case PTRACE_GETREGS: |
804 | ret = ptrace_getregs(child, (void __user *)data); | 768 | ret = ptrace_getregs(child, (void __user *)data); |
805 | break; | 769 | break; |
diff --git a/arch/arm/kernel/ptrace.h b/arch/arm/kernel/ptrace.h index def3b6184a79..3926605b82ea 100644 --- a/arch/arm/kernel/ptrace.h +++ b/arch/arm/kernel/ptrace.h | |||
@@ -14,20 +14,6 @@ extern void ptrace_set_bpt(struct task_struct *); | |||
14 | extern void ptrace_break(struct task_struct *, struct pt_regs *); | 14 | extern void ptrace_break(struct task_struct *, struct pt_regs *); |
15 | 15 | ||
16 | /* | 16 | /* |
17 | * make sure single-step breakpoint is gone. | ||
18 | */ | ||
19 | static inline void single_step_disable(struct task_struct *task) | ||
20 | { | ||
21 | task->ptrace &= ~PT_SINGLESTEP; | ||
22 | ptrace_cancel_bpt(task); | ||
23 | } | ||
24 | |||
25 | static inline void single_step_enable(struct task_struct *task) | ||
26 | { | ||
27 | task->ptrace |= PT_SINGLESTEP; | ||
28 | } | ||
29 | |||
30 | /* | ||
31 | * Send SIGTRAP if we're single-stepping | 17 | * Send SIGTRAP if we're single-stepping |
32 | */ | 18 | */ |
33 | static inline void single_step_trap(struct task_struct *task) | 19 | static inline void single_step_trap(struct task_struct *task) |
diff --git a/arch/arm/kernel/sys_arm.c b/arch/arm/kernel/sys_arm.c index ae4027bd01bd..4350f75e578c 100644 --- a/arch/arm/kernel/sys_arm.c +++ b/arch/arm/kernel/sys_arm.c | |||
@@ -28,135 +28,6 @@ | |||
28 | #include <linux/ipc.h> | 28 | #include <linux/ipc.h> |
29 | #include <linux/uaccess.h> | 29 | #include <linux/uaccess.h> |
30 | 30 | ||
31 | struct mmap_arg_struct { | ||
32 | unsigned long addr; | ||
33 | unsigned long len; | ||
34 | unsigned long prot; | ||
35 | unsigned long flags; | ||
36 | unsigned long fd; | ||
37 | unsigned long offset; | ||
38 | }; | ||
39 | |||
40 | asmlinkage int old_mmap(struct mmap_arg_struct __user *arg) | ||
41 | { | ||
42 | int error = -EFAULT; | ||
43 | struct mmap_arg_struct a; | ||
44 | |||
45 | if (copy_from_user(&a, arg, sizeof(a))) | ||
46 | goto out; | ||
47 | |||
48 | error = -EINVAL; | ||
49 | if (a.offset & ~PAGE_MASK) | ||
50 | goto out; | ||
51 | |||
52 | error = sys_mmap_pgoff(a.addr, a.len, a.prot, a.flags, a.fd, a.offset >> PAGE_SHIFT); | ||
53 | out: | ||
54 | return error; | ||
55 | } | ||
56 | |||
57 | /* | ||
58 | * Perform the select(nd, in, out, ex, tv) and mmap() system | ||
59 | * calls. | ||
60 | */ | ||
61 | |||
62 | struct sel_arg_struct { | ||
63 | unsigned long n; | ||
64 | fd_set __user *inp, *outp, *exp; | ||
65 | struct timeval __user *tvp; | ||
66 | }; | ||
67 | |||
68 | asmlinkage int old_select(struct sel_arg_struct __user *arg) | ||
69 | { | ||
70 | struct sel_arg_struct a; | ||
71 | |||
72 | if (copy_from_user(&a, arg, sizeof(a))) | ||
73 | return -EFAULT; | ||
74 | /* sys_select() does the appropriate kernel locking */ | ||
75 | return sys_select(a.n, a.inp, a.outp, a.exp, a.tvp); | ||
76 | } | ||
77 | |||
78 | #if !defined(CONFIG_AEABI) || defined(CONFIG_OABI_COMPAT) | ||
79 | /* | ||
80 | * sys_ipc() is the de-multiplexer for the SysV IPC calls.. | ||
81 | * | ||
82 | * This is really horribly ugly. | ||
83 | */ | ||
84 | asmlinkage int sys_ipc(uint call, int first, int second, int third, | ||
85 | void __user *ptr, long fifth) | ||
86 | { | ||
87 | int version, ret; | ||
88 | |||
89 | version = call >> 16; /* hack for backward compatibility */ | ||
90 | call &= 0xffff; | ||
91 | |||
92 | switch (call) { | ||
93 | case SEMOP: | ||
94 | return sys_semtimedop (first, (struct sembuf __user *)ptr, second, NULL); | ||
95 | case SEMTIMEDOP: | ||
96 | return sys_semtimedop(first, (struct sembuf __user *)ptr, second, | ||
97 | (const struct timespec __user *)fifth); | ||
98 | |||
99 | case SEMGET: | ||
100 | return sys_semget (first, second, third); | ||
101 | case SEMCTL: { | ||
102 | union semun fourth; | ||
103 | if (!ptr) | ||
104 | return -EINVAL; | ||
105 | if (get_user(fourth.__pad, (void __user * __user *) ptr)) | ||
106 | return -EFAULT; | ||
107 | return sys_semctl (first, second, third, fourth); | ||
108 | } | ||
109 | |||
110 | case MSGSND: | ||
111 | return sys_msgsnd(first, (struct msgbuf __user *) ptr, | ||
112 | second, third); | ||
113 | case MSGRCV: | ||
114 | switch (version) { | ||
115 | case 0: { | ||
116 | struct ipc_kludge tmp; | ||
117 | if (!ptr) | ||
118 | return -EINVAL; | ||
119 | if (copy_from_user(&tmp,(struct ipc_kludge __user *)ptr, | ||
120 | sizeof (tmp))) | ||
121 | return -EFAULT; | ||
122 | return sys_msgrcv (first, tmp.msgp, second, | ||
123 | tmp.msgtyp, third); | ||
124 | } | ||
125 | default: | ||
126 | return sys_msgrcv (first, | ||
127 | (struct msgbuf __user *) ptr, | ||
128 | second, fifth, third); | ||
129 | } | ||
130 | case MSGGET: | ||
131 | return sys_msgget ((key_t) first, second); | ||
132 | case MSGCTL: | ||
133 | return sys_msgctl(first, second, (struct msqid_ds __user *)ptr); | ||
134 | |||
135 | case SHMAT: | ||
136 | switch (version) { | ||
137 | default: { | ||
138 | ulong raddr; | ||
139 | ret = do_shmat(first, (char __user *)ptr, second, &raddr); | ||
140 | if (ret) | ||
141 | return ret; | ||
142 | return put_user(raddr, (ulong __user *)third); | ||
143 | } | ||
144 | case 1: /* Of course, we don't support iBCS2! */ | ||
145 | return -EINVAL; | ||
146 | } | ||
147 | case SHMDT: | ||
148 | return sys_shmdt ((char __user *)ptr); | ||
149 | case SHMGET: | ||
150 | return sys_shmget (first, second, third); | ||
151 | case SHMCTL: | ||
152 | return sys_shmctl (first, second, | ||
153 | (struct shmid_ds __user *) ptr); | ||
154 | default: | ||
155 | return -ENOSYS; | ||
156 | } | ||
157 | } | ||
158 | #endif | ||
159 | |||
160 | /* Fork a new task - this creates a new program thread. | 31 | /* Fork a new task - this creates a new program thread. |
161 | * This is called indirectly via a small wrapper | 32 | * This is called indirectly via a small wrapper |
162 | */ | 33 | */ |
diff --git a/arch/arm/kernel/sys_oabi-compat.c b/arch/arm/kernel/sys_oabi-compat.c index d59a0cd537f0..33ff678e32f2 100644 --- a/arch/arm/kernel/sys_oabi-compat.c +++ b/arch/arm/kernel/sys_oabi-compat.c | |||
@@ -346,9 +346,6 @@ asmlinkage long sys_oabi_semop(int semid, struct oabi_sembuf __user *tsops, | |||
346 | return sys_oabi_semtimedop(semid, tsops, nsops, NULL); | 346 | return sys_oabi_semtimedop(semid, tsops, nsops, NULL); |
347 | } | 347 | } |
348 | 348 | ||
349 | extern asmlinkage int sys_ipc(uint call, int first, int second, int third, | ||
350 | void __user *ptr, long fifth); | ||
351 | |||
352 | asmlinkage int sys_oabi_ipc(uint call, int first, int second, int third, | 349 | asmlinkage int sys_oabi_ipc(uint call, int first, int second, int third, |
353 | void __user *ptr, long fifth) | 350 | void __user *ptr, long fifth) |
354 | { | 351 | { |
diff --git a/arch/arm/mach-ep93xx/include/mach/ts72xx.h b/arch/arm/mach-ep93xx/include/mach/ts72xx.h index 3bd934e9a7f1..93107d88ff3a 100644 --- a/arch/arm/mach-ep93xx/include/mach/ts72xx.h +++ b/arch/arm/mach-ep93xx/include/mach/ts72xx.h | |||
@@ -65,6 +65,8 @@ | |||
65 | #define TS72XX_RTC_DATA_PHYS_BASE 0x11700000 | 65 | #define TS72XX_RTC_DATA_PHYS_BASE 0x11700000 |
66 | #define TS72XX_RTC_DATA_SIZE 0x00001000 | 66 | #define TS72XX_RTC_DATA_SIZE 0x00001000 |
67 | 67 | ||
68 | #define TS72XX_WDT_CONTROL_PHYS_BASE 0x23800000 | ||
69 | #define TS72XX_WDT_FEED_PHYS_BASE 0x23c00000 | ||
68 | 70 | ||
69 | #ifndef __ASSEMBLY__ | 71 | #ifndef __ASSEMBLY__ |
70 | 72 | ||
diff --git a/arch/arm/mach-ep93xx/ts72xx.c b/arch/arm/mach-ep93xx/ts72xx.c index 259f7822ba52..fac1ec7a60fb 100644 --- a/arch/arm/mach-ep93xx/ts72xx.c +++ b/arch/arm/mach-ep93xx/ts72xx.c | |||
@@ -166,6 +166,26 @@ static struct platform_device ts72xx_rtc_device = { | |||
166 | .num_resources = 0, | 166 | .num_resources = 0, |
167 | }; | 167 | }; |
168 | 168 | ||
169 | static struct resource ts72xx_wdt_resources[] = { | ||
170 | { | ||
171 | .start = TS72XX_WDT_CONTROL_PHYS_BASE, | ||
172 | .end = TS72XX_WDT_CONTROL_PHYS_BASE + SZ_4K - 1, | ||
173 | .flags = IORESOURCE_MEM, | ||
174 | }, | ||
175 | { | ||
176 | .start = TS72XX_WDT_FEED_PHYS_BASE, | ||
177 | .end = TS72XX_WDT_FEED_PHYS_BASE + SZ_4K - 1, | ||
178 | .flags = IORESOURCE_MEM, | ||
179 | }, | ||
180 | }; | ||
181 | |||
182 | static struct platform_device ts72xx_wdt_device = { | ||
183 | .name = "ts72xx-wdt", | ||
184 | .id = -1, | ||
185 | .num_resources = ARRAY_SIZE(ts72xx_wdt_resources), | ||
186 | .resource = ts72xx_wdt_resources, | ||
187 | }; | ||
188 | |||
169 | static struct ep93xx_eth_data ts72xx_eth_data = { | 189 | static struct ep93xx_eth_data ts72xx_eth_data = { |
170 | .phy_id = 1, | 190 | .phy_id = 1, |
171 | }; | 191 | }; |
@@ -175,6 +195,7 @@ static void __init ts72xx_init_machine(void) | |||
175 | ep93xx_init_devices(); | 195 | ep93xx_init_devices(); |
176 | ts72xx_register_flash(); | 196 | ts72xx_register_flash(); |
177 | platform_device_register(&ts72xx_rtc_device); | 197 | platform_device_register(&ts72xx_rtc_device); |
198 | platform_device_register(&ts72xx_wdt_device); | ||
178 | 199 | ||
179 | ep93xx_register_eth(&ts72xx_eth_data, 1); | 200 | ep93xx_register_eth(&ts72xx_eth_data, 1); |
180 | } | 201 | } |
diff --git a/arch/arm/mach-ixp4xx/common-pci.c b/arch/arm/mach-ixp4xx/common-pci.c index c4a01594c761..e3181534c7f9 100644 --- a/arch/arm/mach-ixp4xx/common-pci.c +++ b/arch/arm/mach-ixp4xx/common-pci.c | |||
@@ -502,32 +502,6 @@ struct pci_bus * __devinit ixp4xx_scan_bus(int nr, struct pci_sys_data *sys) | |||
502 | return pci_scan_bus(sys->busnr, &ixp4xx_ops, sys); | 502 | return pci_scan_bus(sys->busnr, &ixp4xx_ops, sys); |
503 | } | 503 | } |
504 | 504 | ||
505 | /* | ||
506 | * We override these so we properly do dmabounce otherwise drivers | ||
507 | * are able to set the dma_mask to 0xffffffff and we can no longer | ||
508 | * trap bounces. :( | ||
509 | * | ||
510 | * We just return true on everyhing except for < 64MB in which case | ||
511 | * we will fail miseralby and die since we can't handle that case. | ||
512 | */ | ||
513 | int | ||
514 | pci_set_dma_mask(struct pci_dev *dev, u64 mask) | ||
515 | { | ||
516 | if (mask >= SZ_64M - 1 ) | ||
517 | return 0; | ||
518 | |||
519 | return -EIO; | ||
520 | } | ||
521 | |||
522 | int | ||
523 | pci_set_consistent_dma_mask(struct pci_dev *dev, u64 mask) | ||
524 | { | ||
525 | if (mask >= SZ_64M - 1 ) | ||
526 | return 0; | ||
527 | |||
528 | return -EIO; | ||
529 | } | ||
530 | |||
531 | EXPORT_SYMBOL(ixp4xx_pci_read); | 505 | EXPORT_SYMBOL(ixp4xx_pci_read); |
532 | EXPORT_SYMBOL(ixp4xx_pci_write); | 506 | EXPORT_SYMBOL(ixp4xx_pci_write); |
533 | 507 | ||
diff --git a/arch/arm/mach-ixp4xx/include/mach/hardware.h b/arch/arm/mach-ixp4xx/include/mach/hardware.h index f9d1c43e4a54..f91ca6d4fbe8 100644 --- a/arch/arm/mach-ixp4xx/include/mach/hardware.h +++ b/arch/arm/mach-ixp4xx/include/mach/hardware.h | |||
@@ -26,11 +26,6 @@ | |||
26 | #define PCIBIOS_MAX_MEM 0x4BFFFFFF | 26 | #define PCIBIOS_MAX_MEM 0x4BFFFFFF |
27 | #endif | 27 | #endif |
28 | 28 | ||
29 | /* | ||
30 | * We override the standard dma-mask routines for bouncing. | ||
31 | */ | ||
32 | #define HAVE_ARCH_PCI_SET_DMA_MASK | ||
33 | |||
34 | #define pcibios_assign_all_busses() 1 | 29 | #define pcibios_assign_all_busses() 1 |
35 | 30 | ||
36 | /* Register locations and bits */ | 31 | /* Register locations and bits */ |
diff --git a/arch/arm/mach-pxa/am300epd.c b/arch/arm/mach-pxa/am300epd.c index 4bd10a17332e..993d75e66390 100644 --- a/arch/arm/mach-pxa/am300epd.c +++ b/arch/arm/mach-pxa/am300epd.c | |||
@@ -288,7 +288,7 @@ int __init am300_init(void) | |||
288 | } | 288 | } |
289 | 289 | ||
290 | module_param(panel_type, uint, 0); | 290 | module_param(panel_type, uint, 0); |
291 | MODULE_PARM_DESC(panel_type, "Select the panel type: 6, 8, 97"); | 291 | MODULE_PARM_DESC(panel_type, "Select the panel type: 37, 6, 97"); |
292 | 292 | ||
293 | MODULE_DESCRIPTION("board driver for am300 epd kit"); | 293 | MODULE_DESCRIPTION("board driver for am300 epd kit"); |
294 | MODULE_AUTHOR("Jaya Kumar"); | 294 | MODULE_AUTHOR("Jaya Kumar"); |
diff --git a/arch/arm/mach-pxa/corgi_ssp.c b/arch/arm/mach-pxa/corgi_ssp.c index a5ee70735e04..1d9bc118ee32 100644 --- a/arch/arm/mach-pxa/corgi_ssp.c +++ b/arch/arm/mach-pxa/corgi_ssp.c | |||
@@ -204,7 +204,7 @@ void __init corgi_ssp_set_machinfo(struct corgissp_machinfo *machinfo) | |||
204 | ssp_machinfo = machinfo; | 204 | ssp_machinfo = machinfo; |
205 | } | 205 | } |
206 | 206 | ||
207 | static int __init corgi_ssp_probe(struct platform_device *dev) | 207 | static int __devinit corgi_ssp_probe(struct platform_device *dev) |
208 | { | 208 | { |
209 | int ret; | 209 | int ret; |
210 | 210 | ||
diff --git a/arch/arm/mach-pxa/include/mach/hardware.h b/arch/arm/mach-pxa/include/mach/hardware.h index e741bf1bfb2d..7515757d6911 100644 --- a/arch/arm/mach-pxa/include/mach/hardware.h +++ b/arch/arm/mach-pxa/include/mach/hardware.h | |||
@@ -314,7 +314,6 @@ extern unsigned long get_clock_tick_rate(void); | |||
314 | #define PCIBIOS_MIN_IO 0 | 314 | #define PCIBIOS_MIN_IO 0 |
315 | #define PCIBIOS_MIN_MEM 0 | 315 | #define PCIBIOS_MIN_MEM 0 |
316 | #define pcibios_assign_all_busses() 1 | 316 | #define pcibios_assign_all_busses() 1 |
317 | #define HAVE_ARCH_PCI_SET_DMA_MASK 1 | ||
318 | #endif | 317 | #endif |
319 | 318 | ||
320 | 319 | ||
diff --git a/arch/arm/mach-pxa/sharpsl_pm.c b/arch/arm/mach-pxa/sharpsl_pm.c index 67229a1ef55c..463d874bb867 100644 --- a/arch/arm/mach-pxa/sharpsl_pm.c +++ b/arch/arm/mach-pxa/sharpsl_pm.c | |||
@@ -900,7 +900,7 @@ static struct platform_suspend_ops sharpsl_pm_ops = { | |||
900 | }; | 900 | }; |
901 | #endif | 901 | #endif |
902 | 902 | ||
903 | static int __init sharpsl_pm_probe(struct platform_device *pdev) | 903 | static int __devinit sharpsl_pm_probe(struct platform_device *pdev) |
904 | { | 904 | { |
905 | int ret; | 905 | int ret; |
906 | 906 | ||
diff --git a/arch/arm/mach-s3c2410/h1940-bluetooth.c b/arch/arm/mach-s3c2410/h1940-bluetooth.c index b7d1f8d27bc2..a3f3c7b1ca38 100644 --- a/arch/arm/mach-s3c2410/h1940-bluetooth.c +++ b/arch/arm/mach-s3c2410/h1940-bluetooth.c | |||
@@ -56,7 +56,7 @@ static const struct rfkill_ops h1940bt_rfkill_ops = { | |||
56 | .set_block = h1940bt_set_block, | 56 | .set_block = h1940bt_set_block, |
57 | }; | 57 | }; |
58 | 58 | ||
59 | static int __init h1940bt_probe(struct platform_device *pdev) | 59 | static int __devinit h1940bt_probe(struct platform_device *pdev) |
60 | { | 60 | { |
61 | struct rfkill *rfk; | 61 | struct rfkill *rfk; |
62 | int ret = 0; | 62 | int ret = 0; |
diff --git a/arch/arm/mach-sa1100/jornada720_ssp.c b/arch/arm/mach-sa1100/jornada720_ssp.c index 506a5e5a9ad5..9b6dee5d16db 100644 --- a/arch/arm/mach-sa1100/jornada720_ssp.c +++ b/arch/arm/mach-sa1100/jornada720_ssp.c | |||
@@ -130,7 +130,7 @@ void jornada_ssp_end(void) | |||
130 | }; | 130 | }; |
131 | EXPORT_SYMBOL(jornada_ssp_end); | 131 | EXPORT_SYMBOL(jornada_ssp_end); |
132 | 132 | ||
133 | static int __init jornada_ssp_probe(struct platform_device *dev) | 133 | static int __devinit jornada_ssp_probe(struct platform_device *dev) |
134 | { | 134 | { |
135 | int ret; | 135 | int ret; |
136 | 136 | ||
diff --git a/arch/arm/mach-w90x900/cpu.h b/arch/arm/mach-w90x900/cpu.h index 4d58ba164e25..f8730b60bd76 100644 --- a/arch/arm/mach-w90x900/cpu.h +++ b/arch/arm/mach-w90x900/cpu.h | |||
@@ -57,3 +57,4 @@ extern struct platform_device nuc900_device_fmi; | |||
57 | extern struct platform_device nuc900_device_kpi; | 57 | extern struct platform_device nuc900_device_kpi; |
58 | extern struct platform_device nuc900_device_rtc; | 58 | extern struct platform_device nuc900_device_rtc; |
59 | extern struct platform_device nuc900_device_ts; | 59 | extern struct platform_device nuc900_device_ts; |
60 | extern struct platform_device nuc900_device_lcd; | ||
diff --git a/arch/arm/mach-w90x900/dev.c b/arch/arm/mach-w90x900/dev.c index ec711f4b4019..48876122df91 100644 --- a/arch/arm/mach-w90x900/dev.c +++ b/arch/arm/mach-w90x900/dev.c | |||
@@ -34,6 +34,7 @@ | |||
34 | #include <mach/regs-serial.h> | 34 | #include <mach/regs-serial.h> |
35 | #include <mach/nuc900_spi.h> | 35 | #include <mach/nuc900_spi.h> |
36 | #include <mach/map.h> | 36 | #include <mach/map.h> |
37 | #include <mach/fb.h> | ||
37 | 38 | ||
38 | #include "cpu.h" | 39 | #include "cpu.h" |
39 | 40 | ||
@@ -380,6 +381,47 @@ struct platform_device nuc900_device_kpi = { | |||
380 | .resource = nuc900_kpi_resource, | 381 | .resource = nuc900_kpi_resource, |
381 | }; | 382 | }; |
382 | 383 | ||
384 | #ifdef CONFIG_FB_NUC900 | ||
385 | |||
386 | static struct resource nuc900_lcd_resource[] = { | ||
387 | [0] = { | ||
388 | .start = W90X900_PA_LCD, | ||
389 | .end = W90X900_PA_LCD + W90X900_SZ_LCD - 1, | ||
390 | .flags = IORESOURCE_MEM, | ||
391 | }, | ||
392 | [1] = { | ||
393 | .start = IRQ_LCD, | ||
394 | .end = IRQ_LCD, | ||
395 | .flags = IORESOURCE_IRQ, | ||
396 | } | ||
397 | }; | ||
398 | |||
399 | static u64 nuc900_device_lcd_dmamask = -1; | ||
400 | struct platform_device nuc900_device_lcd = { | ||
401 | .name = "nuc900-lcd", | ||
402 | .id = -1, | ||
403 | .num_resources = ARRAY_SIZE(nuc900_lcd_resource), | ||
404 | .resource = nuc900_lcd_resource, | ||
405 | .dev = { | ||
406 | .dma_mask = &nuc900_device_lcd_dmamask, | ||
407 | .coherent_dma_mask = -1, | ||
408 | } | ||
409 | }; | ||
410 | |||
411 | void nuc900_fb_set_platdata(struct nuc900fb_mach_info *pd) | ||
412 | { | ||
413 | struct nuc900fb_mach_info *npd; | ||
414 | |||
415 | npd = kmalloc(sizeof(*npd), GFP_KERNEL); | ||
416 | if (npd) { | ||
417 | memcpy(npd, pd, sizeof(*npd)); | ||
418 | nuc900_device_lcd.dev.platform_data = npd; | ||
419 | } else { | ||
420 | printk(KERN_ERR "no memory for LCD platform data\n"); | ||
421 | } | ||
422 | } | ||
423 | #endif | ||
424 | |||
383 | /*Here should be your evb resourse,such as LCD*/ | 425 | /*Here should be your evb resourse,such as LCD*/ |
384 | 426 | ||
385 | static struct platform_device *nuc900_public_dev[] __initdata = { | 427 | static struct platform_device *nuc900_public_dev[] __initdata = { |
diff --git a/arch/arm/mach-w90x900/include/mach/fb.h b/arch/arm/mach-w90x900/include/mach/fb.h new file mode 100644 index 000000000000..cec5ece765ed --- /dev/null +++ b/arch/arm/mach-w90x900/include/mach/fb.h | |||
@@ -0,0 +1,83 @@ | |||
1 | /* linux/include/asm/arch-nuc900/fb.h | ||
2 | * | ||
3 | * Copyright (c) 2008 Nuvoton technology corporation | ||
4 | * All rights reserved. | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License as published by | ||
8 | * the Free Software Foundation; either version 2 of the License, or | ||
9 | * (at your option) any later version. | ||
10 | * | ||
11 | * Changelog: | ||
12 | * | ||
13 | * 2008/08/26 vincen.zswan modify this file for LCD. | ||
14 | */ | ||
15 | |||
16 | #ifndef __ASM_ARM_FB_H | ||
17 | #define __ASM_ARM_FB_H | ||
18 | |||
19 | |||
20 | |||
21 | /* LCD Controller Hardware Desc */ | ||
22 | struct nuc900fb_hw { | ||
23 | unsigned int lcd_dccs; | ||
24 | unsigned int lcd_device_ctrl; | ||
25 | unsigned int lcd_mpulcd_cmd; | ||
26 | unsigned int lcd_int_cs; | ||
27 | unsigned int lcd_crtc_size; | ||
28 | unsigned int lcd_crtc_dend; | ||
29 | unsigned int lcd_crtc_hr; | ||
30 | unsigned int lcd_crtc_hsync; | ||
31 | unsigned int lcd_crtc_vr; | ||
32 | unsigned int lcd_va_baddr0; | ||
33 | unsigned int lcd_va_baddr1; | ||
34 | unsigned int lcd_va_fbctrl; | ||
35 | unsigned int lcd_va_scale; | ||
36 | unsigned int lcd_va_test; | ||
37 | unsigned int lcd_va_win; | ||
38 | unsigned int lcd_va_stuff; | ||
39 | }; | ||
40 | |||
41 | /* LCD Display Description */ | ||
42 | struct nuc900fb_display { | ||
43 | /* LCD Image type */ | ||
44 | unsigned type; | ||
45 | |||
46 | /* LCD Screen Size */ | ||
47 | unsigned short width; | ||
48 | unsigned short height; | ||
49 | |||
50 | /* LCD Screen Info */ | ||
51 | unsigned short xres; | ||
52 | unsigned short yres; | ||
53 | unsigned short bpp; | ||
54 | |||
55 | unsigned long pixclock; | ||
56 | unsigned short left_margin; | ||
57 | unsigned short right_margin; | ||
58 | unsigned short hsync_len; | ||
59 | unsigned short upper_margin; | ||
60 | unsigned short lower_margin; | ||
61 | unsigned short vsync_len; | ||
62 | |||
63 | /* hardware special register value */ | ||
64 | unsigned int dccs; | ||
65 | unsigned int devctl; | ||
66 | unsigned int fbctrl; | ||
67 | unsigned int scale; | ||
68 | }; | ||
69 | |||
70 | struct nuc900fb_mach_info { | ||
71 | struct nuc900fb_display *displays; | ||
72 | unsigned num_displays; | ||
73 | unsigned default_display; | ||
74 | /* GPIO Setting Info */ | ||
75 | unsigned gpio_dir; | ||
76 | unsigned gpio_dir_mask; | ||
77 | unsigned gpio_data; | ||
78 | unsigned gpio_data_mask; | ||
79 | }; | ||
80 | |||
81 | extern void __init nuc900_fb_set_platdata(struct nuc900fb_mach_info *); | ||
82 | |||
83 | #endif /* __ASM_ARM_FB_H */ | ||
diff --git a/arch/arm/mach-w90x900/include/mach/regs-ldm.h b/arch/arm/mach-w90x900/include/mach/regs-ldm.h new file mode 100644 index 000000000000..e9d480a5b232 --- /dev/null +++ b/arch/arm/mach-w90x900/include/mach/regs-ldm.h | |||
@@ -0,0 +1,253 @@ | |||
1 | /* | ||
2 | * arch/arm/mach-w90x900/include/mach/regs-serial.h | ||
3 | * | ||
4 | * Copyright (c) 2009 Nuvoton technology corporation | ||
5 | * All rights reserved. | ||
6 | * | ||
7 | * This program is free software; you can redistribute it and/or modify | ||
8 | * it under the terms of the GNU General Public License as published by | ||
9 | * the Free Software Foundation; either version 2 of the License, or | ||
10 | * (at your option) any later version. | ||
11 | * | ||
12 | * Description: | ||
13 | * Nuvoton Display, LCM Register list | ||
14 | * Author: Wang Qiang (rurality.linux@gmail.com) 2009/12/11 | ||
15 | * | ||
16 | */ | ||
17 | |||
18 | |||
19 | #ifndef __ASM_ARM_W90X900_REGS_LDM_H | ||
20 | #define __ASM_ARM_W90X900_REGS_LDM_H | ||
21 | |||
22 | #include <mach/map.h> | ||
23 | |||
24 | /* Display Controller Control/Status Register */ | ||
25 | #define REG_LCM_DCCS (0x00) | ||
26 | |||
27 | #define LCM_DCCS_ENG_RST (1 << 0) | ||
28 | #define LCM_DCCS_VA_EN (1 << 1) | ||
29 | #define LCM_DCCS_OSD_EN (1 << 2) | ||
30 | #define LCM_DCCS_DISP_OUT_EN (1 << 3) | ||
31 | #define LCM_DCCS_DISP_INT_EN (1 << 4) | ||
32 | #define LCM_DCCS_CMD_ON (1 << 5) | ||
33 | #define LCM_DCCS_FIELD_INTR (1 << 6) | ||
34 | #define LCM_DCCS_SINGLE (1 << 7) | ||
35 | |||
36 | enum LCM_DCCS_VA_SRC { | ||
37 | LCM_DCCS_VA_SRC_YUV422 = (0 << 8), | ||
38 | LCM_DCCS_VA_SRC_YCBCR422 = (1 << 8), | ||
39 | LCM_DCCS_VA_SRC_RGB888 = (2 << 8), | ||
40 | LCM_DCCS_VA_SRC_RGB666 = (3 << 8), | ||
41 | LCM_DCCS_VA_SRC_RGB565 = (4 << 8), | ||
42 | LCM_DCCS_VA_SRC_RGB444LOW = (5 << 8), | ||
43 | LCM_DCCS_VA_SRC_RGB444HIGH = (7 << 8) | ||
44 | }; | ||
45 | |||
46 | |||
47 | /* Display Device Control Register */ | ||
48 | #define REG_LCM_DEV_CTRL (0x04) | ||
49 | |||
50 | enum LCM_DEV_CTRL_SWAP_YCbCr { | ||
51 | LCM_DEV_CTRL_SWAP_UYVY = (0 << 1), | ||
52 | LCM_DEV_CTRL_SWAP_YUYV = (1 << 1), | ||
53 | LCM_DEV_CTRL_SWAP_VYUY = (2 << 1), | ||
54 | LCM_DEV_CTRL_SWAP_YVYU = (3 << 1) | ||
55 | }; | ||
56 | |||
57 | enum LCM_DEV_CTRL_RGB_SHIFT { | ||
58 | LCM_DEV_CTRL_RGB_SHIFT_NOT = (0 << 3), | ||
59 | LCM_DEV_CTRL_RGB_SHIFT_ONECYCLE = (1 << 3), | ||
60 | LCM_DEV_CTRL_RGB_SHIFT_TWOCYCLE = (2 << 3), | ||
61 | LCM_DEV_CTRL_RGB_SHIFT_NOT_DEF = (3 << 3) | ||
62 | }; | ||
63 | |||
64 | enum LCM_DEV_CTRL_DEVICE { | ||
65 | LCM_DEV_CTRL_DEVICE_YUV422 = (0 << 5), | ||
66 | LCM_DEV_CTRL_DEVICE_YUV444 = (1 << 5), | ||
67 | LCM_DEV_CTRL_DEVICE_UNIPAC = (4 << 5), | ||
68 | LCM_DEV_CTRL_DEVICE_SEIKO_EPSON = (5 << 5), | ||
69 | LCM_DEV_CTRL_DEVICE_HIGH_COLOR = (6 << 5), | ||
70 | LCM_DEV_CTRL_DEVICE_MPU = (7 << 5) | ||
71 | }; | ||
72 | |||
73 | #define LCM_DEV_CTRL_LCD_DDA (8) | ||
74 | #define LCM_DEV_CTRL_YUV2CCIR (16) | ||
75 | |||
76 | enum LCM_DEV_CTRL_LCD_SEL { | ||
77 | LCM_DEV_CTRL_LCD_SEL_RGB_GBR = (0 << 17), | ||
78 | LCM_DEV_CTRL_LCD_SEL_BGR_RBG = (1 << 17), | ||
79 | LCM_DEV_CTRL_LCD_SEL_GBR_RGB = (2 << 17), | ||
80 | LCM_DEV_CTRL_LCD_SEL_RBG_BGR = (3 << 17) | ||
81 | }; | ||
82 | |||
83 | enum LCM_DEV_CTRL_FAL_D { | ||
84 | LCM_DEV_CTRL_FAL_D_FALLING = (0 << 19), | ||
85 | LCM_DEV_CTRL_FAL_D_RISING = (1 << 19), | ||
86 | }; | ||
87 | |||
88 | enum LCM_DEV_CTRL_H_POL { | ||
89 | LCM_DEV_CTRL_H_POL_LOW = (0 << 20), | ||
90 | LCM_DEV_CTRL_H_POL_HIGH = (1 << 20), | ||
91 | }; | ||
92 | |||
93 | enum LCM_DEV_CTRL_V_POL { | ||
94 | LCM_DEV_CTRL_V_POL_LOW = (0 << 21), | ||
95 | LCM_DEV_CTRL_V_POL_HIGH = (1 << 21), | ||
96 | }; | ||
97 | |||
98 | enum LCM_DEV_CTRL_VR_LACE { | ||
99 | LCM_DEV_CTRL_VR_LACE_NINTERLACE = (0 << 22), | ||
100 | LCM_DEV_CTRL_VR_LACE_INTERLACE = (1 << 22), | ||
101 | }; | ||
102 | |||
103 | enum LCM_DEV_CTRL_LACE { | ||
104 | LCM_DEV_CTRL_LACE_NINTERLACE = (0 << 23), | ||
105 | LCM_DEV_CTRL_LACE_INTERLACE = (1 << 23), | ||
106 | }; | ||
107 | |||
108 | enum LCM_DEV_CTRL_RGB_SCALE { | ||
109 | LCM_DEV_CTRL_RGB_SCALE_4096 = (0 << 24), | ||
110 | LCM_DEV_CTRL_RGB_SCALE_65536 = (1 << 24), | ||
111 | LCM_DEV_CTRL_RGB_SCALE_262144 = (2 << 24), | ||
112 | LCM_DEV_CTRL_RGB_SCALE_16777216 = (3 << 24), | ||
113 | }; | ||
114 | |||
115 | enum LCM_DEV_CTRL_DBWORD { | ||
116 | LCM_DEV_CTRL_DBWORD_HALFWORD = (0 << 26), | ||
117 | LCM_DEV_CTRL_DBWORD_FULLWORD = (1 << 26), | ||
118 | }; | ||
119 | |||
120 | enum LCM_DEV_CTRL_MPU68 { | ||
121 | LCM_DEV_CTRL_MPU68_80_SERIES = (0 << 27), | ||
122 | LCM_DEV_CTRL_MPU68_68_SERIES = (1 << 27), | ||
123 | }; | ||
124 | |||
125 | enum LCM_DEV_CTRL_DE_POL { | ||
126 | LCM_DEV_CTRL_DE_POL_HIGH = (0 << 28), | ||
127 | LCM_DEV_CTRL_DE_POL_LOW = (1 << 28), | ||
128 | }; | ||
129 | |||
130 | #define LCM_DEV_CTRL_CMD16 (29) | ||
131 | #define LCM_DEV_CTRL_CM16t18 (30) | ||
132 | #define LCM_DEV_CTRL_CMD_LOW (31) | ||
133 | |||
134 | /* MPU-Interface LCD Write Command */ | ||
135 | #define REG_LCM_MPU_CMD (0x08) | ||
136 | |||
137 | /* Interrupt Control/Status Register */ | ||
138 | #define REG_LCM_INT_CS (0x0c) | ||
139 | #define LCM_INT_CS_DISP_F_EN (1 << 0) | ||
140 | #define LCM_INT_CS_UNDERRUN_EN (1 << 1) | ||
141 | #define LCM_INT_CS_BUS_ERROR_INT (1 << 28) | ||
142 | #define LCM_INT_CS_UNDERRUN_INT (1 << 29) | ||
143 | #define LCM_INT_CS_DISP_F_STATUS (1 << 30) | ||
144 | #define LCM_INT_CS_DISP_F_INT (1 << 31) | ||
145 | |||
146 | /* CRTC Display Size Control Register */ | ||
147 | #define REG_LCM_CRTC_SIZE (0x10) | ||
148 | #define LCM_CRTC_SIZE_VTTVAL(x) ((x) << 16) | ||
149 | #define LCM_CRTC_SIZE_HTTVAL(x) ((x) << 0) | ||
150 | |||
151 | /* CRTC Display Enable End */ | ||
152 | #define REG_LCM_CRTC_DEND (0x14) | ||
153 | #define LCM_CRTC_DEND_VDENDVAL(x) ((x) << 16) | ||
154 | #define LCM_CRTC_DEND_HDENDVAL(x) ((x) << 0) | ||
155 | |||
156 | /* CRTC Internal Horizontal Retrace Control Register */ | ||
157 | #define REG_LCM_CRTC_HR (0x18) | ||
158 | #define LCM_CRTC_HR_EVAL(x) ((x) << 16) | ||
159 | #define LCM_CRTC_HR_SVAL(x) ((x) << 0) | ||
160 | |||
161 | /* CRTC Horizontal Sync Control Register */ | ||
162 | #define REG_LCM_CRTC_HSYNC (0x1C) | ||
163 | #define LCM_CRTC_HSYNC_SHIFTVAL(x) ((x) << 30) | ||
164 | #define LCM_CRTC_HSYNC_EVAL(x) ((x) << 16) | ||
165 | #define LCM_CRTC_HSYNC_SVAL(x) ((x) << 0) | ||
166 | |||
167 | /* CRTC Internal Vertical Retrace Control Register */ | ||
168 | #define REG_LCM_CRTC_VR (0x20) | ||
169 | #define LCM_CRTC_VR_EVAL(x) ((x) << 16) | ||
170 | #define LCM_CRTC_VR_SVAL(x) ((x) << 0) | ||
171 | |||
172 | /* Video Stream Frame Buffer-0 Starting Address */ | ||
173 | #define REG_LCM_VA_BADDR0 (0x24) | ||
174 | |||
175 | /* Video Stream Frame Buffer-1 Starting Address */ | ||
176 | #define REG_LCM_VA_BADDR1 (0x28) | ||
177 | |||
178 | /* Video Stream Frame Buffer Control Register */ | ||
179 | #define REG_LCM_VA_FBCTRL (0x2C) | ||
180 | #define LCM_VA_FBCTRL_IO_REGION_HALF (1 << 28) | ||
181 | #define LCM_VA_FBCTRL_FIELD_DUAL (1 << 29) | ||
182 | #define LCM_VA_FBCTRL_START_BUF (1 << 30) | ||
183 | #define LCM_VA_FBCTRL_DB_EN (1 << 31) | ||
184 | |||
185 | /* Video Stream Scaling Control Register */ | ||
186 | #define REG_LCM_VA_SCALE (0x30) | ||
187 | #define LCM_VA_SCALE_XCOPY_INTERPOLATION (0 << 15) | ||
188 | #define LCM_VA_SCALE_XCOPY_DUPLICATION (1 << 15) | ||
189 | |||
190 | /* Image Stream Active Window Coordinates */ | ||
191 | #define REG_LCM_VA_WIN (0x38) | ||
192 | |||
193 | /* Image Stream Stuff Pixel */ | ||
194 | #define REG_LCM_VA_STUFF (0x3C) | ||
195 | |||
196 | /* OSD Window Starting Coordinates */ | ||
197 | #define REG_LCM_OSD_WINS (0x40) | ||
198 | |||
199 | /* OSD Window Ending Coordinates */ | ||
200 | #define REG_LCM_OSD_WINE (0x44) | ||
201 | |||
202 | /* OSD Stream Frame Buffer Starting Address */ | ||
203 | #define REG_LCM_OSD_BADDR (0x48) | ||
204 | |||
205 | /* OSD Stream Frame Buffer Control Register */ | ||
206 | #define REG_LCM_OSD_FBCTRL (0x4c) | ||
207 | |||
208 | /* OSD Overlay Control Register */ | ||
209 | #define REG_LCM_OSD_OVERLAY (0x50) | ||
210 | |||
211 | /* OSD Overlay Color-Key Pattern Register */ | ||
212 | #define REG_LCM_OSD_CKEY (0x54) | ||
213 | |||
214 | /* OSD Overlay Color-Key Mask Register */ | ||
215 | #define REG_LCM_OSD_CMASK (0x58) | ||
216 | |||
217 | /* OSD Window Skip1 Register */ | ||
218 | #define REG_LCM_OSD_SKIP1 (0x5C) | ||
219 | |||
220 | /* OSD Window Skip2 Register */ | ||
221 | #define REG_LCM_OSD_SKIP2 (0x60) | ||
222 | |||
223 | /* OSD horizontal up scaling control register */ | ||
224 | #define REG_LCM_OSD_SCALE (0x64) | ||
225 | |||
226 | /* MPU Vsync control register */ | ||
227 | #define REG_LCM_MPU_VSYNC (0x68) | ||
228 | |||
229 | /* Hardware cursor control Register */ | ||
230 | #define REG_LCM_HC_CTRL (0x6C) | ||
231 | |||
232 | /* Hardware cursot tip point potison on va picture */ | ||
233 | #define REG_LCM_HC_POS (0x70) | ||
234 | |||
235 | /* Hardware Cursor Window Buffer Control Register */ | ||
236 | #define REG_LCM_HC_WBCTRL (0x74) | ||
237 | |||
238 | /* Hardware cursor memory base address register */ | ||
239 | #define REG_LCM_HC_BADDR (0x78) | ||
240 | |||
241 | /* Hardware cursor color ram register mapped to bpp = 0 */ | ||
242 | #define REG_LCM_HC_COLOR0 (0x7C) | ||
243 | |||
244 | /* Hardware cursor color ram register mapped to bpp = 1 */ | ||
245 | #define REG_LCM_HC_COLOR1 (0x80) | ||
246 | |||
247 | /* Hardware cursor color ram register mapped to bpp = 2 */ | ||
248 | #define REG_LCM_HC_COLOR2 (0x84) | ||
249 | |||
250 | /* Hardware cursor color ram register mapped to bpp = 3 */ | ||
251 | #define REG_LCM_HC_COLOR3 (0x88) | ||
252 | |||
253 | #endif /* __ASM_ARM_W90X900_REGS_LDM_H */ | ||
diff --git a/arch/arm/mach-w90x900/mach-nuc950evb.c b/arch/arm/mach-w90x900/mach-nuc950evb.c index cef903bcccd1..b3edc3cccf52 100644 --- a/arch/arm/mach-w90x900/mach-nuc950evb.c +++ b/arch/arm/mach-w90x900/mach-nuc950evb.c | |||
@@ -10,6 +10,8 @@ | |||
10 | * This program is free software; you can redistribute it and/or | 10 | * This program is free software; you can redistribute it and/or |
11 | * modify it under the terms of the GNU General Public License as | 11 | * modify it under the terms of the GNU General Public License as |
12 | * published by the Free Software Foundation;version 2 of the License. | 12 | * published by the Free Software Foundation;version 2 of the License. |
13 | * history: | ||
14 | * Wang Qiang (rurality.linux@gmail.com) add LCD support | ||
13 | * | 15 | * |
14 | */ | 16 | */ |
15 | 17 | ||
@@ -18,9 +20,51 @@ | |||
18 | #include <asm/mach/map.h> | 20 | #include <asm/mach/map.h> |
19 | #include <asm/mach-types.h> | 21 | #include <asm/mach-types.h> |
20 | #include <mach/map.h> | 22 | #include <mach/map.h> |
23 | #include <mach/regs-ldm.h> | ||
24 | #include <mach/fb.h> | ||
21 | 25 | ||
22 | #include "nuc950.h" | 26 | #include "nuc950.h" |
23 | 27 | ||
28 | #ifdef CONFIG_FB_NUC900 | ||
29 | /* LCD Controller */ | ||
30 | static struct nuc900fb_display __initdata nuc950_lcd_info[] = { | ||
31 | /* Giantplus Technology GPM1040A0 320x240 Color TFT LCD */ | ||
32 | [0] = { | ||
33 | .type = LCM_DCCS_VA_SRC_RGB565, | ||
34 | .width = 320, | ||
35 | .height = 240, | ||
36 | .xres = 320, | ||
37 | .yres = 240, | ||
38 | .bpp = 16, | ||
39 | .pixclock = 200000, | ||
40 | .left_margin = 34, | ||
41 | .right_margin = 54, | ||
42 | .hsync_len = 10, | ||
43 | .upper_margin = 18, | ||
44 | .lower_margin = 4, | ||
45 | .vsync_len = 1, | ||
46 | .dccs = 0x8e00041a, | ||
47 | .devctl = 0x060800c0, | ||
48 | .fbctrl = 0x00a000a0, | ||
49 | .scale = 0x04000400, | ||
50 | }, | ||
51 | }; | ||
52 | |||
53 | static struct nuc900fb_mach_info nuc950_fb_info __initdata = { | ||
54 | #if defined(CONFIG_GPM1040A0_320X240) | ||
55 | .displays = &nuc950_lcd_info[0], | ||
56 | #else | ||
57 | .displays = nuc950_lcd_info, | ||
58 | #endif | ||
59 | .num_displays = ARRAY_SIZE(nuc950_lcd_info), | ||
60 | .default_display = 0, | ||
61 | .gpio_dir = 0x00000004, | ||
62 | .gpio_dir_mask = 0xFFFFFFFD, | ||
63 | .gpio_data = 0x00000004, | ||
64 | .gpio_data_mask = 0xFFFFFFFD, | ||
65 | }; | ||
66 | #endif | ||
67 | |||
24 | static void __init nuc950evb_map_io(void) | 68 | static void __init nuc950evb_map_io(void) |
25 | { | 69 | { |
26 | nuc950_map_io(); | 70 | nuc950_map_io(); |
@@ -30,6 +74,9 @@ static void __init nuc950evb_map_io(void) | |||
30 | static void __init nuc950evb_init(void) | 74 | static void __init nuc950evb_init(void) |
31 | { | 75 | { |
32 | nuc950_board_init(); | 76 | nuc950_board_init(); |
77 | #ifdef CONFIG_FB_NUC900 | ||
78 | nuc900_fb_set_platdata(&nuc950_fb_info); | ||
79 | #endif | ||
33 | } | 80 | } |
34 | 81 | ||
35 | MACHINE_START(W90P950EVB, "W90P950EVB") | 82 | MACHINE_START(W90P950EVB, "W90P950EVB") |
diff --git a/arch/arm/mach-w90x900/nuc950.c b/arch/arm/mach-w90x900/nuc950.c index 149508116d18..4d1f1ab044c4 100644 --- a/arch/arm/mach-w90x900/nuc950.c +++ b/arch/arm/mach-w90x900/nuc950.c | |||
@@ -18,6 +18,7 @@ | |||
18 | #include <linux/platform_device.h> | 18 | #include <linux/platform_device.h> |
19 | #include <asm/mach/map.h> | 19 | #include <asm/mach/map.h> |
20 | #include <mach/hardware.h> | 20 | #include <mach/hardware.h> |
21 | |||
21 | #include "cpu.h" | 22 | #include "cpu.h" |
22 | 23 | ||
23 | /* define specific CPU platform device */ | 24 | /* define specific CPU platform device */ |
@@ -25,6 +26,9 @@ | |||
25 | static struct platform_device *nuc950_dev[] __initdata = { | 26 | static struct platform_device *nuc950_dev[] __initdata = { |
26 | &nuc900_device_kpi, | 27 | &nuc900_device_kpi, |
27 | &nuc900_device_fmi, | 28 | &nuc900_device_fmi, |
29 | #ifdef CONFIG_FB_NUC900 | ||
30 | &nuc900_device_lcd, | ||
31 | #endif | ||
28 | }; | 32 | }; |
29 | 33 | ||
30 | /* define specific CPU platform io map */ | 34 | /* define specific CPU platform io map */ |
diff --git a/arch/avr32/include/asm/ptrace.h b/arch/avr32/include/asm/ptrace.h index 9e2d44f4e0fe..e53dd0d900f5 100644 --- a/arch/avr32/include/asm/ptrace.h +++ b/arch/avr32/include/asm/ptrace.h | |||
@@ -124,6 +124,8 @@ struct pt_regs { | |||
124 | 124 | ||
125 | #include <asm/ocd.h> | 125 | #include <asm/ocd.h> |
126 | 126 | ||
127 | #define arch_has_single_step() (1) | ||
128 | |||
127 | #define arch_ptrace_attach(child) ocd_enable(child) | 129 | #define arch_ptrace_attach(child) ocd_enable(child) |
128 | 130 | ||
129 | #define user_mode(regs) (((regs)->sr & MODE_MASK) == MODE_USER) | 131 | #define user_mode(regs) (((regs)->sr & MODE_MASK) == MODE_USER) |
diff --git a/arch/avr32/kernel/ptrace.c b/arch/avr32/kernel/ptrace.c index 1fed38fcf594..dd5b882aab40 100644 --- a/arch/avr32/kernel/ptrace.c +++ b/arch/avr32/kernel/ptrace.c | |||
@@ -28,9 +28,9 @@ static struct pt_regs *get_user_regs(struct task_struct *tsk) | |||
28 | THREAD_SIZE - sizeof(struct pt_regs)); | 28 | THREAD_SIZE - sizeof(struct pt_regs)); |
29 | } | 29 | } |
30 | 30 | ||
31 | static void ptrace_single_step(struct task_struct *tsk) | 31 | static void user_enable_single_step(struct task_struct *tsk) |
32 | { | 32 | { |
33 | pr_debug("ptrace_single_step: pid=%u, PC=0x%08lx, SR=0x%08lx\n", | 33 | pr_debug("user_enable_single_step: pid=%u, PC=0x%08lx, SR=0x%08lx\n", |
34 | tsk->pid, task_pt_regs(tsk)->pc, task_pt_regs(tsk)->sr); | 34 | tsk->pid, task_pt_regs(tsk)->pc, task_pt_regs(tsk)->sr); |
35 | 35 | ||
36 | /* | 36 | /* |
@@ -49,6 +49,11 @@ static void ptrace_single_step(struct task_struct *tsk) | |||
49 | set_tsk_thread_flag(tsk, TIF_SINGLE_STEP); | 49 | set_tsk_thread_flag(tsk, TIF_SINGLE_STEP); |
50 | } | 50 | } |
51 | 51 | ||
52 | void user_disable_single_step(struct task_struct *child) | ||
53 | { | ||
54 | /* XXX(hch): a no-op here seems wrong.. */ | ||
55 | } | ||
56 | |||
52 | /* | 57 | /* |
53 | * Called by kernel/ptrace.c when detaching | 58 | * Called by kernel/ptrace.c when detaching |
54 | * | 59 | * |
@@ -167,50 +172,6 @@ long arch_ptrace(struct task_struct *child, long request, long addr, long data) | |||
167 | ret = ptrace_write_user(child, addr, data); | 172 | ret = ptrace_write_user(child, addr, data); |
168 | break; | 173 | break; |
169 | 174 | ||
170 | /* continue and stop at next (return from) syscall */ | ||
171 | case PTRACE_SYSCALL: | ||
172 | /* restart after signal */ | ||
173 | case PTRACE_CONT: | ||
174 | ret = -EIO; | ||
175 | if (!valid_signal(data)) | ||
176 | break; | ||
177 | if (request == PTRACE_SYSCALL) | ||
178 | set_tsk_thread_flag(child, TIF_SYSCALL_TRACE); | ||
179 | else | ||
180 | clear_tsk_thread_flag(child, TIF_SYSCALL_TRACE); | ||
181 | child->exit_code = data; | ||
182 | /* XXX: Are we sure no breakpoints are active here? */ | ||
183 | wake_up_process(child); | ||
184 | ret = 0; | ||
185 | break; | ||
186 | |||
187 | /* | ||
188 | * Make the child exit. Best I can do is send it a | ||
189 | * SIGKILL. Perhaps it should be put in the status that it | ||
190 | * wants to exit. | ||
191 | */ | ||
192 | case PTRACE_KILL: | ||
193 | ret = 0; | ||
194 | if (child->exit_state == EXIT_ZOMBIE) | ||
195 | break; | ||
196 | child->exit_code = SIGKILL; | ||
197 | wake_up_process(child); | ||
198 | break; | ||
199 | |||
200 | /* | ||
201 | * execute single instruction. | ||
202 | */ | ||
203 | case PTRACE_SINGLESTEP: | ||
204 | ret = -EIO; | ||
205 | if (!valid_signal(data)) | ||
206 | break; | ||
207 | clear_tsk_thread_flag(child, TIF_SYSCALL_TRACE); | ||
208 | ptrace_single_step(child); | ||
209 | child->exit_code = data; | ||
210 | wake_up_process(child); | ||
211 | ret = 0; | ||
212 | break; | ||
213 | |||
214 | case PTRACE_GETREGS: | 175 | case PTRACE_GETREGS: |
215 | ret = ptrace_getregs(child, (void __user *)data); | 176 | ret = ptrace_getregs(child, (void __user *)data); |
216 | break; | 177 | break; |
diff --git a/arch/blackfin/include/asm/dma-mapping.h b/arch/blackfin/include/asm/dma-mapping.h index f9172ff30e5c..413a30314a6f 100644 --- a/arch/blackfin/include/asm/dma-mapping.h +++ b/arch/blackfin/include/asm/dma-mapping.h | |||
@@ -65,13 +65,6 @@ _dma_sync(dma_addr_t addr, size_t size, enum dma_data_direction dir) | |||
65 | } | 65 | } |
66 | } | 66 | } |
67 | 67 | ||
68 | /* | ||
69 | * Map a single buffer of the indicated size for DMA in streaming mode. | ||
70 | * The 32-bit bus address to use is returned. | ||
71 | * | ||
72 | * Once the device is given the dma address, the device owns this memory | ||
73 | * until either pci_unmap_single or pci_dma_sync_single is performed. | ||
74 | */ | ||
75 | static inline dma_addr_t | 68 | static inline dma_addr_t |
76 | dma_map_single(struct device *dev, void *ptr, size_t size, | 69 | dma_map_single(struct device *dev, void *ptr, size_t size, |
77 | enum dma_data_direction dir) | 70 | enum dma_data_direction dir) |
@@ -88,14 +81,6 @@ dma_map_page(struct device *dev, struct page *page, | |||
88 | return dma_map_single(dev, page_address(page) + offset, size, dir); | 81 | return dma_map_single(dev, page_address(page) + offset, size, dir); |
89 | } | 82 | } |
90 | 83 | ||
91 | /* | ||
92 | * Unmap a single streaming mode DMA translation. The dma_addr and size | ||
93 | * must match what was provided for in a previous pci_map_single call. All | ||
94 | * other usages are undefined. | ||
95 | * | ||
96 | * After this call, reads by the cpu to the buffer are guarenteed to see | ||
97 | * whatever the device wrote there. | ||
98 | */ | ||
99 | static inline void | 84 | static inline void |
100 | dma_unmap_single(struct device *dev, dma_addr_t dma_addr, size_t size, | 85 | dma_unmap_single(struct device *dev, dma_addr_t dma_addr, size_t size, |
101 | enum dma_data_direction dir) | 86 | enum dma_data_direction dir) |
@@ -110,30 +95,9 @@ dma_unmap_page(struct device *dev, dma_addr_t dma_addr, size_t size, | |||
110 | dma_unmap_single(dev, dma_addr, size, dir); | 95 | dma_unmap_single(dev, dma_addr, size, dir); |
111 | } | 96 | } |
112 | 97 | ||
113 | /* | ||
114 | * Map a set of buffers described by scatterlist in streaming | ||
115 | * mode for DMA. This is the scather-gather version of the | ||
116 | * above pci_map_single interface. Here the scatter gather list | ||
117 | * elements are each tagged with the appropriate dma address | ||
118 | * and length. They are obtained via sg_dma_{address,length}(SG). | ||
119 | * | ||
120 | * NOTE: An implementation may be able to use a smaller number of | ||
121 | * DMA address/length pairs than there are SG table elements. | ||
122 | * (for example via virtual mapping capabilities) | ||
123 | * The routine returns the number of addr/length pairs actually | ||
124 | * used, at most nents. | ||
125 | * | ||
126 | * Device ownership issues as mentioned above for pci_map_single are | ||
127 | * the same here. | ||
128 | */ | ||
129 | extern int dma_map_sg(struct device *dev, struct scatterlist *sg, int nents, | 98 | extern int dma_map_sg(struct device *dev, struct scatterlist *sg, int nents, |
130 | enum dma_data_direction dir); | 99 | enum dma_data_direction dir); |
131 | 100 | ||
132 | /* | ||
133 | * Unmap a set of streaming mode DMA translations. | ||
134 | * Again, cpu read rules concerning calls here are the same as for | ||
135 | * pci_unmap_single() above. | ||
136 | */ | ||
137 | static inline void | 101 | static inline void |
138 | dma_unmap_sg(struct device *dev, struct scatterlist *sg, | 102 | dma_unmap_sg(struct device *dev, struct scatterlist *sg, |
139 | int nhwentries, enum dma_data_direction dir) | 103 | int nhwentries, enum dma_data_direction dir) |
diff --git a/arch/cris/arch-v10/kernel/entry.S b/arch/cris/arch-v10/kernel/entry.S index c52bef39e250..0d6420d087fd 100644 --- a/arch/cris/arch-v10/kernel/entry.S +++ b/arch/cris/arch-v10/kernel/entry.S | |||
@@ -692,7 +692,7 @@ sys_call_table: | |||
692 | .long sys_swapon | 692 | .long sys_swapon |
693 | .long sys_reboot | 693 | .long sys_reboot |
694 | .long sys_old_readdir | 694 | .long sys_old_readdir |
695 | .long old_mmap /* 90 */ | 695 | .long sys_old_mmap /* 90 */ |
696 | .long sys_munmap | 696 | .long sys_munmap |
697 | .long sys_truncate | 697 | .long sys_truncate |
698 | .long sys_ftruncate | 698 | .long sys_ftruncate |
diff --git a/arch/cris/arch-v10/kernel/ptrace.c b/arch/cris/arch-v10/kernel/ptrace.c index ee505b2eb4db..e70c804e9377 100644 --- a/arch/cris/arch-v10/kernel/ptrace.c +++ b/arch/cris/arch-v10/kernel/ptrace.c | |||
@@ -127,57 +127,6 @@ long arch_ptrace(struct task_struct *child, long request, long addr, long data) | |||
127 | ret = 0; | 127 | ret = 0; |
128 | break; | 128 | break; |
129 | 129 | ||
130 | case PTRACE_SYSCALL: | ||
131 | case PTRACE_CONT: | ||
132 | ret = -EIO; | ||
133 | |||
134 | if (!valid_signal(data)) | ||
135 | break; | ||
136 | |||
137 | if (request == PTRACE_SYSCALL) { | ||
138 | set_tsk_thread_flag(child, TIF_SYSCALL_TRACE); | ||
139 | } | ||
140 | else { | ||
141 | clear_tsk_thread_flag(child, TIF_SYSCALL_TRACE); | ||
142 | } | ||
143 | |||
144 | child->exit_code = data; | ||
145 | |||
146 | /* TODO: make sure any pending breakpoint is killed */ | ||
147 | wake_up_process(child); | ||
148 | ret = 0; | ||
149 | |||
150 | break; | ||
151 | |||
152 | /* Make the child exit by sending it a sigkill. */ | ||
153 | case PTRACE_KILL: | ||
154 | ret = 0; | ||
155 | |||
156 | if (child->exit_state == EXIT_ZOMBIE) | ||
157 | break; | ||
158 | |||
159 | child->exit_code = SIGKILL; | ||
160 | |||
161 | /* TODO: make sure any pending breakpoint is killed */ | ||
162 | wake_up_process(child); | ||
163 | break; | ||
164 | |||
165 | /* Set the trap flag. */ | ||
166 | case PTRACE_SINGLESTEP: | ||
167 | ret = -EIO; | ||
168 | |||
169 | if (!valid_signal(data)) | ||
170 | break; | ||
171 | |||
172 | clear_tsk_thread_flag(child, TIF_SYSCALL_TRACE); | ||
173 | |||
174 | /* TODO: set some clever breakpoint mechanism... */ | ||
175 | |||
176 | child->exit_code = data; | ||
177 | wake_up_process(child); | ||
178 | ret = 0; | ||
179 | break; | ||
180 | |||
181 | /* Get all GP registers from the child. */ | 130 | /* Get all GP registers from the child. */ |
182 | case PTRACE_GETREGS: { | 131 | case PTRACE_GETREGS: { |
183 | int i; | 132 | int i; |
diff --git a/arch/cris/arch-v32/kernel/entry.S b/arch/cris/arch-v32/kernel/entry.S index 435b9671bd4b..1f39861eac8c 100644 --- a/arch/cris/arch-v32/kernel/entry.S +++ b/arch/cris/arch-v32/kernel/entry.S | |||
@@ -615,7 +615,7 @@ sys_call_table: | |||
615 | .long sys_swapon | 615 | .long sys_swapon |
616 | .long sys_reboot | 616 | .long sys_reboot |
617 | .long sys_old_readdir | 617 | .long sys_old_readdir |
618 | .long old_mmap /* 90 */ | 618 | .long sys_old_mmap /* 90 */ |
619 | .long sys_munmap | 619 | .long sys_munmap |
620 | .long sys_truncate | 620 | .long sys_truncate |
621 | .long sys_ftruncate | 621 | .long sys_ftruncate |
diff --git a/arch/cris/arch-v32/kernel/ptrace.c b/arch/cris/arch-v32/kernel/ptrace.c index dd401473f5b5..f4ebd1e7d0f5 100644 --- a/arch/cris/arch-v32/kernel/ptrace.c +++ b/arch/cris/arch-v32/kernel/ptrace.c | |||
@@ -78,6 +78,35 @@ int put_reg(struct task_struct *task, unsigned int regno, unsigned long data) | |||
78 | return 0; | 78 | return 0; |
79 | } | 79 | } |
80 | 80 | ||
81 | void user_enable_single_step(struct task_struct *child) | ||
82 | { | ||
83 | unsigned long tmp; | ||
84 | |||
85 | /* | ||
86 | * Set up SPC if not set already (in which case we have no other | ||
87 | * choice but to trust it). | ||
88 | */ | ||
89 | if (!get_reg(child, PT_SPC)) { | ||
90 | /* In case we're stopped in a delay slot. */ | ||
91 | tmp = get_reg(child, PT_ERP) & ~1; | ||
92 | put_reg(child, PT_SPC, tmp); | ||
93 | } | ||
94 | tmp = get_reg(child, PT_CCS) | SBIT_USER; | ||
95 | put_reg(child, PT_CCS, tmp); | ||
96 | } | ||
97 | |||
98 | void user_disable_single_step(struct task_struct *child) | ||
99 | { | ||
100 | put_reg(child, PT_SPC, 0); | ||
101 | |||
102 | if (!get_debugreg(child->pid, PT_BP_CTRL)) { | ||
103 | unsigned long tmp; | ||
104 | /* If no h/w bp configured, disable S bit. */ | ||
105 | tmp = get_reg(child, PT_CCS) & ~SBIT_USER; | ||
106 | put_reg(child, PT_CCS, tmp); | ||
107 | } | ||
108 | } | ||
109 | |||
81 | /* | 110 | /* |
82 | * Called by kernel/ptrace.c when detaching. | 111 | * Called by kernel/ptrace.c when detaching. |
83 | * | 112 | * |
@@ -89,8 +118,7 @@ ptrace_disable(struct task_struct *child) | |||
89 | unsigned long tmp; | 118 | unsigned long tmp; |
90 | 119 | ||
91 | /* Deconfigure SPC and S-bit. */ | 120 | /* Deconfigure SPC and S-bit. */ |
92 | tmp = get_reg(child, PT_CCS) & ~SBIT_USER; | 121 | user_disable_single_step(child); |
93 | put_reg(child, PT_CCS, tmp); | ||
94 | put_reg(child, PT_SPC, 0); | 122 | put_reg(child, PT_SPC, 0); |
95 | 123 | ||
96 | /* Deconfigure any watchpoints associated with the child. */ | 124 | /* Deconfigure any watchpoints associated with the child. */ |
@@ -169,83 +197,6 @@ long arch_ptrace(struct task_struct *child, long request, long addr, long data) | |||
169 | ret = 0; | 197 | ret = 0; |
170 | break; | 198 | break; |
171 | 199 | ||
172 | case PTRACE_SYSCALL: | ||
173 | case PTRACE_CONT: | ||
174 | ret = -EIO; | ||
175 | |||
176 | if (!valid_signal(data)) | ||
177 | break; | ||
178 | |||
179 | /* Continue means no single-step. */ | ||
180 | put_reg(child, PT_SPC, 0); | ||
181 | |||
182 | if (!get_debugreg(child->pid, PT_BP_CTRL)) { | ||
183 | unsigned long tmp; | ||
184 | /* If no h/w bp configured, disable S bit. */ | ||
185 | tmp = get_reg(child, PT_CCS) & ~SBIT_USER; | ||
186 | put_reg(child, PT_CCS, tmp); | ||
187 | } | ||
188 | |||
189 | if (request == PTRACE_SYSCALL) { | ||
190 | set_tsk_thread_flag(child, TIF_SYSCALL_TRACE); | ||
191 | } | ||
192 | else { | ||
193 | clear_tsk_thread_flag(child, TIF_SYSCALL_TRACE); | ||
194 | } | ||
195 | |||
196 | child->exit_code = data; | ||
197 | |||
198 | /* TODO: make sure any pending breakpoint is killed */ | ||
199 | wake_up_process(child); | ||
200 | ret = 0; | ||
201 | |||
202 | break; | ||
203 | |||
204 | /* Make the child exit by sending it a sigkill. */ | ||
205 | case PTRACE_KILL: | ||
206 | ret = 0; | ||
207 | |||
208 | if (child->exit_state == EXIT_ZOMBIE) | ||
209 | break; | ||
210 | |||
211 | child->exit_code = SIGKILL; | ||
212 | |||
213 | /* Deconfigure single-step and h/w bp. */ | ||
214 | ptrace_disable(child); | ||
215 | |||
216 | /* TODO: make sure any pending breakpoint is killed */ | ||
217 | wake_up_process(child); | ||
218 | break; | ||
219 | |||
220 | /* Set the trap flag. */ | ||
221 | case PTRACE_SINGLESTEP: { | ||
222 | unsigned long tmp; | ||
223 | ret = -EIO; | ||
224 | |||
225 | /* Set up SPC if not set already (in which case we have | ||
226 | no other choice but to trust it). */ | ||
227 | if (!get_reg(child, PT_SPC)) { | ||
228 | /* In case we're stopped in a delay slot. */ | ||
229 | tmp = get_reg(child, PT_ERP) & ~1; | ||
230 | put_reg(child, PT_SPC, tmp); | ||
231 | } | ||
232 | tmp = get_reg(child, PT_CCS) | SBIT_USER; | ||
233 | put_reg(child, PT_CCS, tmp); | ||
234 | |||
235 | if (!valid_signal(data)) | ||
236 | break; | ||
237 | |||
238 | clear_tsk_thread_flag(child, TIF_SYSCALL_TRACE); | ||
239 | |||
240 | /* TODO: set some clever breakpoint mechanism... */ | ||
241 | |||
242 | child->exit_code = data; | ||
243 | wake_up_process(child); | ||
244 | ret = 0; | ||
245 | break; | ||
246 | |||
247 | } | ||
248 | |||
249 | /* Get all GP registers from the child. */ | 200 | /* Get all GP registers from the child. */ |
250 | case PTRACE_GETREGS: { | 201 | case PTRACE_GETREGS: { |
251 | int i; | 202 | int i; |
diff --git a/arch/cris/include/arch-v32/arch/ptrace.h b/arch/cris/include/arch-v32/arch/ptrace.h index 41f4e8662bc2..ffca8d0f2e17 100644 --- a/arch/cris/include/arch-v32/arch/ptrace.h +++ b/arch/cris/include/arch-v32/arch/ptrace.h | |||
@@ -108,6 +108,7 @@ struct switch_stack { | |||
108 | 108 | ||
109 | #ifdef __KERNEL__ | 109 | #ifdef __KERNEL__ |
110 | 110 | ||
111 | #define arch_has_single_step() (1) | ||
111 | #define user_mode(regs) (((regs)->ccs & (1 << (U_CCS_BITNR + CCS_SHIFT))) != 0) | 112 | #define user_mode(regs) (((regs)->ccs & (1 << (U_CCS_BITNR + CCS_SHIFT))) != 0) |
112 | #define instruction_pointer(regs) ((regs)->erp) | 113 | #define instruction_pointer(regs) ((regs)->erp) |
113 | extern void show_regs(struct pt_regs *); | 114 | extern void show_regs(struct pt_regs *); |
diff --git a/arch/cris/include/asm/pci.h b/arch/cris/include/asm/pci.h index 730ce40fdd0f..9f1cd56da28c 100644 --- a/arch/cris/include/asm/pci.h +++ b/arch/cris/include/asm/pci.h | |||
@@ -44,14 +44,6 @@ struct pci_dev; | |||
44 | */ | 44 | */ |
45 | #define PCI_DMA_BUS_IS_PHYS (1) | 45 | #define PCI_DMA_BUS_IS_PHYS (1) |
46 | 46 | ||
47 | /* pci_unmap_{page,single} is a nop so... */ | ||
48 | #define DECLARE_PCI_UNMAP_ADDR(ADDR_NAME) | ||
49 | #define DECLARE_PCI_UNMAP_LEN(LEN_NAME) | ||
50 | #define pci_unmap_addr(PTR, ADDR_NAME) (0) | ||
51 | #define pci_unmap_addr_set(PTR, ADDR_NAME, VAL) do { } while (0) | ||
52 | #define pci_unmap_len(PTR, LEN_NAME) (0) | ||
53 | #define pci_unmap_len_set(PTR, LEN_NAME, VAL) do { } while (0) | ||
54 | |||
55 | #define HAVE_PCI_MMAP | 47 | #define HAVE_PCI_MMAP |
56 | extern int pci_mmap_page_range(struct pci_dev *dev, struct vm_area_struct *vma, | 48 | extern int pci_mmap_page_range(struct pci_dev *dev, struct vm_area_struct *vma, |
57 | enum pci_mmap_state mmap_state, int write_combine); | 49 | enum pci_mmap_state mmap_state, int write_combine); |
diff --git a/arch/cris/include/asm/unistd.h b/arch/cris/include/asm/unistd.h index c17079388bb9..f6fad83b3a8c 100644 --- a/arch/cris/include/asm/unistd.h +++ b/arch/cris/include/asm/unistd.h | |||
@@ -352,6 +352,7 @@ | |||
352 | #define __ARCH_WANT_STAT64 | 352 | #define __ARCH_WANT_STAT64 |
353 | #define __ARCH_WANT_SYS_ALARM | 353 | #define __ARCH_WANT_SYS_ALARM |
354 | #define __ARCH_WANT_SYS_GETHOSTNAME | 354 | #define __ARCH_WANT_SYS_GETHOSTNAME |
355 | #define __ARCH_WANT_SYS_IPC | ||
355 | #define __ARCH_WANT_SYS_PAUSE | 356 | #define __ARCH_WANT_SYS_PAUSE |
356 | #define __ARCH_WANT_SYS_SGETMASK | 357 | #define __ARCH_WANT_SYS_SGETMASK |
357 | #define __ARCH_WANT_SYS_SIGNAL | 358 | #define __ARCH_WANT_SYS_SIGNAL |
@@ -364,6 +365,7 @@ | |||
364 | #define __ARCH_WANT_SYS_LLSEEK | 365 | #define __ARCH_WANT_SYS_LLSEEK |
365 | #define __ARCH_WANT_SYS_NICE | 366 | #define __ARCH_WANT_SYS_NICE |
366 | #define __ARCH_WANT_SYS_OLD_GETRLIMIT | 367 | #define __ARCH_WANT_SYS_OLD_GETRLIMIT |
368 | #define __ARCH_WANT_SYS_OLD_MMAP | ||
367 | #define __ARCH_WANT_SYS_OLDUMOUNT | 369 | #define __ARCH_WANT_SYS_OLDUMOUNT |
368 | #define __ARCH_WANT_SYS_SIGPENDING | 370 | #define __ARCH_WANT_SYS_SIGPENDING |
369 | #define __ARCH_WANT_SYS_SIGPROCMASK | 371 | #define __ARCH_WANT_SYS_SIGPROCMASK |
diff --git a/arch/cris/kernel/sys_cris.c b/arch/cris/kernel/sys_cris.c index c2bbb1ac98a9..7aa036ec78ff 100644 --- a/arch/cris/kernel/sys_cris.c +++ b/arch/cris/kernel/sys_cris.c | |||
@@ -26,24 +26,6 @@ | |||
26 | #include <asm/uaccess.h> | 26 | #include <asm/uaccess.h> |
27 | #include <asm/segment.h> | 27 | #include <asm/segment.h> |
28 | 28 | ||
29 | asmlinkage unsigned long old_mmap(unsigned long __user *args) | ||
30 | { | ||
31 | unsigned long buffer[6]; | ||
32 | int err = -EFAULT; | ||
33 | |||
34 | if (copy_from_user(&buffer, args, sizeof(buffer))) | ||
35 | goto out; | ||
36 | |||
37 | err = -EINVAL; | ||
38 | if (buffer[5] & ~PAGE_MASK) /* verify that offset is on page boundary */ | ||
39 | goto out; | ||
40 | |||
41 | err = sys_mmap_pgoff(buffer[0], buffer[1], buffer[2], buffer[3], | ||
42 | buffer[4], buffer[5] >> PAGE_SHIFT); | ||
43 | out: | ||
44 | return err; | ||
45 | } | ||
46 | |||
47 | asmlinkage long | 29 | asmlinkage long |
48 | sys_mmap2(unsigned long addr, unsigned long len, unsigned long prot, | 30 | sys_mmap2(unsigned long addr, unsigned long len, unsigned long prot, |
49 | unsigned long flags, unsigned long fd, unsigned long pgoff) | 31 | unsigned long flags, unsigned long fd, unsigned long pgoff) |
@@ -51,81 +33,3 @@ sys_mmap2(unsigned long addr, unsigned long len, unsigned long prot, | |||
51 | /* bug(?): 8Kb pages here */ | 33 | /* bug(?): 8Kb pages here */ |
52 | return sys_mmap_pgoff(addr, len, prot, flags, fd, pgoff); | 34 | return sys_mmap_pgoff(addr, len, prot, flags, fd, pgoff); |
53 | } | 35 | } |
54 | |||
55 | /* | ||
56 | * sys_ipc() is the de-multiplexer for the SysV IPC calls.. | ||
57 | * | ||
58 | * This is really horribly ugly. (same as arch/i386) | ||
59 | */ | ||
60 | |||
61 | asmlinkage int sys_ipc (uint call, int first, int second, | ||
62 | int third, void __user *ptr, long fifth) | ||
63 | { | ||
64 | int version, ret; | ||
65 | |||
66 | version = call >> 16; /* hack for backward compatibility */ | ||
67 | call &= 0xffff; | ||
68 | |||
69 | switch (call) { | ||
70 | case SEMOP: | ||
71 | return sys_semtimedop (first, (struct sembuf __user *)ptr, second, NULL); | ||
72 | case SEMTIMEDOP: | ||
73 | return sys_semtimedop(first, (struct sembuf __user *)ptr, second, | ||
74 | (const struct timespec __user *)fifth); | ||
75 | |||
76 | case SEMGET: | ||
77 | return sys_semget (first, second, third); | ||
78 | case SEMCTL: { | ||
79 | union semun fourth; | ||
80 | if (!ptr) | ||
81 | return -EINVAL; | ||
82 | if (get_user(fourth.__pad, (void * __user *) ptr)) | ||
83 | return -EFAULT; | ||
84 | return sys_semctl (first, second, third, fourth); | ||
85 | } | ||
86 | |||
87 | case MSGSND: | ||
88 | return sys_msgsnd (first, (struct msgbuf __user *) ptr, | ||
89 | second, third); | ||
90 | case MSGRCV: | ||
91 | switch (version) { | ||
92 | case 0: { | ||
93 | struct ipc_kludge tmp; | ||
94 | if (!ptr) | ||
95 | return -EINVAL; | ||
96 | |||
97 | if (copy_from_user(&tmp, | ||
98 | (struct ipc_kludge __user *) ptr, | ||
99 | sizeof (tmp))) | ||
100 | return -EFAULT; | ||
101 | return sys_msgrcv (first, tmp.msgp, second, | ||
102 | tmp.msgtyp, third); | ||
103 | } | ||
104 | default: | ||
105 | return sys_msgrcv (first, | ||
106 | (struct msgbuf __user *) ptr, | ||
107 | second, fifth, third); | ||
108 | } | ||
109 | case MSGGET: | ||
110 | return sys_msgget ((key_t) first, second); | ||
111 | case MSGCTL: | ||
112 | return sys_msgctl (first, second, (struct msqid_ds __user *) ptr); | ||
113 | |||
114 | case SHMAT: { | ||
115 | ulong raddr; | ||
116 | ret = do_shmat (first, (char __user *) ptr, second, &raddr); | ||
117 | if (ret) | ||
118 | return ret; | ||
119 | return put_user (raddr, (ulong __user *) third); | ||
120 | } | ||
121 | case SHMDT: | ||
122 | return sys_shmdt ((char __user *)ptr); | ||
123 | case SHMGET: | ||
124 | return sys_shmget (first, second, third); | ||
125 | case SHMCTL: | ||
126 | return sys_shmctl (first, second, | ||
127 | (struct shmid_ds __user *) ptr); | ||
128 | default: | ||
129 | return -ENOSYS; | ||
130 | } | ||
131 | } | ||
diff --git a/arch/frv/include/asm/dma-mapping.h b/arch/frv/include/asm/dma-mapping.h index b2898877c07b..6af5d83e2fb2 100644 --- a/arch/frv/include/asm/dma-mapping.h +++ b/arch/frv/include/asm/dma-mapping.h | |||
@@ -7,6 +7,11 @@ | |||
7 | #include <asm/scatterlist.h> | 7 | #include <asm/scatterlist.h> |
8 | #include <asm/io.h> | 8 | #include <asm/io.h> |
9 | 9 | ||
10 | /* | ||
11 | * See Documentation/DMA-API.txt for the description of how the | ||
12 | * following DMA API should work. | ||
13 | */ | ||
14 | |||
10 | #define dma_alloc_noncoherent(d, s, h, f) dma_alloc_coherent(d, s, h, f) | 15 | #define dma_alloc_noncoherent(d, s, h, f) dma_alloc_coherent(d, s, h, f) |
11 | #define dma_free_noncoherent(d, s, v, h) dma_free_coherent(d, s, v, h) | 16 | #define dma_free_noncoherent(d, s, v, h) dma_free_coherent(d, s, v, h) |
12 | 17 | ||
@@ -16,24 +21,9 @@ extern unsigned long __nongprelbss dma_coherent_mem_end; | |||
16 | void *dma_alloc_coherent(struct device *dev, size_t size, dma_addr_t *dma_handle, gfp_t gfp); | 21 | void *dma_alloc_coherent(struct device *dev, size_t size, dma_addr_t *dma_handle, gfp_t gfp); |
17 | void dma_free_coherent(struct device *dev, size_t size, void *vaddr, dma_addr_t dma_handle); | 22 | void dma_free_coherent(struct device *dev, size_t size, void *vaddr, dma_addr_t dma_handle); |
18 | 23 | ||
19 | /* | ||
20 | * Map a single buffer of the indicated size for DMA in streaming mode. | ||
21 | * The 32-bit bus address to use is returned. | ||
22 | * | ||
23 | * Once the device is given the dma address, the device owns this memory | ||
24 | * until either pci_unmap_single or pci_dma_sync_single is performed. | ||
25 | */ | ||
26 | extern dma_addr_t dma_map_single(struct device *dev, void *ptr, size_t size, | 24 | extern dma_addr_t dma_map_single(struct device *dev, void *ptr, size_t size, |
27 | enum dma_data_direction direction); | 25 | enum dma_data_direction direction); |
28 | 26 | ||
29 | /* | ||
30 | * Unmap a single streaming mode DMA translation. The dma_addr and size | ||
31 | * must match what was provided for in a previous pci_map_single call. All | ||
32 | * other usages are undefined. | ||
33 | * | ||
34 | * After this call, reads by the cpu to the buffer are guarenteed to see | ||
35 | * whatever the device wrote there. | ||
36 | */ | ||
37 | static inline | 27 | static inline |
38 | void dma_unmap_single(struct device *dev, dma_addr_t dma_addr, size_t size, | 28 | void dma_unmap_single(struct device *dev, dma_addr_t dma_addr, size_t size, |
39 | enum dma_data_direction direction) | 29 | enum dma_data_direction direction) |
@@ -41,30 +31,9 @@ void dma_unmap_single(struct device *dev, dma_addr_t dma_addr, size_t size, | |||
41 | BUG_ON(direction == DMA_NONE); | 31 | BUG_ON(direction == DMA_NONE); |
42 | } | 32 | } |
43 | 33 | ||
44 | /* | ||
45 | * Map a set of buffers described by scatterlist in streaming | ||
46 | * mode for DMA. This is the scather-gather version of the | ||
47 | * above pci_map_single interface. Here the scatter gather list | ||
48 | * elements are each tagged with the appropriate dma address | ||
49 | * and length. They are obtained via sg_dma_{address,length}(SG). | ||
50 | * | ||
51 | * NOTE: An implementation may be able to use a smaller number of | ||
52 | * DMA address/length pairs than there are SG table elements. | ||
53 | * (for example via virtual mapping capabilities) | ||
54 | * The routine returns the number of addr/length pairs actually | ||
55 | * used, at most nents. | ||
56 | * | ||
57 | * Device ownership issues as mentioned above for pci_map_single are | ||
58 | * the same here. | ||
59 | */ | ||
60 | extern int dma_map_sg(struct device *dev, struct scatterlist *sg, int nents, | 34 | extern int dma_map_sg(struct device *dev, struct scatterlist *sg, int nents, |
61 | enum dma_data_direction direction); | 35 | enum dma_data_direction direction); |
62 | 36 | ||
63 | /* | ||
64 | * Unmap a set of streaming mode DMA translations. | ||
65 | * Again, cpu read rules concerning calls here are the same as for | ||
66 | * pci_unmap_single() above. | ||
67 | */ | ||
68 | static inline | 37 | static inline |
69 | void dma_unmap_sg(struct device *dev, struct scatterlist *sg, int nhwentries, | 38 | void dma_unmap_sg(struct device *dev, struct scatterlist *sg, int nhwentries, |
70 | enum dma_data_direction direction) | 39 | enum dma_data_direction direction) |
diff --git a/arch/frv/include/asm/pci.h b/arch/frv/include/asm/pci.h index 8c7260a3cd41..0d5997909850 100644 --- a/arch/frv/include/asm/pci.h +++ b/arch/frv/include/asm/pci.h | |||
@@ -43,14 +43,6 @@ extern void pci_free_consistent(struct pci_dev *hwdev, size_t size, | |||
43 | /* Return the index of the PCI controller for device PDEV. */ | 43 | /* Return the index of the PCI controller for device PDEV. */ |
44 | #define pci_controller_num(PDEV) (0) | 44 | #define pci_controller_num(PDEV) (0) |
45 | 45 | ||
46 | /* pci_unmap_{page,single} is a nop so... */ | ||
47 | #define DECLARE_PCI_UNMAP_ADDR(ADDR_NAME) | ||
48 | #define DECLARE_PCI_UNMAP_LEN(LEN_NAME) | ||
49 | #define pci_unmap_addr(PTR, ADDR_NAME) (0) | ||
50 | #define pci_unmap_addr_set(PTR, ADDR_NAME, VAL) do { } while (0) | ||
51 | #define pci_unmap_len(PTR, LEN_NAME) (0) | ||
52 | #define pci_unmap_len_set(PTR, LEN_NAME, VAL) do { } while (0) | ||
53 | |||
54 | #ifdef CONFIG_PCI | 46 | #ifdef CONFIG_PCI |
55 | static inline void pci_dma_burst_advice(struct pci_dev *pdev, | 47 | static inline void pci_dma_burst_advice(struct pci_dev *pdev, |
56 | enum pci_dma_burst_strategy *strat, | 48 | enum pci_dma_burst_strategy *strat, |
diff --git a/arch/frv/include/asm/ptrace.h b/arch/frv/include/asm/ptrace.h index a54b535c9e49..6bfad4cf1907 100644 --- a/arch/frv/include/asm/ptrace.h +++ b/arch/frv/include/asm/ptrace.h | |||
@@ -84,8 +84,6 @@ extern void show_regs(struct pt_regs *); | |||
84 | #define task_pt_regs(task) ((task)->thread.frame0) | 84 | #define task_pt_regs(task) ((task)->thread.frame0) |
85 | 85 | ||
86 | #define arch_has_single_step() (1) | 86 | #define arch_has_single_step() (1) |
87 | extern void user_enable_single_step(struct task_struct *); | ||
88 | extern void user_disable_single_step(struct task_struct *); | ||
89 | 87 | ||
90 | #endif /* !__ASSEMBLY__ */ | 88 | #endif /* !__ASSEMBLY__ */ |
91 | #endif /* __KERNEL__ */ | 89 | #endif /* __KERNEL__ */ |
diff --git a/arch/frv/include/asm/unistd.h b/arch/frv/include/asm/unistd.h index be6ef0f5cd42..b28da499e22a 100644 --- a/arch/frv/include/asm/unistd.h +++ b/arch/frv/include/asm/unistd.h | |||
@@ -354,6 +354,7 @@ | |||
354 | #define __ARCH_WANT_STAT64 | 354 | #define __ARCH_WANT_STAT64 |
355 | #define __ARCH_WANT_SYS_ALARM | 355 | #define __ARCH_WANT_SYS_ALARM |
356 | /* #define __ARCH_WANT_SYS_GETHOSTNAME */ | 356 | /* #define __ARCH_WANT_SYS_GETHOSTNAME */ |
357 | #define __ARCH_WANT_SYS_IPC | ||
357 | #define __ARCH_WANT_SYS_PAUSE | 358 | #define __ARCH_WANT_SYS_PAUSE |
358 | /* #define __ARCH_WANT_SYS_SGETMASK */ | 359 | /* #define __ARCH_WANT_SYS_SGETMASK */ |
359 | /* #define __ARCH_WANT_SYS_SIGNAL */ | 360 | /* #define __ARCH_WANT_SYS_SIGNAL */ |
diff --git a/arch/frv/kernel/sys_frv.c b/arch/frv/kernel/sys_frv.c index 1d3d4c9e2521..9c4980825bbb 100644 --- a/arch/frv/kernel/sys_frv.c +++ b/arch/frv/kernel/sys_frv.c | |||
@@ -42,92 +42,3 @@ asmlinkage long sys_mmap2(unsigned long addr, unsigned long len, | |||
42 | return sys_mmap_pgoff(addr, len, prot, flags, fd, | 42 | return sys_mmap_pgoff(addr, len, prot, flags, fd, |
43 | pgoff >> (PAGE_SHIFT - 12)); | 43 | pgoff >> (PAGE_SHIFT - 12)); |
44 | } | 44 | } |
45 | |||
46 | /* | ||
47 | * sys_ipc() is the de-multiplexer for the SysV IPC calls.. | ||
48 | * | ||
49 | * This is really horribly ugly. | ||
50 | */ | ||
51 | asmlinkage long sys_ipc(unsigned long call, | ||
52 | unsigned long first, | ||
53 | unsigned long second, | ||
54 | unsigned long third, | ||
55 | void __user *ptr, | ||
56 | unsigned long fifth) | ||
57 | { | ||
58 | int version, ret; | ||
59 | |||
60 | version = call >> 16; /* hack for backward compatibility */ | ||
61 | call &= 0xffff; | ||
62 | |||
63 | switch (call) { | ||
64 | case SEMOP: | ||
65 | return sys_semtimedop(first, (struct sembuf __user *)ptr, second, NULL); | ||
66 | case SEMTIMEDOP: | ||
67 | return sys_semtimedop(first, (struct sembuf __user *)ptr, second, | ||
68 | (const struct timespec __user *)fifth); | ||
69 | |||
70 | case SEMGET: | ||
71 | return sys_semget (first, second, third); | ||
72 | case SEMCTL: { | ||
73 | union semun fourth; | ||
74 | if (!ptr) | ||
75 | return -EINVAL; | ||
76 | if (get_user(fourth.__pad, (void * __user *) ptr)) | ||
77 | return -EFAULT; | ||
78 | return sys_semctl (first, second, third, fourth); | ||
79 | } | ||
80 | |||
81 | case MSGSND: | ||
82 | return sys_msgsnd (first, (struct msgbuf __user *) ptr, | ||
83 | second, third); | ||
84 | case MSGRCV: | ||
85 | switch (version) { | ||
86 | case 0: { | ||
87 | struct ipc_kludge tmp; | ||
88 | if (!ptr) | ||
89 | return -EINVAL; | ||
90 | |||
91 | if (copy_from_user(&tmp, | ||
92 | (struct ipc_kludge __user *) ptr, | ||
93 | sizeof (tmp))) | ||
94 | return -EFAULT; | ||
95 | return sys_msgrcv (first, tmp.msgp, second, | ||
96 | tmp.msgtyp, third); | ||
97 | } | ||
98 | default: | ||
99 | return sys_msgrcv (first, | ||
100 | (struct msgbuf __user *) ptr, | ||
101 | second, fifth, third); | ||
102 | } | ||
103 | case MSGGET: | ||
104 | return sys_msgget ((key_t) first, second); | ||
105 | case MSGCTL: | ||
106 | return sys_msgctl (first, second, (struct msqid_ds __user *) ptr); | ||
107 | |||
108 | case SHMAT: | ||
109 | switch (version) { | ||
110 | default: { | ||
111 | ulong raddr; | ||
112 | ret = do_shmat (first, (char __user *) ptr, second, &raddr); | ||
113 | if (ret) | ||
114 | return ret; | ||
115 | return put_user (raddr, (ulong __user *) third); | ||
116 | } | ||
117 | case 1: /* iBCS2 emulator entry point */ | ||
118 | if (!segment_eq(get_fs(), get_ds())) | ||
119 | return -EINVAL; | ||
120 | /* The "(ulong *) third" is valid _only_ because of the kernel segment thing */ | ||
121 | return do_shmat (first, (char __user *) ptr, second, (ulong *) third); | ||
122 | } | ||
123 | case SHMDT: | ||
124 | return sys_shmdt ((char __user *)ptr); | ||
125 | case SHMGET: | ||
126 | return sys_shmget (first, second, third); | ||
127 | case SHMCTL: | ||
128 | return sys_shmctl (first, second, | ||
129 | (struct shmid_ds __user *) ptr); | ||
130 | default: | ||
131 | return -ENOSYS; | ||
132 | } | ||
133 | } | ||
diff --git a/arch/frv/mb93090-mb00/pci-dma-nommu.c b/arch/frv/mb93090-mb00/pci-dma-nommu.c index 4e1ba0b15443..e47857f889b6 100644 --- a/arch/frv/mb93090-mb00/pci-dma-nommu.c +++ b/arch/frv/mb93090-mb00/pci-dma-nommu.c | |||
@@ -106,13 +106,6 @@ void dma_free_coherent(struct device *hwdev, size_t size, void *vaddr, dma_addr_ | |||
106 | 106 | ||
107 | EXPORT_SYMBOL(dma_free_coherent); | 107 | EXPORT_SYMBOL(dma_free_coherent); |
108 | 108 | ||
109 | /* | ||
110 | * Map a single buffer of the indicated size for DMA in streaming mode. | ||
111 | * The 32-bit bus address to use is returned. | ||
112 | * | ||
113 | * Once the device is given the dma address, the device owns this memory | ||
114 | * until either dma_unmap_single or pci_dma_sync_single is performed. | ||
115 | */ | ||
116 | dma_addr_t dma_map_single(struct device *dev, void *ptr, size_t size, | 109 | dma_addr_t dma_map_single(struct device *dev, void *ptr, size_t size, |
117 | enum dma_data_direction direction) | 110 | enum dma_data_direction direction) |
118 | { | 111 | { |
@@ -125,22 +118,6 @@ dma_addr_t dma_map_single(struct device *dev, void *ptr, size_t size, | |||
125 | 118 | ||
126 | EXPORT_SYMBOL(dma_map_single); | 119 | EXPORT_SYMBOL(dma_map_single); |
127 | 120 | ||
128 | /* | ||
129 | * Map a set of buffers described by scatterlist in streaming | ||
130 | * mode for DMA. This is the scather-gather version of the | ||
131 | * above dma_map_single interface. Here the scatter gather list | ||
132 | * elements are each tagged with the appropriate dma address | ||
133 | * and length. They are obtained via sg_dma_{address,length}(SG). | ||
134 | * | ||
135 | * NOTE: An implementation may be able to use a smaller number of | ||
136 | * DMA address/length pairs than there are SG table elements. | ||
137 | * (for example via virtual mapping capabilities) | ||
138 | * The routine returns the number of addr/length pairs actually | ||
139 | * used, at most nents. | ||
140 | * | ||
141 | * Device ownership issues as mentioned above for dma_map_single are | ||
142 | * the same here. | ||
143 | */ | ||
144 | int dma_map_sg(struct device *dev, struct scatterlist *sg, int nents, | 121 | int dma_map_sg(struct device *dev, struct scatterlist *sg, int nents, |
145 | enum dma_data_direction direction) | 122 | enum dma_data_direction direction) |
146 | { | 123 | { |
@@ -157,13 +134,6 @@ int dma_map_sg(struct device *dev, struct scatterlist *sg, int nents, | |||
157 | 134 | ||
158 | EXPORT_SYMBOL(dma_map_sg); | 135 | EXPORT_SYMBOL(dma_map_sg); |
159 | 136 | ||
160 | /* | ||
161 | * Map a single page of the indicated size for DMA in streaming mode. | ||
162 | * The 32-bit bus address to use is returned. | ||
163 | * | ||
164 | * Device ownership issues as mentioned above for dma_map_single are | ||
165 | * the same here. | ||
166 | */ | ||
167 | dma_addr_t dma_map_page(struct device *dev, struct page *page, unsigned long offset, | 137 | dma_addr_t dma_map_page(struct device *dev, struct page *page, unsigned long offset, |
168 | size_t size, enum dma_data_direction direction) | 138 | size_t size, enum dma_data_direction direction) |
169 | { | 139 | { |
diff --git a/arch/frv/mb93090-mb00/pci-dma.c b/arch/frv/mb93090-mb00/pci-dma.c index 45954f0813dc..2c912e805162 100644 --- a/arch/frv/mb93090-mb00/pci-dma.c +++ b/arch/frv/mb93090-mb00/pci-dma.c | |||
@@ -38,13 +38,6 @@ void dma_free_coherent(struct device *hwdev, size_t size, void *vaddr, dma_addr_ | |||
38 | 38 | ||
39 | EXPORT_SYMBOL(dma_free_coherent); | 39 | EXPORT_SYMBOL(dma_free_coherent); |
40 | 40 | ||
41 | /* | ||
42 | * Map a single buffer of the indicated size for DMA in streaming mode. | ||
43 | * The 32-bit bus address to use is returned. | ||
44 | * | ||
45 | * Once the device is given the dma address, the device owns this memory | ||
46 | * until either pci_unmap_single or pci_dma_sync_single is performed. | ||
47 | */ | ||
48 | dma_addr_t dma_map_single(struct device *dev, void *ptr, size_t size, | 41 | dma_addr_t dma_map_single(struct device *dev, void *ptr, size_t size, |
49 | enum dma_data_direction direction) | 42 | enum dma_data_direction direction) |
50 | { | 43 | { |
@@ -57,22 +50,6 @@ dma_addr_t dma_map_single(struct device *dev, void *ptr, size_t size, | |||
57 | 50 | ||
58 | EXPORT_SYMBOL(dma_map_single); | 51 | EXPORT_SYMBOL(dma_map_single); |
59 | 52 | ||
60 | /* | ||
61 | * Map a set of buffers described by scatterlist in streaming | ||
62 | * mode for DMA. This is the scather-gather version of the | ||
63 | * above dma_map_single interface. Here the scatter gather list | ||
64 | * elements are each tagged with the appropriate dma address | ||
65 | * and length. They are obtained via sg_dma_{address,length}(SG). | ||
66 | * | ||
67 | * NOTE: An implementation may be able to use a smaller number of | ||
68 | * DMA address/length pairs than there are SG table elements. | ||
69 | * (for example via virtual mapping capabilities) | ||
70 | * The routine returns the number of addr/length pairs actually | ||
71 | * used, at most nents. | ||
72 | * | ||
73 | * Device ownership issues as mentioned above for dma_map_single are | ||
74 | * the same here. | ||
75 | */ | ||
76 | int dma_map_sg(struct device *dev, struct scatterlist *sg, int nents, | 53 | int dma_map_sg(struct device *dev, struct scatterlist *sg, int nents, |
77 | enum dma_data_direction direction) | 54 | enum dma_data_direction direction) |
78 | { | 55 | { |
@@ -103,13 +80,6 @@ int dma_map_sg(struct device *dev, struct scatterlist *sg, int nents, | |||
103 | 80 | ||
104 | EXPORT_SYMBOL(dma_map_sg); | 81 | EXPORT_SYMBOL(dma_map_sg); |
105 | 82 | ||
106 | /* | ||
107 | * Map a single page of the indicated size for DMA in streaming mode. | ||
108 | * The 32-bit bus address to use is returned. | ||
109 | * | ||
110 | * Device ownership issues as mentioned above for dma_map_single are | ||
111 | * the same here. | ||
112 | */ | ||
113 | dma_addr_t dma_map_page(struct device *dev, struct page *page, unsigned long offset, | 83 | dma_addr_t dma_map_page(struct device *dev, struct page *page, unsigned long offset, |
114 | size_t size, enum dma_data_direction direction) | 84 | size_t size, enum dma_data_direction direction) |
115 | { | 85 | { |
diff --git a/arch/h8300/include/asm/ptrace.h b/arch/h8300/include/asm/ptrace.h index c2e05e4b512e..d866c0efba87 100644 --- a/arch/h8300/include/asm/ptrace.h +++ b/arch/h8300/include/asm/ptrace.h | |||
@@ -55,6 +55,8 @@ struct pt_regs { | |||
55 | /* Find the stack offset for a register, relative to thread.esp0. */ | 55 | /* Find the stack offset for a register, relative to thread.esp0. */ |
56 | #define PT_REG(reg) ((long)&((struct pt_regs *)0)->reg) | 56 | #define PT_REG(reg) ((long)&((struct pt_regs *)0)->reg) |
57 | 57 | ||
58 | #define arch_has_single_step() (1) | ||
59 | |||
58 | #define user_mode(regs) (!((regs)->ccr & PS_S)) | 60 | #define user_mode(regs) (!((regs)->ccr & PS_S)) |
59 | #define instruction_pointer(regs) ((regs)->pc) | 61 | #define instruction_pointer(regs) ((regs)->pc) |
60 | #define profile_pc(regs) instruction_pointer(regs) | 62 | #define profile_pc(regs) instruction_pointer(regs) |
diff --git a/arch/h8300/include/asm/unistd.h b/arch/h8300/include/asm/unistd.h index 99f3c3561ecb..50f2c5a36591 100644 --- a/arch/h8300/include/asm/unistd.h +++ b/arch/h8300/include/asm/unistd.h | |||
@@ -336,6 +336,7 @@ | |||
336 | #define __ARCH_WANT_STAT64 | 336 | #define __ARCH_WANT_STAT64 |
337 | #define __ARCH_WANT_SYS_ALARM | 337 | #define __ARCH_WANT_SYS_ALARM |
338 | #define __ARCH_WANT_SYS_GETHOSTNAME | 338 | #define __ARCH_WANT_SYS_GETHOSTNAME |
339 | #define __ARCH_WANT_SYS_IPC | ||
339 | #define __ARCH_WANT_SYS_PAUSE | 340 | #define __ARCH_WANT_SYS_PAUSE |
340 | #define __ARCH_WANT_SYS_SGETMASK | 341 | #define __ARCH_WANT_SYS_SGETMASK |
341 | #define __ARCH_WANT_SYS_SIGNAL | 342 | #define __ARCH_WANT_SYS_SIGNAL |
@@ -348,6 +349,8 @@ | |||
348 | #define __ARCH_WANT_SYS_LLSEEK | 349 | #define __ARCH_WANT_SYS_LLSEEK |
349 | #define __ARCH_WANT_SYS_NICE | 350 | #define __ARCH_WANT_SYS_NICE |
350 | #define __ARCH_WANT_SYS_OLD_GETRLIMIT | 351 | #define __ARCH_WANT_SYS_OLD_GETRLIMIT |
352 | #define __ARCH_WANT_SYS_OLD_MMAP | ||
353 | #define __ARCH_WANT_SYS_OLD_SELECT | ||
351 | #define __ARCH_WANT_SYS_OLDUMOUNT | 354 | #define __ARCH_WANT_SYS_OLDUMOUNT |
352 | #define __ARCH_WANT_SYS_SIGPENDING | 355 | #define __ARCH_WANT_SYS_SIGPENDING |
353 | #define __ARCH_WANT_SYS_SIGPROCMASK | 356 | #define __ARCH_WANT_SYS_SIGPROCMASK |
diff --git a/arch/h8300/kernel/ptrace.c b/arch/h8300/kernel/ptrace.c index d32bbf02fc48..df114122ebdf 100644 --- a/arch/h8300/kernel/ptrace.c +++ b/arch/h8300/kernel/ptrace.c | |||
@@ -34,25 +34,20 @@ | |||
34 | /* cpu depend functions */ | 34 | /* cpu depend functions */ |
35 | extern long h8300_get_reg(struct task_struct *task, int regno); | 35 | extern long h8300_get_reg(struct task_struct *task, int regno); |
36 | extern int h8300_put_reg(struct task_struct *task, int regno, unsigned long data); | 36 | extern int h8300_put_reg(struct task_struct *task, int regno, unsigned long data); |
37 | extern void h8300_disable_trace(struct task_struct *child); | 37 | |
38 | extern void h8300_enable_trace(struct task_struct *child); | 38 | |
39 | void user_disable_single_step(struct task_struct *child) | ||
40 | { | ||
41 | } | ||
39 | 42 | ||
40 | /* | 43 | /* |
41 | * does not yet catch signals sent when the child dies. | 44 | * does not yet catch signals sent when the child dies. |
42 | * in exit.c or in signal.c. | 45 | * in exit.c or in signal.c. |
43 | */ | 46 | */ |
44 | 47 | ||
45 | inline | ||
46 | static int read_long(struct task_struct * tsk, unsigned long addr, | ||
47 | unsigned long * result) | ||
48 | { | ||
49 | *result = *(unsigned long *)addr; | ||
50 | return 0; | ||
51 | } | ||
52 | |||
53 | void ptrace_disable(struct task_struct *child) | 48 | void ptrace_disable(struct task_struct *child) |
54 | { | 49 | { |
55 | h8300_disable_trace(child); | 50 | user_disable_single_step(child); |
56 | } | 51 | } |
57 | 52 | ||
58 | long arch_ptrace(struct task_struct *child, long request, long addr, long data) | 53 | long arch_ptrace(struct task_struct *child, long request, long addr, long data) |
@@ -60,17 +55,6 @@ long arch_ptrace(struct task_struct *child, long request, long addr, long data) | |||
60 | int ret; | 55 | int ret; |
61 | 56 | ||
62 | switch (request) { | 57 | switch (request) { |
63 | case PTRACE_PEEKTEXT: /* read word at location addr. */ | ||
64 | case PTRACE_PEEKDATA: { | ||
65 | unsigned long tmp; | ||
66 | |||
67 | ret = read_long(child, addr, &tmp); | ||
68 | if (ret < 0) | ||
69 | break ; | ||
70 | ret = put_user(tmp, (unsigned long *) data); | ||
71 | break ; | ||
72 | } | ||
73 | |||
74 | /* read the word at location addr in the USER area. */ | 58 | /* read the word at location addr in the USER area. */ |
75 | case PTRACE_PEEKUSR: { | 59 | case PTRACE_PEEKUSR: { |
76 | unsigned long tmp = 0; | 60 | unsigned long tmp = 0; |
@@ -109,11 +93,6 @@ long arch_ptrace(struct task_struct *child, long request, long addr, long data) | |||
109 | } | 93 | } |
110 | 94 | ||
111 | /* when I and D space are separate, this will have to be fixed. */ | 95 | /* when I and D space are separate, this will have to be fixed. */ |
112 | case PTRACE_POKETEXT: /* write the word at location addr. */ | ||
113 | case PTRACE_POKEDATA: | ||
114 | ret = generic_ptrace_pokedata(child, addr, data); | ||
115 | break; | ||
116 | |||
117 | case PTRACE_POKEUSR: /* write the word at location addr in the USER area */ | 96 | case PTRACE_POKEUSR: /* write the word at location addr in the USER area */ |
118 | if ((addr & 3) || addr < 0 || addr >= sizeof(struct user)) { | 97 | if ((addr & 3) || addr < 0 || addr >= sizeof(struct user)) { |
119 | ret = -EIO; | 98 | ret = -EIO; |
@@ -131,53 +110,6 @@ long arch_ptrace(struct task_struct *child, long request, long addr, long data) | |||
131 | } | 110 | } |
132 | ret = -EIO; | 111 | ret = -EIO; |
133 | break ; | 112 | break ; |
134 | case PTRACE_SYSCALL: /* continue and stop at next (return from) syscall */ | ||
135 | case PTRACE_CONT: { /* restart after signal. */ | ||
136 | ret = -EIO; | ||
137 | if (!valid_signal(data)) | ||
138 | break ; | ||
139 | if (request == PTRACE_SYSCALL) | ||
140 | set_tsk_thread_flag(child, TIF_SYSCALL_TRACE); | ||
141 | else | ||
142 | clear_tsk_thread_flag(child, TIF_SYSCALL_TRACE); | ||
143 | child->exit_code = data; | ||
144 | wake_up_process(child); | ||
145 | /* make sure the single step bit is not set. */ | ||
146 | h8300_disable_trace(child); | ||
147 | ret = 0; | ||
148 | } | ||
149 | |||
150 | /* | ||
151 | * make the child exit. Best I can do is send it a sigkill. | ||
152 | * perhaps it should be put in the status that it wants to | ||
153 | * exit. | ||
154 | */ | ||
155 | case PTRACE_KILL: { | ||
156 | |||
157 | ret = 0; | ||
158 | if (child->exit_state == EXIT_ZOMBIE) /* already dead */ | ||
159 | break; | ||
160 | child->exit_code = SIGKILL; | ||
161 | h8300_disable_trace(child); | ||
162 | wake_up_process(child); | ||
163 | break; | ||
164 | } | ||
165 | |||
166 | case PTRACE_SINGLESTEP: { /* set the trap flag. */ | ||
167 | ret = -EIO; | ||
168 | if (!valid_signal(data)) | ||
169 | break; | ||
170 | clear_tsk_thread_flag(child, TIF_SYSCALL_TRACE); | ||
171 | child->exit_code = data; | ||
172 | h8300_enable_trace(child); | ||
173 | wake_up_process(child); | ||
174 | ret = 0; | ||
175 | break; | ||
176 | } | ||
177 | |||
178 | case PTRACE_DETACH: /* detach a process that was attached. */ | ||
179 | ret = ptrace_detach(child, data); | ||
180 | break; | ||
181 | 113 | ||
182 | case PTRACE_GETREGS: { /* Get all gp regs from the child. */ | 114 | case PTRACE_GETREGS: { /* Get all gp regs from the child. */ |
183 | int i; | 115 | int i; |
@@ -210,7 +142,7 @@ long arch_ptrace(struct task_struct *child, long request, long addr, long data) | |||
210 | } | 142 | } |
211 | 143 | ||
212 | default: | 144 | default: |
213 | ret = -EIO; | 145 | ret = ptrace_request(child, request, addr, data); |
214 | break; | 146 | break; |
215 | } | 147 | } |
216 | return ret; | 148 | return ret; |
diff --git a/arch/h8300/kernel/sys_h8300.c b/arch/h8300/kernel/sys_h8300.c index b5969db0ca10..f9b3f44da69f 100644 --- a/arch/h8300/kernel/sys_h8300.c +++ b/arch/h8300/kernel/sys_h8300.c | |||
@@ -26,144 +26,6 @@ | |||
26 | #include <asm/traps.h> | 26 | #include <asm/traps.h> |
27 | #include <asm/unistd.h> | 27 | #include <asm/unistd.h> |
28 | 28 | ||
29 | /* | ||
30 | * Perform the select(nd, in, out, ex, tv) and mmap() system | ||
31 | * calls. Linux/m68k cloned Linux/i386, which didn't use to be able to | ||
32 | * handle more than 4 system call parameters, so these system calls | ||
33 | * used a memory block for parameter passing.. | ||
34 | */ | ||
35 | |||
36 | struct mmap_arg_struct { | ||
37 | unsigned long addr; | ||
38 | unsigned long len; | ||
39 | unsigned long prot; | ||
40 | unsigned long flags; | ||
41 | unsigned long fd; | ||
42 | unsigned long offset; | ||
43 | }; | ||
44 | |||
45 | asmlinkage int old_mmap(struct mmap_arg_struct *arg) | ||
46 | { | ||
47 | struct mmap_arg_struct a; | ||
48 | int error = -EFAULT; | ||
49 | |||
50 | if (copy_from_user(&a, arg, sizeof(a))) | ||
51 | goto out; | ||
52 | |||
53 | error = -EINVAL; | ||
54 | if (a.offset & ~PAGE_MASK) | ||
55 | goto out; | ||
56 | |||
57 | error = sys_mmap_pgoff(a.addr, a.len, a.prot, a.flags, a.fd, | ||
58 | a.offset >> PAGE_SHIFT); | ||
59 | out: | ||
60 | return error; | ||
61 | } | ||
62 | |||
63 | struct sel_arg_struct { | ||
64 | unsigned long n; | ||
65 | fd_set *inp, *outp, *exp; | ||
66 | struct timeval *tvp; | ||
67 | }; | ||
68 | |||
69 | asmlinkage int old_select(struct sel_arg_struct *arg) | ||
70 | { | ||
71 | struct sel_arg_struct a; | ||
72 | |||
73 | if (copy_from_user(&a, arg, sizeof(a))) | ||
74 | return -EFAULT; | ||
75 | /* sys_select() does the appropriate kernel locking */ | ||
76 | return sys_select(a.n, a.inp, a.outp, a.exp, a.tvp); | ||
77 | } | ||
78 | |||
79 | /* | ||
80 | * sys_ipc() is the de-multiplexer for the SysV IPC calls.. | ||
81 | * | ||
82 | * This is really horribly ugly. | ||
83 | */ | ||
84 | asmlinkage int sys_ipc (uint call, int first, int second, | ||
85 | int third, void *ptr, long fifth) | ||
86 | { | ||
87 | int version, ret; | ||
88 | |||
89 | version = call >> 16; /* hack for backward compatibility */ | ||
90 | call &= 0xffff; | ||
91 | |||
92 | if (call <= SEMCTL) | ||
93 | switch (call) { | ||
94 | case SEMOP: | ||
95 | return sys_semop (first, (struct sembuf *)ptr, second); | ||
96 | case SEMGET: | ||
97 | return sys_semget (first, second, third); | ||
98 | case SEMCTL: { | ||
99 | union semun fourth; | ||
100 | if (!ptr) | ||
101 | return -EINVAL; | ||
102 | if (get_user(fourth.__pad, (void **) ptr)) | ||
103 | return -EFAULT; | ||
104 | return sys_semctl (first, second, third, fourth); | ||
105 | } | ||
106 | default: | ||
107 | return -EINVAL; | ||
108 | } | ||
109 | if (call <= MSGCTL) | ||
110 | switch (call) { | ||
111 | case MSGSND: | ||
112 | return sys_msgsnd (first, (struct msgbuf *) ptr, | ||
113 | second, third); | ||
114 | case MSGRCV: | ||
115 | switch (version) { | ||
116 | case 0: { | ||
117 | struct ipc_kludge tmp; | ||
118 | if (!ptr) | ||
119 | return -EINVAL; | ||
120 | if (copy_from_user (&tmp, | ||
121 | (struct ipc_kludge *)ptr, | ||
122 | sizeof (tmp))) | ||
123 | return -EFAULT; | ||
124 | return sys_msgrcv (first, tmp.msgp, second, | ||
125 | tmp.msgtyp, third); | ||
126 | } | ||
127 | default: | ||
128 | return sys_msgrcv (first, | ||
129 | (struct msgbuf *) ptr, | ||
130 | second, fifth, third); | ||
131 | } | ||
132 | case MSGGET: | ||
133 | return sys_msgget ((key_t) first, second); | ||
134 | case MSGCTL: | ||
135 | return sys_msgctl (first, second, | ||
136 | (struct msqid_ds *) ptr); | ||
137 | default: | ||
138 | return -EINVAL; | ||
139 | } | ||
140 | if (call <= SHMCTL) | ||
141 | switch (call) { | ||
142 | case SHMAT: | ||
143 | switch (version) { | ||
144 | default: { | ||
145 | ulong raddr; | ||
146 | ret = do_shmat (first, (char *) ptr, | ||
147 | second, &raddr); | ||
148 | if (ret) | ||
149 | return ret; | ||
150 | return put_user (raddr, (ulong *) third); | ||
151 | } | ||
152 | } | ||
153 | case SHMDT: | ||
154 | return sys_shmdt ((char *)ptr); | ||
155 | case SHMGET: | ||
156 | return sys_shmget (first, second, third); | ||
157 | case SHMCTL: | ||
158 | return sys_shmctl (first, second, | ||
159 | (struct shmid_ds *) ptr); | ||
160 | default: | ||
161 | return -EINVAL; | ||
162 | } | ||
163 | |||
164 | return -EINVAL; | ||
165 | } | ||
166 | |||
167 | /* sys_cacheflush -- no support. */ | 29 | /* sys_cacheflush -- no support. */ |
168 | asmlinkage int | 30 | asmlinkage int |
169 | sys_cacheflush (unsigned long addr, int scope, int cache, unsigned long len) | 31 | sys_cacheflush (unsigned long addr, int scope, int cache, unsigned long len) |
diff --git a/arch/h8300/kernel/syscalls.S b/arch/h8300/kernel/syscalls.S index 2d69881eda6a..faefaff7d43d 100644 --- a/arch/h8300/kernel/syscalls.S +++ b/arch/h8300/kernel/syscalls.S | |||
@@ -96,7 +96,7 @@ SYMBOL_NAME_LABEL(sys_call_table) | |||
96 | .long SYMBOL_NAME(sys_settimeofday) | 96 | .long SYMBOL_NAME(sys_settimeofday) |
97 | .long SYMBOL_NAME(sys_getgroups16) /* 80 */ | 97 | .long SYMBOL_NAME(sys_getgroups16) /* 80 */ |
98 | .long SYMBOL_NAME(sys_setgroups16) | 98 | .long SYMBOL_NAME(sys_setgroups16) |
99 | .long SYMBOL_NAME(old_select) | 99 | .long SYMBOL_NAME(sys_old_select) |
100 | .long SYMBOL_NAME(sys_symlink) | 100 | .long SYMBOL_NAME(sys_symlink) |
101 | .long SYMBOL_NAME(sys_lstat) | 101 | .long SYMBOL_NAME(sys_lstat) |
102 | .long SYMBOL_NAME(sys_readlink) /* 85 */ | 102 | .long SYMBOL_NAME(sys_readlink) /* 85 */ |
@@ -104,7 +104,7 @@ SYMBOL_NAME_LABEL(sys_call_table) | |||
104 | .long SYMBOL_NAME(sys_swapon) | 104 | .long SYMBOL_NAME(sys_swapon) |
105 | .long SYMBOL_NAME(sys_reboot) | 105 | .long SYMBOL_NAME(sys_reboot) |
106 | .long SYMBOL_NAME(sys_old_readdir) | 106 | .long SYMBOL_NAME(sys_old_readdir) |
107 | .long SYMBOL_NAME(old_mmap) /* 90 */ | 107 | .long SYMBOL_NAME(sys_old_mmap) /* 90 */ |
108 | .long SYMBOL_NAME(sys_munmap) | 108 | .long SYMBOL_NAME(sys_munmap) |
109 | .long SYMBOL_NAME(sys_truncate) | 109 | .long SYMBOL_NAME(sys_truncate) |
110 | .long SYMBOL_NAME(sys_ftruncate) | 110 | .long SYMBOL_NAME(sys_ftruncate) |
diff --git a/arch/h8300/platform/h8300h/ptrace_h8300h.c b/arch/h8300/platform/h8300h/ptrace_h8300h.c index 746b1ae672a1..4f1ed0279633 100644 --- a/arch/h8300/platform/h8300h/ptrace_h8300h.c +++ b/arch/h8300/platform/h8300h/ptrace_h8300h.c | |||
@@ -60,7 +60,7 @@ int h8300_put_reg(struct task_struct *task, int regno, unsigned long data) | |||
60 | } | 60 | } |
61 | 61 | ||
62 | /* disable singlestep */ | 62 | /* disable singlestep */ |
63 | void h8300_disable_trace(struct task_struct *child) | 63 | void user_disable_single_step(struct task_struct *child) |
64 | { | 64 | { |
65 | if((long)child->thread.breakinfo.addr != -1L) { | 65 | if((long)child->thread.breakinfo.addr != -1L) { |
66 | *child->thread.breakinfo.addr = child->thread.breakinfo.inst; | 66 | *child->thread.breakinfo.addr = child->thread.breakinfo.inst; |
@@ -264,7 +264,7 @@ static unsigned short *getnextpc(struct task_struct *child, unsigned short *pc) | |||
264 | 264 | ||
265 | /* Set breakpoint(s) to simulate a single step from the current PC. */ | 265 | /* Set breakpoint(s) to simulate a single step from the current PC. */ |
266 | 266 | ||
267 | void h8300_enable_trace(struct task_struct *child) | 267 | void user_enable_single_step(struct task_struct *child) |
268 | { | 268 | { |
269 | unsigned short *nextpc; | 269 | unsigned short *nextpc; |
270 | nextpc = getnextpc(child,(unsigned short *)h8300_get_reg(child, PT_PC)); | 270 | nextpc = getnextpc(child,(unsigned short *)h8300_get_reg(child, PT_PC)); |
@@ -276,7 +276,7 @@ void h8300_enable_trace(struct task_struct *child) | |||
276 | asmlinkage void trace_trap(unsigned long bp) | 276 | asmlinkage void trace_trap(unsigned long bp) |
277 | { | 277 | { |
278 | if ((unsigned long)current->thread.breakinfo.addr == bp) { | 278 | if ((unsigned long)current->thread.breakinfo.addr == bp) { |
279 | h8300_disable_trace(current); | 279 | user_disable_single_step(current); |
280 | force_sig(SIGTRAP,current); | 280 | force_sig(SIGTRAP,current); |
281 | } else | 281 | } else |
282 | force_sig(SIGILL,current); | 282 | force_sig(SIGILL,current); |
diff --git a/arch/h8300/platform/h8s/ptrace_h8s.c b/arch/h8300/platform/h8s/ptrace_h8s.c index e8cd46f9255c..c058ab1a8495 100644 --- a/arch/h8300/platform/h8s/ptrace_h8s.c +++ b/arch/h8300/platform/h8s/ptrace_h8s.c | |||
@@ -65,13 +65,13 @@ int h8300_put_reg(struct task_struct *task, int regno, unsigned long data) | |||
65 | } | 65 | } |
66 | 66 | ||
67 | /* disable singlestep */ | 67 | /* disable singlestep */ |
68 | void h8300_disable_trace(struct task_struct *child) | 68 | void user_disable_single_step(struct task_struct *child) |
69 | { | 69 | { |
70 | *(unsigned short *)(child->thread.esp0 + h8300_register_offset[PT_EXR]) &= ~EXR_TRACE; | 70 | *(unsigned short *)(child->thread.esp0 + h8300_register_offset[PT_EXR]) &= ~EXR_TRACE; |
71 | } | 71 | } |
72 | 72 | ||
73 | /* enable singlestep */ | 73 | /* enable singlestep */ |
74 | void h8300_enable_trace(struct task_struct *child) | 74 | void user_enable_single_step(struct task_struct *child) |
75 | { | 75 | { |
76 | *(unsigned short *)(child->thread.esp0 + h8300_register_offset[PT_EXR]) |= EXR_TRACE; | 76 | *(unsigned short *)(child->thread.esp0 + h8300_register_offset[PT_EXR]) |= EXR_TRACE; |
77 | } | 77 | } |
diff --git a/arch/ia64/Kconfig b/arch/ia64/Kconfig index 9a50d7dd2a0b..4d4f4188cdf1 100644 --- a/arch/ia64/Kconfig +++ b/arch/ia64/Kconfig | |||
@@ -53,6 +53,9 @@ config MMU | |||
53 | bool | 53 | bool |
54 | default y | 54 | default y |
55 | 55 | ||
56 | config NEED_DMA_MAP_STATE | ||
57 | def_bool y | ||
58 | |||
56 | config SWIOTLB | 59 | config SWIOTLB |
57 | bool | 60 | bool |
58 | 61 | ||
diff --git a/arch/ia64/include/asm/compat.h b/arch/ia64/include/asm/compat.h index dfcf75b8426d..f90edc85b509 100644 --- a/arch/ia64/include/asm/compat.h +++ b/arch/ia64/include/asm/compat.h | |||
@@ -5,7 +5,8 @@ | |||
5 | */ | 5 | */ |
6 | #include <linux/types.h> | 6 | #include <linux/types.h> |
7 | 7 | ||
8 | #define COMPAT_USER_HZ 100 | 8 | #define COMPAT_USER_HZ 100 |
9 | #define COMPAT_UTS_MACHINE "i686\0\0\0" | ||
9 | 10 | ||
10 | typedef u32 compat_size_t; | 11 | typedef u32 compat_size_t; |
11 | typedef s32 compat_ssize_t; | 12 | typedef s32 compat_ssize_t; |
diff --git a/arch/ia64/include/asm/pci.h b/arch/ia64/include/asm/pci.h index 55281aabe5f2..73b5f785e70c 100644 --- a/arch/ia64/include/asm/pci.h +++ b/arch/ia64/include/asm/pci.h | |||
@@ -56,20 +56,6 @@ pcibios_penalize_isa_irq (int irq, int active) | |||
56 | 56 | ||
57 | #include <asm-generic/pci-dma-compat.h> | 57 | #include <asm-generic/pci-dma-compat.h> |
58 | 58 | ||
59 | /* pci_unmap_{single,page} is not a nop, thus... */ | ||
60 | #define DECLARE_PCI_UNMAP_ADDR(ADDR_NAME) \ | ||
61 | dma_addr_t ADDR_NAME; | ||
62 | #define DECLARE_PCI_UNMAP_LEN(LEN_NAME) \ | ||
63 | __u32 LEN_NAME; | ||
64 | #define pci_unmap_addr(PTR, ADDR_NAME) \ | ||
65 | ((PTR)->ADDR_NAME) | ||
66 | #define pci_unmap_addr_set(PTR, ADDR_NAME, VAL) \ | ||
67 | (((PTR)->ADDR_NAME) = (VAL)) | ||
68 | #define pci_unmap_len(PTR, LEN_NAME) \ | ||
69 | ((PTR)->LEN_NAME) | ||
70 | #define pci_unmap_len_set(PTR, LEN_NAME, VAL) \ | ||
71 | (((PTR)->LEN_NAME) = (VAL)) | ||
72 | |||
73 | #ifdef CONFIG_PCI | 59 | #ifdef CONFIG_PCI |
74 | static inline void pci_dma_burst_advice(struct pci_dev *pdev, | 60 | static inline void pci_dma_burst_advice(struct pci_dev *pdev, |
75 | enum pci_dma_burst_strategy *strat, | 61 | enum pci_dma_burst_strategy *strat, |
diff --git a/arch/ia64/include/asm/ptrace.h b/arch/ia64/include/asm/ptrace.h index 14055c636adf..7ae9c3f15a1c 100644 --- a/arch/ia64/include/asm/ptrace.h +++ b/arch/ia64/include/asm/ptrace.h | |||
@@ -319,11 +319,7 @@ static inline unsigned long user_stack_pointer(struct pt_regs *regs) | |||
319 | ptrace_attach_sync_user_rbs(child) | 319 | ptrace_attach_sync_user_rbs(child) |
320 | 320 | ||
321 | #define arch_has_single_step() (1) | 321 | #define arch_has_single_step() (1) |
322 | extern void user_enable_single_step(struct task_struct *); | ||
323 | extern void user_disable_single_step(struct task_struct *); | ||
324 | |||
325 | #define arch_has_block_step() (1) | 322 | #define arch_has_block_step() (1) |
326 | extern void user_enable_block_step(struct task_struct *); | ||
327 | 323 | ||
328 | #endif /* !__KERNEL__ */ | 324 | #endif /* !__KERNEL__ */ |
329 | 325 | ||
diff --git a/arch/ia64/kernel/topology.c b/arch/ia64/kernel/topology.c index 8f060352e129..b3a5818088d9 100644 --- a/arch/ia64/kernel/topology.c +++ b/arch/ia64/kernel/topology.c | |||
@@ -282,7 +282,7 @@ static ssize_t cache_show(struct kobject * kobj, struct attribute * attr, char * | |||
282 | return ret; | 282 | return ret; |
283 | } | 283 | } |
284 | 284 | ||
285 | static struct sysfs_ops cache_sysfs_ops = { | 285 | static const struct sysfs_ops cache_sysfs_ops = { |
286 | .show = cache_show | 286 | .show = cache_show |
287 | }; | 287 | }; |
288 | 288 | ||
diff --git a/arch/m32r/include/asm/ptrace.h b/arch/m32r/include/asm/ptrace.h index a0755b982028..840a1231edeb 100644 --- a/arch/m32r/include/asm/ptrace.h +++ b/arch/m32r/include/asm/ptrace.h | |||
@@ -120,6 +120,8 @@ struct pt_regs { | |||
120 | 120 | ||
121 | #include <asm/m32r.h> /* M32R_PSW_BSM, M32R_PSW_BPM */ | 121 | #include <asm/m32r.h> /* M32R_PSW_BSM, M32R_PSW_BPM */ |
122 | 122 | ||
123 | #define arch_has_single_step() (1) | ||
124 | |||
123 | struct task_struct; | 125 | struct task_struct; |
124 | extern void init_debug_traps(struct task_struct *); | 126 | extern void init_debug_traps(struct task_struct *); |
125 | #define arch_ptrace_attach(child) \ | 127 | #define arch_ptrace_attach(child) \ |
diff --git a/arch/m32r/include/asm/unistd.h b/arch/m32r/include/asm/unistd.h index cf701c933249..76125777483c 100644 --- a/arch/m32r/include/asm/unistd.h +++ b/arch/m32r/include/asm/unistd.h | |||
@@ -339,6 +339,7 @@ | |||
339 | #define __ARCH_WANT_STAT64 | 339 | #define __ARCH_WANT_STAT64 |
340 | #define __ARCH_WANT_SYS_ALARM | 340 | #define __ARCH_WANT_SYS_ALARM |
341 | #define __ARCH_WANT_SYS_GETHOSTNAME | 341 | #define __ARCH_WANT_SYS_GETHOSTNAME |
342 | #define __ARCH_WANT_SYS_IPC | ||
342 | #define __ARCH_WANT_SYS_PAUSE | 343 | #define __ARCH_WANT_SYS_PAUSE |
343 | #define __ARCH_WANT_SYS_TIME | 344 | #define __ARCH_WANT_SYS_TIME |
344 | #define __ARCH_WANT_SYS_UTIME | 345 | #define __ARCH_WANT_SYS_UTIME |
diff --git a/arch/m32r/kernel/ptrace.c b/arch/m32r/kernel/ptrace.c index 98682bba0ed9..e555091eb97c 100644 --- a/arch/m32r/kernel/ptrace.c +++ b/arch/m32r/kernel/ptrace.c | |||
@@ -580,6 +580,35 @@ init_debug_traps(struct task_struct *child) | |||
580 | } | 580 | } |
581 | } | 581 | } |
582 | 582 | ||
583 | void user_enable_single_step(struct task_struct *child) | ||
584 | { | ||
585 | unsigned long next_pc; | ||
586 | unsigned long pc, insn; | ||
587 | |||
588 | clear_tsk_thread_flag(child, TIF_SYSCALL_TRACE); | ||
589 | |||
590 | /* Compute next pc. */ | ||
591 | pc = get_stack_long(child, PT_BPC); | ||
592 | |||
593 | if (access_process_vm(child, pc&~3, &insn, sizeof(insn), 0) | ||
594 | != sizeof(insn)) | ||
595 | break; | ||
596 | |||
597 | compute_next_pc(insn, pc, &next_pc, child); | ||
598 | if (next_pc & 0x80000000) | ||
599 | break; | ||
600 | |||
601 | if (embed_debug_trap(child, next_pc)) | ||
602 | break; | ||
603 | |||
604 | invalidate_cache(); | ||
605 | } | ||
606 | |||
607 | void user_disable_single_step(struct task_struct *child) | ||
608 | { | ||
609 | unregister_all_debug_traps(child); | ||
610 | invalidate_cache(); | ||
611 | } | ||
583 | 612 | ||
584 | /* | 613 | /* |
585 | * Called by kernel/ptrace.c when detaching.. | 614 | * Called by kernel/ptrace.c when detaching.. |
@@ -630,74 +659,6 @@ arch_ptrace(struct task_struct *child, long request, long addr, long data) | |||
630 | ret = ptrace_write_user(child, addr, data); | 659 | ret = ptrace_write_user(child, addr, data); |
631 | break; | 660 | break; |
632 | 661 | ||
633 | /* | ||
634 | * continue/restart and stop at next (return from) syscall | ||
635 | */ | ||
636 | case PTRACE_SYSCALL: | ||
637 | case PTRACE_CONT: | ||
638 | ret = -EIO; | ||
639 | if (!valid_signal(data)) | ||
640 | break; | ||
641 | if (request == PTRACE_SYSCALL) | ||
642 | set_tsk_thread_flag(child, TIF_SYSCALL_TRACE); | ||
643 | else | ||
644 | clear_tsk_thread_flag(child, TIF_SYSCALL_TRACE); | ||
645 | child->exit_code = data; | ||
646 | wake_up_process(child); | ||
647 | ret = 0; | ||
648 | break; | ||
649 | |||
650 | /* | ||
651 | * make the child exit. Best I can do is send it a sigkill. | ||
652 | * perhaps it should be put in the status that it wants to | ||
653 | * exit. | ||
654 | */ | ||
655 | case PTRACE_KILL: { | ||
656 | ret = 0; | ||
657 | unregister_all_debug_traps(child); | ||
658 | invalidate_cache(); | ||
659 | if (child->exit_state == EXIT_ZOMBIE) /* already dead */ | ||
660 | break; | ||
661 | child->exit_code = SIGKILL; | ||
662 | wake_up_process(child); | ||
663 | break; | ||
664 | } | ||
665 | |||
666 | /* | ||
667 | * execute single instruction. | ||
668 | */ | ||
669 | case PTRACE_SINGLESTEP: { | ||
670 | unsigned long next_pc; | ||
671 | unsigned long pc, insn; | ||
672 | |||
673 | ret = -EIO; | ||
674 | if (!valid_signal(data)) | ||
675 | break; | ||
676 | clear_tsk_thread_flag(child, TIF_SYSCALL_TRACE); | ||
677 | |||
678 | /* Compute next pc. */ | ||
679 | pc = get_stack_long(child, PT_BPC); | ||
680 | |||
681 | if (access_process_vm(child, pc&~3, &insn, sizeof(insn), 0) | ||
682 | != sizeof(insn)) | ||
683 | break; | ||
684 | |||
685 | compute_next_pc(insn, pc, &next_pc, child); | ||
686 | if (next_pc & 0x80000000) | ||
687 | break; | ||
688 | |||
689 | if (embed_debug_trap(child, next_pc)) | ||
690 | break; | ||
691 | |||
692 | invalidate_cache(); | ||
693 | child->exit_code = data; | ||
694 | |||
695 | /* give it a chance to run. */ | ||
696 | wake_up_process(child); | ||
697 | ret = 0; | ||
698 | break; | ||
699 | } | ||
700 | |||
701 | case PTRACE_GETREGS: | 662 | case PTRACE_GETREGS: |
702 | ret = ptrace_getregs(child, (void __user *)data); | 663 | ret = ptrace_getregs(child, (void __user *)data); |
703 | break; | 664 | break; |
diff --git a/arch/m32r/kernel/sys_m32r.c b/arch/m32r/kernel/sys_m32r.c index d3c865c5a6ba..0a00f467edfa 100644 --- a/arch/m32r/kernel/sys_m32r.c +++ b/arch/m32r/kernel/sys_m32r.c | |||
@@ -76,98 +76,6 @@ asmlinkage int sys_tas(int __user *addr) | |||
76 | return oldval; | 76 | return oldval; |
77 | } | 77 | } |
78 | 78 | ||
79 | /* | ||
80 | * sys_ipc() is the de-multiplexer for the SysV IPC calls.. | ||
81 | * | ||
82 | * This is really horribly ugly. | ||
83 | */ | ||
84 | asmlinkage int sys_ipc(uint call, int first, int second, | ||
85 | int third, void __user *ptr, long fifth) | ||
86 | { | ||
87 | int version, ret; | ||
88 | |||
89 | version = call >> 16; /* hack for backward compatibility */ | ||
90 | call &= 0xffff; | ||
91 | |||
92 | switch (call) { | ||
93 | case SEMOP: | ||
94 | return sys_semtimedop(first, (struct sembuf __user *)ptr, | ||
95 | second, NULL); | ||
96 | case SEMTIMEDOP: | ||
97 | return sys_semtimedop(first, (struct sembuf __user *)ptr, | ||
98 | second, (const struct timespec __user *)fifth); | ||
99 | case SEMGET: | ||
100 | return sys_semget (first, second, third); | ||
101 | case SEMCTL: { | ||
102 | union semun fourth; | ||
103 | if (!ptr) | ||
104 | return -EINVAL; | ||
105 | if (get_user(fourth.__pad, (void __user * __user *) ptr)) | ||
106 | return -EFAULT; | ||
107 | return sys_semctl (first, second, third, fourth); | ||
108 | } | ||
109 | |||
110 | case MSGSND: | ||
111 | return sys_msgsnd (first, (struct msgbuf __user *) ptr, | ||
112 | second, third); | ||
113 | case MSGRCV: | ||
114 | switch (version) { | ||
115 | case 0: { | ||
116 | struct ipc_kludge tmp; | ||
117 | if (!ptr) | ||
118 | return -EINVAL; | ||
119 | |||
120 | if (copy_from_user(&tmp, | ||
121 | (struct ipc_kludge __user *) ptr, | ||
122 | sizeof (tmp))) | ||
123 | return -EFAULT; | ||
124 | return sys_msgrcv (first, tmp.msgp, second, | ||
125 | tmp.msgtyp, third); | ||
126 | } | ||
127 | default: | ||
128 | return sys_msgrcv (first, | ||
129 | (struct msgbuf __user *) ptr, | ||
130 | second, fifth, third); | ||
131 | } | ||
132 | case MSGGET: | ||
133 | return sys_msgget ((key_t) first, second); | ||
134 | case MSGCTL: | ||
135 | return sys_msgctl (first, second, | ||
136 | (struct msqid_ds __user *) ptr); | ||
137 | case SHMAT: { | ||
138 | ulong raddr; | ||
139 | |||
140 | if (!access_ok(VERIFY_WRITE, (ulong __user *) third, | ||
141 | sizeof(ulong))) | ||
142 | return -EFAULT; | ||
143 | ret = do_shmat (first, (char __user *) ptr, second, &raddr); | ||
144 | if (ret) | ||
145 | return ret; | ||
146 | return put_user (raddr, (ulong __user *) third); | ||
147 | } | ||
148 | case SHMDT: | ||
149 | return sys_shmdt ((char __user *)ptr); | ||
150 | case SHMGET: | ||
151 | return sys_shmget (first, second, third); | ||
152 | case SHMCTL: | ||
153 | return sys_shmctl (first, second, | ||
154 | (struct shmid_ds __user *) ptr); | ||
155 | default: | ||
156 | return -ENOSYS; | ||
157 | } | ||
158 | } | ||
159 | |||
160 | asmlinkage int sys_uname(struct old_utsname __user * name) | ||
161 | { | ||
162 | int err; | ||
163 | if (!name) | ||
164 | return -EFAULT; | ||
165 | down_read(&uts_sem); | ||
166 | err = copy_to_user(name, utsname(), sizeof (*name)); | ||
167 | up_read(&uts_sem); | ||
168 | return err?-EFAULT:0; | ||
169 | } | ||
170 | |||
171 | asmlinkage int sys_cacheflush(void *addr, int bytes, int cache) | 79 | asmlinkage int sys_cacheflush(void *addr, int bytes, int cache) |
172 | { | 80 | { |
173 | /* This should flush more selectively ... */ | 81 | /* This should flush more selectively ... */ |
diff --git a/arch/m68k/include/asm/ptrace.h b/arch/m68k/include/asm/ptrace.h index 21605c736f69..6e6e3ac1d913 100644 --- a/arch/m68k/include/asm/ptrace.h +++ b/arch/m68k/include/asm/ptrace.h | |||
@@ -87,18 +87,10 @@ struct switch_stack { | |||
87 | #define profile_pc(regs) instruction_pointer(regs) | 87 | #define profile_pc(regs) instruction_pointer(regs) |
88 | extern void show_regs(struct pt_regs *); | 88 | extern void show_regs(struct pt_regs *); |
89 | 89 | ||
90 | /* | ||
91 | * These are defined as per linux/ptrace.h. | ||
92 | */ | ||
93 | struct task_struct; | ||
94 | |||
95 | #define arch_has_single_step() (1) | 90 | #define arch_has_single_step() (1) |
96 | extern void user_enable_single_step(struct task_struct *); | ||
97 | extern void user_disable_single_step(struct task_struct *); | ||
98 | 91 | ||
99 | #ifdef CONFIG_MMU | 92 | #ifdef CONFIG_MMU |
100 | #define arch_has_block_step() (1) | 93 | #define arch_has_block_step() (1) |
101 | extern void user_enable_block_step(struct task_struct *); | ||
102 | #endif | 94 | #endif |
103 | 95 | ||
104 | #endif /* __KERNEL__ */ | 96 | #endif /* __KERNEL__ */ |
diff --git a/arch/m68k/include/asm/unistd.h b/arch/m68k/include/asm/unistd.h index d72a71dabecb..60b15d0aa072 100644 --- a/arch/m68k/include/asm/unistd.h +++ b/arch/m68k/include/asm/unistd.h | |||
@@ -351,6 +351,7 @@ | |||
351 | #define __ARCH_WANT_STAT64 | 351 | #define __ARCH_WANT_STAT64 |
352 | #define __ARCH_WANT_SYS_ALARM | 352 | #define __ARCH_WANT_SYS_ALARM |
353 | #define __ARCH_WANT_SYS_GETHOSTNAME | 353 | #define __ARCH_WANT_SYS_GETHOSTNAME |
354 | #define __ARCH_WANT_SYS_IPC | ||
354 | #define __ARCH_WANT_SYS_PAUSE | 355 | #define __ARCH_WANT_SYS_PAUSE |
355 | #define __ARCH_WANT_SYS_SGETMASK | 356 | #define __ARCH_WANT_SYS_SGETMASK |
356 | #define __ARCH_WANT_SYS_SIGNAL | 357 | #define __ARCH_WANT_SYS_SIGNAL |
@@ -363,6 +364,8 @@ | |||
363 | #define __ARCH_WANT_SYS_LLSEEK | 364 | #define __ARCH_WANT_SYS_LLSEEK |
364 | #define __ARCH_WANT_SYS_NICE | 365 | #define __ARCH_WANT_SYS_NICE |
365 | #define __ARCH_WANT_SYS_OLD_GETRLIMIT | 366 | #define __ARCH_WANT_SYS_OLD_GETRLIMIT |
367 | #define __ARCH_WANT_SYS_OLD_MMAP | ||
368 | #define __ARCH_WANT_SYS_OLD_SELECT | ||
366 | #define __ARCH_WANT_SYS_OLDUMOUNT | 369 | #define __ARCH_WANT_SYS_OLDUMOUNT |
367 | #define __ARCH_WANT_SYS_SIGPENDING | 370 | #define __ARCH_WANT_SYS_SIGPENDING |
368 | #define __ARCH_WANT_SYS_SIGPROCMASK | 371 | #define __ARCH_WANT_SYS_SIGPROCMASK |
diff --git a/arch/m68k/kernel/entry.S b/arch/m68k/kernel/entry.S index e136b8cbe9b9..2391bdff0996 100644 --- a/arch/m68k/kernel/entry.S +++ b/arch/m68k/kernel/entry.S | |||
@@ -510,7 +510,7 @@ sys_call_table: | |||
510 | .long sys_settimeofday | 510 | .long sys_settimeofday |
511 | .long sys_getgroups16 /* 80 */ | 511 | .long sys_getgroups16 /* 80 */ |
512 | .long sys_setgroups16 | 512 | .long sys_setgroups16 |
513 | .long old_select | 513 | .long sys_old_select |
514 | .long sys_symlink | 514 | .long sys_symlink |
515 | .long sys_lstat | 515 | .long sys_lstat |
516 | .long sys_readlink /* 85 */ | 516 | .long sys_readlink /* 85 */ |
@@ -518,7 +518,7 @@ sys_call_table: | |||
518 | .long sys_swapon | 518 | .long sys_swapon |
519 | .long sys_reboot | 519 | .long sys_reboot |
520 | .long sys_old_readdir | 520 | .long sys_old_readdir |
521 | .long old_mmap /* 90 */ | 521 | .long sys_old_mmap /* 90 */ |
522 | .long sys_munmap | 522 | .long sys_munmap |
523 | .long sys_truncate | 523 | .long sys_truncate |
524 | .long sys_ftruncate | 524 | .long sys_ftruncate |
diff --git a/arch/m68k/kernel/sys_m68k.c b/arch/m68k/kernel/sys_m68k.c index e3ad2d671973..77896692eb0a 100644 --- a/arch/m68k/kernel/sys_m68k.c +++ b/arch/m68k/kernel/sys_m68k.c | |||
@@ -46,137 +46,6 @@ asmlinkage long sys_mmap2(unsigned long addr, unsigned long len, | |||
46 | return sys_mmap_pgoff(addr, len, prot, flags, fd, pgoff); | 46 | return sys_mmap_pgoff(addr, len, prot, flags, fd, pgoff); |
47 | } | 47 | } |
48 | 48 | ||
49 | /* | ||
50 | * Perform the select(nd, in, out, ex, tv) and mmap() system | ||
51 | * calls. Linux/m68k cloned Linux/i386, which didn't use to be able to | ||
52 | * handle more than 4 system call parameters, so these system calls | ||
53 | * used a memory block for parameter passing.. | ||
54 | */ | ||
55 | |||
56 | struct mmap_arg_struct { | ||
57 | unsigned long addr; | ||
58 | unsigned long len; | ||
59 | unsigned long prot; | ||
60 | unsigned long flags; | ||
61 | unsigned long fd; | ||
62 | unsigned long offset; | ||
63 | }; | ||
64 | |||
65 | asmlinkage int old_mmap(struct mmap_arg_struct __user *arg) | ||
66 | { | ||
67 | struct mmap_arg_struct a; | ||
68 | int error = -EFAULT; | ||
69 | |||
70 | if (copy_from_user(&a, arg, sizeof(a))) | ||
71 | goto out; | ||
72 | |||
73 | error = -EINVAL; | ||
74 | if (a.offset & ~PAGE_MASK) | ||
75 | goto out; | ||
76 | |||
77 | error = sys_mmap_pgoff(a.addr, a.len, a.prot, a.flags, a.fd, | ||
78 | a.offset >> PAGE_SHIFT); | ||
79 | out: | ||
80 | return error; | ||
81 | } | ||
82 | |||
83 | struct sel_arg_struct { | ||
84 | unsigned long n; | ||
85 | fd_set __user *inp, *outp, *exp; | ||
86 | struct timeval __user *tvp; | ||
87 | }; | ||
88 | |||
89 | asmlinkage int old_select(struct sel_arg_struct __user *arg) | ||
90 | { | ||
91 | struct sel_arg_struct a; | ||
92 | |||
93 | if (copy_from_user(&a, arg, sizeof(a))) | ||
94 | return -EFAULT; | ||
95 | /* sys_select() does the appropriate kernel locking */ | ||
96 | return sys_select(a.n, a.inp, a.outp, a.exp, a.tvp); | ||
97 | } | ||
98 | |||
99 | /* | ||
100 | * sys_ipc() is the de-multiplexer for the SysV IPC calls.. | ||
101 | * | ||
102 | * This is really horribly ugly. | ||
103 | */ | ||
104 | asmlinkage int sys_ipc (uint call, int first, int second, | ||
105 | int third, void __user *ptr, long fifth) | ||
106 | { | ||
107 | int version, ret; | ||
108 | |||
109 | version = call >> 16; /* hack for backward compatibility */ | ||
110 | call &= 0xffff; | ||
111 | |||
112 | if (call <= SEMCTL) | ||
113 | switch (call) { | ||
114 | case SEMOP: | ||
115 | return sys_semop (first, ptr, second); | ||
116 | case SEMGET: | ||
117 | return sys_semget (first, second, third); | ||
118 | case SEMCTL: { | ||
119 | union semun fourth; | ||
120 | if (!ptr) | ||
121 | return -EINVAL; | ||
122 | if (get_user(fourth.__pad, (void __user *__user *) ptr)) | ||
123 | return -EFAULT; | ||
124 | return sys_semctl (first, second, third, fourth); | ||
125 | } | ||
126 | default: | ||
127 | return -ENOSYS; | ||
128 | } | ||
129 | if (call <= MSGCTL) | ||
130 | switch (call) { | ||
131 | case MSGSND: | ||
132 | return sys_msgsnd (first, ptr, second, third); | ||
133 | case MSGRCV: | ||
134 | switch (version) { | ||
135 | case 0: { | ||
136 | struct ipc_kludge tmp; | ||
137 | if (!ptr) | ||
138 | return -EINVAL; | ||
139 | if (copy_from_user (&tmp, ptr, sizeof (tmp))) | ||
140 | return -EFAULT; | ||
141 | return sys_msgrcv (first, tmp.msgp, second, | ||
142 | tmp.msgtyp, third); | ||
143 | } | ||
144 | default: | ||
145 | return sys_msgrcv (first, ptr, | ||
146 | second, fifth, third); | ||
147 | } | ||
148 | case MSGGET: | ||
149 | return sys_msgget ((key_t) first, second); | ||
150 | case MSGCTL: | ||
151 | return sys_msgctl (first, second, ptr); | ||
152 | default: | ||
153 | return -ENOSYS; | ||
154 | } | ||
155 | if (call <= SHMCTL) | ||
156 | switch (call) { | ||
157 | case SHMAT: | ||
158 | switch (version) { | ||
159 | default: { | ||
160 | ulong raddr; | ||
161 | ret = do_shmat (first, ptr, second, &raddr); | ||
162 | if (ret) | ||
163 | return ret; | ||
164 | return put_user (raddr, (ulong __user *) third); | ||
165 | } | ||
166 | } | ||
167 | case SHMDT: | ||
168 | return sys_shmdt (ptr); | ||
169 | case SHMGET: | ||
170 | return sys_shmget (first, second, third); | ||
171 | case SHMCTL: | ||
172 | return sys_shmctl (first, second, ptr); | ||
173 | default: | ||
174 | return -ENOSYS; | ||
175 | } | ||
176 | |||
177 | return -EINVAL; | ||
178 | } | ||
179 | |||
180 | /* Convert virtual (user) address VADDR to physical address PADDR */ | 49 | /* Convert virtual (user) address VADDR to physical address PADDR */ |
181 | #define virt_to_phys_040(vaddr) \ | 50 | #define virt_to_phys_040(vaddr) \ |
182 | ({ \ | 51 | ({ \ |
diff --git a/arch/m68knommu/kernel/ptrace.c b/arch/m68knommu/kernel/ptrace.c index 85ed2f988f98..f6be1248d216 100644 --- a/arch/m68knommu/kernel/ptrace.c +++ b/arch/m68knommu/kernel/ptrace.c | |||
@@ -116,12 +116,6 @@ long arch_ptrace(struct task_struct *child, long request, long addr, long data) | |||
116 | int ret; | 116 | int ret; |
117 | 117 | ||
118 | switch (request) { | 118 | switch (request) { |
119 | /* when I and D space are separate, these will need to be fixed. */ | ||
120 | case PTRACE_PEEKTEXT: /* read word at location addr. */ | ||
121 | case PTRACE_PEEKDATA: | ||
122 | ret = generic_ptrace_peekdata(child, addr, data); | ||
123 | break; | ||
124 | |||
125 | /* read the word at location addr in the USER area. */ | 119 | /* read the word at location addr in the USER area. */ |
126 | case PTRACE_PEEKUSR: { | 120 | case PTRACE_PEEKUSR: { |
127 | unsigned long tmp; | 121 | unsigned long tmp; |
@@ -160,12 +154,6 @@ long arch_ptrace(struct task_struct *child, long request, long addr, long data) | |||
160 | break; | 154 | break; |
161 | } | 155 | } |
162 | 156 | ||
163 | /* when I and D space are separate, this will have to be fixed. */ | ||
164 | case PTRACE_POKETEXT: /* write the word at location addr. */ | ||
165 | case PTRACE_POKEDATA: | ||
166 | ret = generic_ptrace_pokedata(child, addr, data); | ||
167 | break; | ||
168 | |||
169 | case PTRACE_POKEUSR: /* write the word at location addr in the USER area */ | 157 | case PTRACE_POKEUSR: /* write the word at location addr in the USER area */ |
170 | ret = -EIO; | 158 | ret = -EIO; |
171 | if ((addr & 3) || addr < 0 || | 159 | if ((addr & 3) || addr < 0 || |
@@ -202,66 +190,6 @@ long arch_ptrace(struct task_struct *child, long request, long addr, long data) | |||
202 | } | 190 | } |
203 | break; | 191 | break; |
204 | 192 | ||
205 | case PTRACE_SYSCALL: /* continue and stop at next (return from) syscall */ | ||
206 | case PTRACE_CONT: { /* restart after signal. */ | ||
207 | long tmp; | ||
208 | |||
209 | ret = -EIO; | ||
210 | if (!valid_signal(data)) | ||
211 | break; | ||
212 | if (request == PTRACE_SYSCALL) | ||
213 | set_tsk_thread_flag(child, TIF_SYSCALL_TRACE); | ||
214 | else | ||
215 | clear_tsk_thread_flag(child, TIF_SYSCALL_TRACE); | ||
216 | child->exit_code = data; | ||
217 | /* make sure the single step bit is not set. */ | ||
218 | tmp = get_reg(child, PT_SR) & ~(TRACE_BITS << 16); | ||
219 | put_reg(child, PT_SR, tmp); | ||
220 | wake_up_process(child); | ||
221 | ret = 0; | ||
222 | break; | ||
223 | } | ||
224 | |||
225 | /* | ||
226 | * make the child exit. Best I can do is send it a sigkill. | ||
227 | * perhaps it should be put in the status that it wants to | ||
228 | * exit. | ||
229 | */ | ||
230 | case PTRACE_KILL: { | ||
231 | long tmp; | ||
232 | |||
233 | ret = 0; | ||
234 | if (child->exit_state == EXIT_ZOMBIE) /* already dead */ | ||
235 | break; | ||
236 | child->exit_code = SIGKILL; | ||
237 | /* make sure the single step bit is not set. */ | ||
238 | tmp = get_reg(child, PT_SR) & ~(TRACE_BITS << 16); | ||
239 | put_reg(child, PT_SR, tmp); | ||
240 | wake_up_process(child); | ||
241 | break; | ||
242 | } | ||
243 | |||
244 | case PTRACE_SINGLESTEP: { /* set the trap flag. */ | ||
245 | long tmp; | ||
246 | |||
247 | ret = -EIO; | ||
248 | if (!valid_signal(data)) | ||
249 | break; | ||
250 | clear_tsk_thread_flag(child, TIF_SYSCALL_TRACE); | ||
251 | tmp = get_reg(child, PT_SR) | (TRACE_BITS << 16); | ||
252 | put_reg(child, PT_SR, tmp); | ||
253 | |||
254 | child->exit_code = data; | ||
255 | /* give it a chance to run. */ | ||
256 | wake_up_process(child); | ||
257 | ret = 0; | ||
258 | break; | ||
259 | } | ||
260 | |||
261 | case PTRACE_DETACH: /* detach a process that was attached. */ | ||
262 | ret = ptrace_detach(child, data); | ||
263 | break; | ||
264 | |||
265 | case PTRACE_GETREGS: { /* Get all gp regs from the child. */ | 193 | case PTRACE_GETREGS: { /* Get all gp regs from the child. */ |
266 | int i; | 194 | int i; |
267 | unsigned long tmp; | 195 | unsigned long tmp; |
@@ -325,7 +253,7 @@ long arch_ptrace(struct task_struct *child, long request, long addr, long data) | |||
325 | break; | 253 | break; |
326 | 254 | ||
327 | default: | 255 | default: |
328 | ret = -EIO; | 256 | ret = ptrace_request(child, request, addr, data); |
329 | break; | 257 | break; |
330 | } | 258 | } |
331 | return ret; | 259 | return ret; |
diff --git a/arch/m68knommu/kernel/sys_m68k.c b/arch/m68knommu/kernel/sys_m68k.c index 923dd4aab875..d65e9c4c930c 100644 --- a/arch/m68knommu/kernel/sys_m68k.c +++ b/arch/m68knommu/kernel/sys_m68k.c | |||
@@ -27,142 +27,6 @@ | |||
27 | #include <asm/cacheflush.h> | 27 | #include <asm/cacheflush.h> |
28 | #include <asm/unistd.h> | 28 | #include <asm/unistd.h> |
29 | 29 | ||
30 | /* | ||
31 | * Perform the select(nd, in, out, ex, tv) and mmap() system | ||
32 | * calls. Linux/m68k cloned Linux/i386, which didn't use to be able to | ||
33 | * handle more than 4 system call parameters, so these system calls | ||
34 | * used a memory block for parameter passing.. | ||
35 | */ | ||
36 | |||
37 | struct mmap_arg_struct { | ||
38 | unsigned long addr; | ||
39 | unsigned long len; | ||
40 | unsigned long prot; | ||
41 | unsigned long flags; | ||
42 | unsigned long fd; | ||
43 | unsigned long offset; | ||
44 | }; | ||
45 | |||
46 | asmlinkage int old_mmap(struct mmap_arg_struct *arg) | ||
47 | { | ||
48 | struct mmap_arg_struct a; | ||
49 | int error = -EFAULT; | ||
50 | |||
51 | if (copy_from_user(&a, arg, sizeof(a))) | ||
52 | goto out; | ||
53 | |||
54 | error = -EINVAL; | ||
55 | if (a.offset & ~PAGE_MASK) | ||
56 | goto out; | ||
57 | |||
58 | error = sys_mmap_pgoff(a.addr, a.len, a.prot, a.flags, a.fd, | ||
59 | a.offset >> PAGE_SHIFT); | ||
60 | out: | ||
61 | return error; | ||
62 | } | ||
63 | |||
64 | struct sel_arg_struct { | ||
65 | unsigned long n; | ||
66 | fd_set *inp, *outp, *exp; | ||
67 | struct timeval *tvp; | ||
68 | }; | ||
69 | |||
70 | asmlinkage int old_select(struct sel_arg_struct *arg) | ||
71 | { | ||
72 | struct sel_arg_struct a; | ||
73 | |||
74 | if (copy_from_user(&a, arg, sizeof(a))) | ||
75 | return -EFAULT; | ||
76 | /* sys_select() does the appropriate kernel locking */ | ||
77 | return sys_select(a.n, a.inp, a.outp, a.exp, a.tvp); | ||
78 | } | ||
79 | |||
80 | /* | ||
81 | * sys_ipc() is the de-multiplexer for the SysV IPC calls.. | ||
82 | * | ||
83 | * This is really horribly ugly. | ||
84 | */ | ||
85 | asmlinkage int sys_ipc (uint call, int first, int second, | ||
86 | int third, void *ptr, long fifth) | ||
87 | { | ||
88 | int version, ret; | ||
89 | |||
90 | version = call >> 16; /* hack for backward compatibility */ | ||
91 | call &= 0xffff; | ||
92 | |||
93 | if (call <= SEMCTL) | ||
94 | switch (call) { | ||
95 | case SEMOP: | ||
96 | return sys_semop (first, (struct sembuf *)ptr, second); | ||
97 | case SEMGET: | ||
98 | return sys_semget (first, second, third); | ||
99 | case SEMCTL: { | ||
100 | union semun fourth; | ||
101 | if (!ptr) | ||
102 | return -EINVAL; | ||
103 | if (get_user(fourth.__pad, (void **) ptr)) | ||
104 | return -EFAULT; | ||
105 | return sys_semctl (first, second, third, fourth); | ||
106 | } | ||
107 | default: | ||
108 | return -EINVAL; | ||
109 | } | ||
110 | if (call <= MSGCTL) | ||
111 | switch (call) { | ||
112 | case MSGSND: | ||
113 | return sys_msgsnd (first, (struct msgbuf *) ptr, | ||
114 | second, third); | ||
115 | case MSGRCV: | ||
116 | switch (version) { | ||
117 | case 0: { | ||
118 | struct ipc_kludge tmp; | ||
119 | if (!ptr) | ||
120 | return -EINVAL; | ||
121 | if (copy_from_user (&tmp, | ||
122 | (struct ipc_kludge *)ptr, | ||
123 | sizeof (tmp))) | ||
124 | return -EFAULT; | ||
125 | return sys_msgrcv (first, tmp.msgp, second, | ||
126 | tmp.msgtyp, third); | ||
127 | } | ||
128 | default: | ||
129 | return sys_msgrcv (first, | ||
130 | (struct msgbuf *) ptr, | ||
131 | second, fifth, third); | ||
132 | } | ||
133 | case MSGGET: | ||
134 | return sys_msgget ((key_t) first, second); | ||
135 | case MSGCTL: | ||
136 | return sys_msgctl (first, second, | ||
137 | (struct msqid_ds *) ptr); | ||
138 | default: | ||
139 | return -EINVAL; | ||
140 | } | ||
141 | if (call <= SHMCTL) | ||
142 | switch (call) { | ||
143 | case SHMAT: | ||
144 | switch (version) { | ||
145 | default: { | ||
146 | ulong raddr; | ||
147 | ret = do_shmat (first, ptr, second, &raddr); | ||
148 | if (ret) | ||
149 | return ret; | ||
150 | return put_user (raddr, (ulong __user *) third); | ||
151 | } | ||
152 | } | ||
153 | case SHMDT: | ||
154 | return sys_shmdt (ptr); | ||
155 | case SHMGET: | ||
156 | return sys_shmget (first, second, third); | ||
157 | case SHMCTL: | ||
158 | return sys_shmctl (first, second, ptr); | ||
159 | default: | ||
160 | return -ENOSYS; | ||
161 | } | ||
162 | |||
163 | return -EINVAL; | ||
164 | } | ||
165 | |||
166 | /* sys_cacheflush -- flush (part of) the processor cache. */ | 30 | /* sys_cacheflush -- flush (part of) the processor cache. */ |
167 | asmlinkage int | 31 | asmlinkage int |
168 | sys_cacheflush (unsigned long addr, int scope, int cache, unsigned long len) | 32 | sys_cacheflush (unsigned long addr, int scope, int cache, unsigned long len) |
diff --git a/arch/m68knommu/kernel/syscalltable.S b/arch/m68knommu/kernel/syscalltable.S index 56dd01ded148..b30b3eb197a5 100644 --- a/arch/m68knommu/kernel/syscalltable.S +++ b/arch/m68knommu/kernel/syscalltable.S | |||
@@ -100,7 +100,7 @@ ENTRY(sys_call_table) | |||
100 | .long sys_settimeofday | 100 | .long sys_settimeofday |
101 | .long sys_getgroups16 /* 80 */ | 101 | .long sys_getgroups16 /* 80 */ |
102 | .long sys_setgroups16 | 102 | .long sys_setgroups16 |
103 | .long old_select | 103 | .long sys_old_select |
104 | .long sys_symlink | 104 | .long sys_symlink |
105 | .long sys_lstat | 105 | .long sys_lstat |
106 | .long sys_readlink /* 85 */ | 106 | .long sys_readlink /* 85 */ |
@@ -108,7 +108,7 @@ ENTRY(sys_call_table) | |||
108 | .long sys_ni_syscall /* sys_swapon */ | 108 | .long sys_ni_syscall /* sys_swapon */ |
109 | .long sys_reboot | 109 | .long sys_reboot |
110 | .long sys_old_readdir | 110 | .long sys_old_readdir |
111 | .long old_mmap /* 90 */ | 111 | .long sys_old_mmap /* 90 */ |
112 | .long sys_munmap | 112 | .long sys_munmap |
113 | .long sys_truncate | 113 | .long sys_truncate |
114 | .long sys_ftruncate | 114 | .long sys_ftruncate |
diff --git a/arch/microblaze/kernel/ptrace.c b/arch/microblaze/kernel/ptrace.c index 4b3ac32754de..6d6349a145f9 100644 --- a/arch/microblaze/kernel/ptrace.c +++ b/arch/microblaze/kernel/ptrace.c | |||
@@ -78,26 +78,6 @@ long arch_ptrace(struct task_struct *child, long request, long addr, long data) | |||
78 | unsigned long copied; | 78 | unsigned long copied; |
79 | 79 | ||
80 | switch (request) { | 80 | switch (request) { |
81 | case PTRACE_PEEKTEXT: /* read word at location addr. */ | ||
82 | case PTRACE_PEEKDATA: | ||
83 | pr_debug("PEEKTEXT/PEEKDATA at %08lX\n", addr); | ||
84 | copied = access_process_vm(child, addr, &val, sizeof(val), 0); | ||
85 | rval = -EIO; | ||
86 | if (copied != sizeof(val)) | ||
87 | break; | ||
88 | rval = put_user(val, (unsigned long *)data); | ||
89 | break; | ||
90 | |||
91 | case PTRACE_POKETEXT: /* write the word at location addr. */ | ||
92 | case PTRACE_POKEDATA: | ||
93 | pr_debug("POKETEXT/POKEDATA to %08lX\n", addr); | ||
94 | rval = 0; | ||
95 | if (access_process_vm(child, addr, &data, sizeof(data), 1) | ||
96 | == sizeof(data)) | ||
97 | break; | ||
98 | rval = -EIO; | ||
99 | break; | ||
100 | |||
101 | /* Read/write the word at location ADDR in the registers. */ | 81 | /* Read/write the word at location ADDR in the registers. */ |
102 | case PTRACE_PEEKUSR: | 82 | case PTRACE_PEEKUSR: |
103 | case PTRACE_POKEUSR: | 83 | case PTRACE_POKEUSR: |
@@ -130,50 +110,8 @@ long arch_ptrace(struct task_struct *child, long request, long addr, long data) | |||
130 | if (rval == 0 && request == PTRACE_PEEKUSR) | 110 | if (rval == 0 && request == PTRACE_PEEKUSR) |
131 | rval = put_user(val, (unsigned long *)data); | 111 | rval = put_user(val, (unsigned long *)data); |
132 | break; | 112 | break; |
133 | /* Continue and stop at next (return from) syscall */ | ||
134 | case PTRACE_SYSCALL: | ||
135 | pr_debug("PTRACE_SYSCALL\n"); | ||
136 | case PTRACE_SINGLESTEP: | ||
137 | pr_debug("PTRACE_SINGLESTEP\n"); | ||
138 | /* Restart after a signal. */ | ||
139 | case PTRACE_CONT: | ||
140 | pr_debug("PTRACE_CONT\n"); | ||
141 | rval = -EIO; | ||
142 | if (!valid_signal(data)) | ||
143 | break; | ||
144 | |||
145 | if (request == PTRACE_SYSCALL) | ||
146 | set_tsk_thread_flag(child, TIF_SYSCALL_TRACE); | ||
147 | else | ||
148 | clear_tsk_thread_flag(child, TIF_SYSCALL_TRACE); | ||
149 | |||
150 | child->exit_code = data; | ||
151 | pr_debug("wakeup_process\n"); | ||
152 | wake_up_process(child); | ||
153 | rval = 0; | ||
154 | break; | ||
155 | |||
156 | /* | ||
157 | * make the child exit. Best I can do is send it a sigkill. | ||
158 | * perhaps it should be put in the status that it wants to | ||
159 | * exit. | ||
160 | */ | ||
161 | case PTRACE_KILL: | ||
162 | pr_debug("PTRACE_KILL\n"); | ||
163 | rval = 0; | ||
164 | if (child->exit_state == EXIT_ZOMBIE) /* already dead */ | ||
165 | break; | ||
166 | child->exit_code = SIGKILL; | ||
167 | wake_up_process(child); | ||
168 | break; | ||
169 | |||
170 | case PTRACE_DETACH: /* detach a process that was attached. */ | ||
171 | pr_debug("PTRACE_DETACH\n"); | ||
172 | rval = ptrace_detach(child, data); | ||
173 | break; | ||
174 | default: | 113 | default: |
175 | /* rval = ptrace_request(child, request, addr, data); noMMU */ | 114 | rval = ptrace_request(child, request, addr, data); |
176 | rval = -EIO; | ||
177 | } | 115 | } |
178 | return rval; | 116 | return rval; |
179 | } | 117 | } |
diff --git a/arch/mips/Kconfig b/arch/mips/Kconfig index 591ca0cd4c24..29e86923d1bf 100644 --- a/arch/mips/Kconfig +++ b/arch/mips/Kconfig | |||
@@ -812,9 +812,9 @@ config DMA_COHERENT | |||
812 | 812 | ||
813 | config DMA_NONCOHERENT | 813 | config DMA_NONCOHERENT |
814 | bool | 814 | bool |
815 | select DMA_NEED_PCI_MAP_STATE | 815 | select NEED_DMA_MAP_STATE |
816 | 816 | ||
817 | config DMA_NEED_PCI_MAP_STATE | 817 | config NEED_DMA_MAP_STATE |
818 | bool | 818 | bool |
819 | 819 | ||
820 | config SYS_HAS_EARLY_PRINTK | 820 | config SYS_HAS_EARLY_PRINTK |
diff --git a/arch/mips/include/asm/compat.h b/arch/mips/include/asm/compat.h index f58aed354bfd..613f6912dfc1 100644 --- a/arch/mips/include/asm/compat.h +++ b/arch/mips/include/asm/compat.h | |||
@@ -8,7 +8,8 @@ | |||
8 | #include <asm/page.h> | 8 | #include <asm/page.h> |
9 | #include <asm/ptrace.h> | 9 | #include <asm/ptrace.h> |
10 | 10 | ||
11 | #define COMPAT_USER_HZ 100 | 11 | #define COMPAT_USER_HZ 100 |
12 | #define COMPAT_UTS_MACHINE "mips\0\0\0" | ||
12 | 13 | ||
13 | typedef u32 compat_size_t; | 14 | typedef u32 compat_size_t; |
14 | typedef s32 compat_ssize_t; | 15 | typedef s32 compat_ssize_t; |
diff --git a/arch/mips/include/asm/pci.h b/arch/mips/include/asm/pci.h index 5ebf82572ec0..3beea1479b43 100644 --- a/arch/mips/include/asm/pci.h +++ b/arch/mips/include/asm/pci.h | |||
@@ -102,28 +102,6 @@ struct pci_dev; | |||
102 | */ | 102 | */ |
103 | extern unsigned int PCI_DMA_BUS_IS_PHYS; | 103 | extern unsigned int PCI_DMA_BUS_IS_PHYS; |
104 | 104 | ||
105 | #ifdef CONFIG_DMA_NEED_PCI_MAP_STATE | ||
106 | |||
107 | /* pci_unmap_{single,page} is not a nop, thus... */ | ||
108 | #define DECLARE_PCI_UNMAP_ADDR(ADDR_NAME) dma_addr_t ADDR_NAME; | ||
109 | #define DECLARE_PCI_UNMAP_LEN(LEN_NAME) __u32 LEN_NAME; | ||
110 | #define pci_unmap_addr(PTR, ADDR_NAME) ((PTR)->ADDR_NAME) | ||
111 | #define pci_unmap_addr_set(PTR, ADDR_NAME, VAL) (((PTR)->ADDR_NAME) = (VAL)) | ||
112 | #define pci_unmap_len(PTR, LEN_NAME) ((PTR)->LEN_NAME) | ||
113 | #define pci_unmap_len_set(PTR, LEN_NAME, VAL) (((PTR)->LEN_NAME) = (VAL)) | ||
114 | |||
115 | #else /* CONFIG_DMA_NEED_PCI_MAP_STATE */ | ||
116 | |||
117 | /* pci_unmap_{page,single} is a nop so... */ | ||
118 | #define DECLARE_PCI_UNMAP_ADDR(ADDR_NAME) | ||
119 | #define DECLARE_PCI_UNMAP_LEN(LEN_NAME) | ||
120 | #define pci_unmap_addr(PTR, ADDR_NAME) (0) | ||
121 | #define pci_unmap_addr_set(PTR, ADDR_NAME, VAL) do { } while (0) | ||
122 | #define pci_unmap_len(PTR, LEN_NAME) (0) | ||
123 | #define pci_unmap_len_set(PTR, LEN_NAME, VAL) do { } while (0) | ||
124 | |||
125 | #endif /* CONFIG_DMA_NEED_PCI_MAP_STATE */ | ||
126 | |||
127 | #ifdef CONFIG_PCI | 105 | #ifdef CONFIG_PCI |
128 | static inline void pci_dma_burst_advice(struct pci_dev *pdev, | 106 | static inline void pci_dma_burst_advice(struct pci_dev *pdev, |
129 | enum pci_dma_burst_strategy *strat, | 107 | enum pci_dma_burst_strategy *strat, |
diff --git a/arch/mips/include/asm/unistd.h b/arch/mips/include/asm/unistd.h index 65c679ecbe6b..1b5a6648eb86 100644 --- a/arch/mips/include/asm/unistd.h +++ b/arch/mips/include/asm/unistd.h | |||
@@ -1004,6 +1004,7 @@ | |||
1004 | #define __ARCH_WANT_OLD_READDIR | 1004 | #define __ARCH_WANT_OLD_READDIR |
1005 | #define __ARCH_WANT_SYS_ALARM | 1005 | #define __ARCH_WANT_SYS_ALARM |
1006 | #define __ARCH_WANT_SYS_GETHOSTNAME | 1006 | #define __ARCH_WANT_SYS_GETHOSTNAME |
1007 | #define __ARCH_WANT_SYS_IPC | ||
1007 | #define __ARCH_WANT_SYS_PAUSE | 1008 | #define __ARCH_WANT_SYS_PAUSE |
1008 | #define __ARCH_WANT_SYS_SGETMASK | 1009 | #define __ARCH_WANT_SYS_SGETMASK |
1009 | #define __ARCH_WANT_SYS_UTIME | 1010 | #define __ARCH_WANT_SYS_UTIME |
@@ -1013,6 +1014,7 @@ | |||
1013 | #define __ARCH_WANT_SYS_LLSEEK | 1014 | #define __ARCH_WANT_SYS_LLSEEK |
1014 | #define __ARCH_WANT_SYS_NICE | 1015 | #define __ARCH_WANT_SYS_NICE |
1015 | #define __ARCH_WANT_SYS_OLD_GETRLIMIT | 1016 | #define __ARCH_WANT_SYS_OLD_GETRLIMIT |
1017 | #define __ARCH_WANT_SYS_OLD_UNAME | ||
1016 | #define __ARCH_WANT_SYS_OLDUMOUNT | 1018 | #define __ARCH_WANT_SYS_OLDUMOUNT |
1017 | #define __ARCH_WANT_SYS_SIGPENDING | 1019 | #define __ARCH_WANT_SYS_SIGPENDING |
1018 | #define __ARCH_WANT_SYS_SIGPROCMASK | 1020 | #define __ARCH_WANT_SYS_SIGPROCMASK |
diff --git a/arch/mips/kernel/linux32.c b/arch/mips/kernel/linux32.c index bde79ef602e6..a39d0597a375 100644 --- a/arch/mips/kernel/linux32.c +++ b/arch/mips/kernel/linux32.c | |||
@@ -249,22 +249,6 @@ SYSCALL_DEFINE5(n32_msgrcv, int, msqid, u32, msgp, size_t, msgsz, | |||
249 | } | 249 | } |
250 | #endif | 250 | #endif |
251 | 251 | ||
252 | SYSCALL_DEFINE1(32_newuname, struct new_utsname __user *, name) | ||
253 | { | ||
254 | int ret = 0; | ||
255 | |||
256 | down_read(&uts_sem); | ||
257 | if (copy_to_user(name, utsname(), sizeof *name)) | ||
258 | ret = -EFAULT; | ||
259 | up_read(&uts_sem); | ||
260 | |||
261 | if (current->personality == PER_LINUX32 && !ret) | ||
262 | if (copy_to_user(name->machine, "mips\0\0\0", 8)) | ||
263 | ret = -EFAULT; | ||
264 | |||
265 | return ret; | ||
266 | } | ||
267 | |||
268 | SYSCALL_DEFINE1(32_personality, unsigned long, personality) | 252 | SYSCALL_DEFINE1(32_personality, unsigned long, personality) |
269 | { | 253 | { |
270 | int ret; | 254 | int ret; |
diff --git a/arch/mips/kernel/ptrace.c b/arch/mips/kernel/ptrace.c index 054861ccb4dd..c51b95ff8644 100644 --- a/arch/mips/kernel/ptrace.c +++ b/arch/mips/kernel/ptrace.c | |||
@@ -493,36 +493,6 @@ long arch_ptrace(struct task_struct *child, long request, long addr, long data) | |||
493 | ret = ptrace_setfpregs(child, (__u32 __user *) data); | 493 | ret = ptrace_setfpregs(child, (__u32 __user *) data); |
494 | break; | 494 | break; |
495 | 495 | ||
496 | case PTRACE_SYSCALL: /* continue and stop at next (return from) syscall */ | ||
497 | case PTRACE_CONT: { /* restart after signal. */ | ||
498 | ret = -EIO; | ||
499 | if (!valid_signal(data)) | ||
500 | break; | ||
501 | if (request == PTRACE_SYSCALL) { | ||
502 | set_tsk_thread_flag(child, TIF_SYSCALL_TRACE); | ||
503 | } | ||
504 | else { | ||
505 | clear_tsk_thread_flag(child, TIF_SYSCALL_TRACE); | ||
506 | } | ||
507 | child->exit_code = data; | ||
508 | wake_up_process(child); | ||
509 | ret = 0; | ||
510 | break; | ||
511 | } | ||
512 | |||
513 | /* | ||
514 | * make the child exit. Best I can do is send it a sigkill. | ||
515 | * perhaps it should be put in the status that it wants to | ||
516 | * exit. | ||
517 | */ | ||
518 | case PTRACE_KILL: | ||
519 | ret = 0; | ||
520 | if (child->exit_state == EXIT_ZOMBIE) /* already dead */ | ||
521 | break; | ||
522 | child->exit_code = SIGKILL; | ||
523 | wake_up_process(child); | ||
524 | break; | ||
525 | |||
526 | case PTRACE_GET_THREAD_AREA: | 496 | case PTRACE_GET_THREAD_AREA: |
527 | ret = put_user(task_thread_info(child)->tp_value, | 497 | ret = put_user(task_thread_info(child)->tp_value, |
528 | (unsigned long __user *) data); | 498 | (unsigned long __user *) data); |
diff --git a/arch/mips/kernel/scall64-n32.S b/arch/mips/kernel/scall64-n32.S index 66b5a48676dd..44337ba03717 100644 --- a/arch/mips/kernel/scall64-n32.S +++ b/arch/mips/kernel/scall64-n32.S | |||
@@ -181,7 +181,7 @@ EXPORT(sysn32_call_table) | |||
181 | PTR sys_exit | 181 | PTR sys_exit |
182 | PTR compat_sys_wait4 | 182 | PTR compat_sys_wait4 |
183 | PTR sys_kill /* 6060 */ | 183 | PTR sys_kill /* 6060 */ |
184 | PTR sys_32_newuname | 184 | PTR sys_newuname |
185 | PTR sys_semget | 185 | PTR sys_semget |
186 | PTR sys_semop | 186 | PTR sys_semop |
187 | PTR sys_n32_semctl | 187 | PTR sys_n32_semctl |
diff --git a/arch/mips/kernel/scall64-o32.S b/arch/mips/kernel/scall64-o32.S index 515f9eab2b28..813689ef2384 100644 --- a/arch/mips/kernel/scall64-o32.S +++ b/arch/mips/kernel/scall64-o32.S | |||
@@ -325,7 +325,7 @@ sys_call_table: | |||
325 | PTR sys32_sigreturn | 325 | PTR sys32_sigreturn |
326 | PTR sys32_clone /* 4120 */ | 326 | PTR sys32_clone /* 4120 */ |
327 | PTR sys_setdomainname | 327 | PTR sys_setdomainname |
328 | PTR sys_32_newuname | 328 | PTR sys_newuname |
329 | PTR sys_ni_syscall /* sys_modify_ldt */ | 329 | PTR sys_ni_syscall /* sys_modify_ldt */ |
330 | PTR compat_sys_adjtimex | 330 | PTR compat_sys_adjtimex |
331 | PTR sys_mprotect /* 4125 */ | 331 | PTR sys_mprotect /* 4125 */ |
diff --git a/arch/mips/kernel/syscall.c b/arch/mips/kernel/syscall.c index 3f7f466190b4..e96b1c30c7aa 100644 --- a/arch/mips/kernel/syscall.c +++ b/arch/mips/kernel/syscall.c | |||
@@ -215,48 +215,6 @@ out: | |||
215 | return error; | 215 | return error; |
216 | } | 216 | } |
217 | 217 | ||
218 | /* | ||
219 | * Compacrapability ... | ||
220 | */ | ||
221 | SYSCALL_DEFINE1(uname, struct old_utsname __user *, name) | ||
222 | { | ||
223 | if (name && !copy_to_user(name, utsname(), sizeof (*name))) | ||
224 | return 0; | ||
225 | return -EFAULT; | ||
226 | } | ||
227 | |||
228 | /* | ||
229 | * Compacrapability ... | ||
230 | */ | ||
231 | SYSCALL_DEFINE1(olduname, struct oldold_utsname __user *, name) | ||
232 | { | ||
233 | int error; | ||
234 | |||
235 | if (!name) | ||
236 | return -EFAULT; | ||
237 | if (!access_ok(VERIFY_WRITE, name, sizeof(struct oldold_utsname))) | ||
238 | return -EFAULT; | ||
239 | |||
240 | error = __copy_to_user(&name->sysname, &utsname()->sysname, | ||
241 | __OLD_UTS_LEN); | ||
242 | error -= __put_user(0, name->sysname + __OLD_UTS_LEN); | ||
243 | error -= __copy_to_user(&name->nodename, &utsname()->nodename, | ||
244 | __OLD_UTS_LEN); | ||
245 | error -= __put_user(0, name->nodename + __OLD_UTS_LEN); | ||
246 | error -= __copy_to_user(&name->release, &utsname()->release, | ||
247 | __OLD_UTS_LEN); | ||
248 | error -= __put_user(0, name->release + __OLD_UTS_LEN); | ||
249 | error -= __copy_to_user(&name->version, &utsname()->version, | ||
250 | __OLD_UTS_LEN); | ||
251 | error -= __put_user(0, name->version + __OLD_UTS_LEN); | ||
252 | error -= __copy_to_user(&name->machine, &utsname()->machine, | ||
253 | __OLD_UTS_LEN); | ||
254 | error = __put_user(0, name->machine + __OLD_UTS_LEN); | ||
255 | error = error ? -EFAULT : 0; | ||
256 | |||
257 | return error; | ||
258 | } | ||
259 | |||
260 | SYSCALL_DEFINE1(set_thread_area, unsigned long, addr) | 218 | SYSCALL_DEFINE1(set_thread_area, unsigned long, addr) |
261 | { | 219 | { |
262 | struct thread_info *ti = task_thread_info(current); | 220 | struct thread_info *ti = task_thread_info(current); |
@@ -407,94 +365,6 @@ _sys_sysmips(nabi_no_regargs struct pt_regs regs) | |||
407 | } | 365 | } |
408 | 366 | ||
409 | /* | 367 | /* |
410 | * sys_ipc() is the de-multiplexer for the SysV IPC calls.. | ||
411 | * | ||
412 | * This is really horribly ugly. | ||
413 | */ | ||
414 | SYSCALL_DEFINE6(ipc, unsigned int, call, int, first, int, second, | ||
415 | unsigned long, third, void __user *, ptr, long, fifth) | ||
416 | { | ||
417 | int version, ret; | ||
418 | |||
419 | version = call >> 16; /* hack for backward compatibility */ | ||
420 | call &= 0xffff; | ||
421 | |||
422 | switch (call) { | ||
423 | case SEMOP: | ||
424 | return sys_semtimedop(first, (struct sembuf __user *)ptr, | ||
425 | second, NULL); | ||
426 | case SEMTIMEDOP: | ||
427 | return sys_semtimedop(first, (struct sembuf __user *)ptr, | ||
428 | second, | ||
429 | (const struct timespec __user *)fifth); | ||
430 | case SEMGET: | ||
431 | return sys_semget(first, second, third); | ||
432 | case SEMCTL: { | ||
433 | union semun fourth; | ||
434 | if (!ptr) | ||
435 | return -EINVAL; | ||
436 | if (get_user(fourth.__pad, (void __user *__user *) ptr)) | ||
437 | return -EFAULT; | ||
438 | return sys_semctl(first, second, third, fourth); | ||
439 | } | ||
440 | |||
441 | case MSGSND: | ||
442 | return sys_msgsnd(first, (struct msgbuf __user *) ptr, | ||
443 | second, third); | ||
444 | case MSGRCV: | ||
445 | switch (version) { | ||
446 | case 0: { | ||
447 | struct ipc_kludge tmp; | ||
448 | if (!ptr) | ||
449 | return -EINVAL; | ||
450 | |||
451 | if (copy_from_user(&tmp, | ||
452 | (struct ipc_kludge __user *) ptr, | ||
453 | sizeof(tmp))) | ||
454 | return -EFAULT; | ||
455 | return sys_msgrcv(first, tmp.msgp, second, | ||
456 | tmp.msgtyp, third); | ||
457 | } | ||
458 | default: | ||
459 | return sys_msgrcv(first, | ||
460 | (struct msgbuf __user *) ptr, | ||
461 | second, fifth, third); | ||
462 | } | ||
463 | case MSGGET: | ||
464 | return sys_msgget((key_t) first, second); | ||
465 | case MSGCTL: | ||
466 | return sys_msgctl(first, second, | ||
467 | (struct msqid_ds __user *) ptr); | ||
468 | |||
469 | case SHMAT: | ||
470 | switch (version) { | ||
471 | default: { | ||
472 | unsigned long raddr; | ||
473 | ret = do_shmat(first, (char __user *) ptr, second, | ||
474 | &raddr); | ||
475 | if (ret) | ||
476 | return ret; | ||
477 | return put_user(raddr, (unsigned long __user *) third); | ||
478 | } | ||
479 | case 1: /* iBCS2 emulator entry point */ | ||
480 | if (!segment_eq(get_fs(), get_ds())) | ||
481 | return -EINVAL; | ||
482 | return do_shmat(first, (char __user *) ptr, second, | ||
483 | (unsigned long *) third); | ||
484 | } | ||
485 | case SHMDT: | ||
486 | return sys_shmdt((char __user *)ptr); | ||
487 | case SHMGET: | ||
488 | return sys_shmget(first, second, third); | ||
489 | case SHMCTL: | ||
490 | return sys_shmctl(first, second, | ||
491 | (struct shmid_ds __user *) ptr); | ||
492 | default: | ||
493 | return -ENOSYS; | ||
494 | } | ||
495 | } | ||
496 | |||
497 | /* | ||
498 | * No implemented yet ... | 368 | * No implemented yet ... |
499 | */ | 369 | */ |
500 | SYSCALL_DEFINE3(cachectl, char *, addr, int, nbytes, int, op) | 370 | SYSCALL_DEFINE3(cachectl, char *, addr, int, nbytes, int, op) |
diff --git a/arch/mips/txx9/generic/7segled.c b/arch/mips/txx9/generic/7segled.c index 727ab21b6618..7f8416f86222 100644 --- a/arch/mips/txx9/generic/7segled.c +++ b/arch/mips/txx9/generic/7segled.c | |||
@@ -58,13 +58,16 @@ static ssize_t raw_store(struct sys_device *dev, | |||
58 | static SYSDEV_ATTR(ascii, 0200, NULL, ascii_store); | 58 | static SYSDEV_ATTR(ascii, 0200, NULL, ascii_store); |
59 | static SYSDEV_ATTR(raw, 0200, NULL, raw_store); | 59 | static SYSDEV_ATTR(raw, 0200, NULL, raw_store); |
60 | 60 | ||
61 | static ssize_t map_seg7_show(struct sysdev_class *class, char *buf) | 61 | static ssize_t map_seg7_show(struct sysdev_class *class, |
62 | struct sysdev_class_attribute *attr, | ||
63 | char *buf) | ||
62 | { | 64 | { |
63 | memcpy(buf, &txx9_seg7map, sizeof(txx9_seg7map)); | 65 | memcpy(buf, &txx9_seg7map, sizeof(txx9_seg7map)); |
64 | return sizeof(txx9_seg7map); | 66 | return sizeof(txx9_seg7map); |
65 | } | 67 | } |
66 | 68 | ||
67 | static ssize_t map_seg7_store(struct sysdev_class *class, | 69 | static ssize_t map_seg7_store(struct sysdev_class *class, |
70 | struct sysdev_class_attribute *attr, | ||
68 | const char *buf, size_t size) | 71 | const char *buf, size_t size) |
69 | { | 72 | { |
70 | if (size != sizeof(txx9_seg7map)) | 73 | if (size != sizeof(txx9_seg7map)) |
diff --git a/arch/mn10300/include/asm/dma-mapping.h b/arch/mn10300/include/asm/dma-mapping.h index ccae8f6c6326..4ed1522b38d2 100644 --- a/arch/mn10300/include/asm/dma-mapping.h +++ b/arch/mn10300/include/asm/dma-mapping.h | |||
@@ -17,6 +17,11 @@ | |||
17 | #include <asm/cache.h> | 17 | #include <asm/cache.h> |
18 | #include <asm/io.h> | 18 | #include <asm/io.h> |
19 | 19 | ||
20 | /* | ||
21 | * See Documentation/DMA-API.txt for the description of how the | ||
22 | * following DMA API should work. | ||
23 | */ | ||
24 | |||
20 | extern void *dma_alloc_coherent(struct device *dev, size_t size, | 25 | extern void *dma_alloc_coherent(struct device *dev, size_t size, |
21 | dma_addr_t *dma_handle, int flag); | 26 | dma_addr_t *dma_handle, int flag); |
22 | 27 | ||
@@ -26,13 +31,6 @@ extern void dma_free_coherent(struct device *dev, size_t size, | |||
26 | #define dma_alloc_noncoherent(d, s, h, f) dma_alloc_coherent((d), (s), (h), (f)) | 31 | #define dma_alloc_noncoherent(d, s, h, f) dma_alloc_coherent((d), (s), (h), (f)) |
27 | #define dma_free_noncoherent(d, s, v, h) dma_free_coherent((d), (s), (v), (h)) | 32 | #define dma_free_noncoherent(d, s, v, h) dma_free_coherent((d), (s), (v), (h)) |
28 | 33 | ||
29 | /* | ||
30 | * Map a single buffer of the indicated size for DMA in streaming mode. The | ||
31 | * 32-bit bus address to use is returned. | ||
32 | * | ||
33 | * Once the device is given the dma address, the device owns this memory until | ||
34 | * either pci_unmap_single or pci_dma_sync_single is performed. | ||
35 | */ | ||
36 | static inline | 34 | static inline |
37 | dma_addr_t dma_map_single(struct device *dev, void *ptr, size_t size, | 35 | dma_addr_t dma_map_single(struct device *dev, void *ptr, size_t size, |
38 | enum dma_data_direction direction) | 36 | enum dma_data_direction direction) |
@@ -42,14 +40,6 @@ dma_addr_t dma_map_single(struct device *dev, void *ptr, size_t size, | |||
42 | return virt_to_bus(ptr); | 40 | return virt_to_bus(ptr); |
43 | } | 41 | } |
44 | 42 | ||
45 | /* | ||
46 | * Unmap a single streaming mode DMA translation. The dma_addr and size must | ||
47 | * match what was provided for in a previous pci_map_single call. All other | ||
48 | * usages are undefined. | ||
49 | * | ||
50 | * After this call, reads by the cpu to the buffer are guarenteed to see | ||
51 | * whatever the device wrote there. | ||
52 | */ | ||
53 | static inline | 43 | static inline |
54 | void dma_unmap_single(struct device *dev, dma_addr_t dma_addr, size_t size, | 44 | void dma_unmap_single(struct device *dev, dma_addr_t dma_addr, size_t size, |
55 | enum dma_data_direction direction) | 45 | enum dma_data_direction direction) |
@@ -57,20 +47,6 @@ void dma_unmap_single(struct device *dev, dma_addr_t dma_addr, size_t size, | |||
57 | BUG_ON(direction == DMA_NONE); | 47 | BUG_ON(direction == DMA_NONE); |
58 | } | 48 | } |
59 | 49 | ||
60 | /* | ||
61 | * Map a set of buffers described by scatterlist in streaming mode for DMA. | ||
62 | * This is the scather-gather version of the above pci_map_single interface. | ||
63 | * Here the scatter gather list elements are each tagged with the appropriate | ||
64 | * dma address and length. They are obtained via sg_dma_{address,length}(SG). | ||
65 | * | ||
66 | * NOTE: An implementation may be able to use a smaller number of DMA | ||
67 | * address/length pairs than there are SG table elements. (for example | ||
68 | * via virtual mapping capabilities) The routine returns the number of | ||
69 | * addr/length pairs actually used, at most nents. | ||
70 | * | ||
71 | * Device ownership issues as mentioned above for pci_map_single are the same | ||
72 | * here. | ||
73 | */ | ||
74 | static inline | 50 | static inline |
75 | int dma_map_sg(struct device *dev, struct scatterlist *sglist, int nents, | 51 | int dma_map_sg(struct device *dev, struct scatterlist *sglist, int nents, |
76 | enum dma_data_direction direction) | 52 | enum dma_data_direction direction) |
@@ -91,11 +67,6 @@ int dma_map_sg(struct device *dev, struct scatterlist *sglist, int nents, | |||
91 | return nents; | 67 | return nents; |
92 | } | 68 | } |
93 | 69 | ||
94 | /* | ||
95 | * Unmap a set of streaming mode DMA translations. | ||
96 | * Again, cpu read rules concerning calls here are the same as for | ||
97 | * pci_unmap_single() above. | ||
98 | */ | ||
99 | static inline | 70 | static inline |
100 | void dma_unmap_sg(struct device *dev, struct scatterlist *sg, int nhwentries, | 71 | void dma_unmap_sg(struct device *dev, struct scatterlist *sg, int nhwentries, |
101 | enum dma_data_direction direction) | 72 | enum dma_data_direction direction) |
@@ -103,10 +74,6 @@ void dma_unmap_sg(struct device *dev, struct scatterlist *sg, int nhwentries, | |||
103 | BUG_ON(!valid_dma_direction(direction)); | 74 | BUG_ON(!valid_dma_direction(direction)); |
104 | } | 75 | } |
105 | 76 | ||
106 | /* | ||
107 | * pci_{map,unmap}_single_page maps a kernel page to a dma_addr_t. identical | ||
108 | * to pci_map_single, but takes a struct page instead of a virtual address | ||
109 | */ | ||
110 | static inline | 77 | static inline |
111 | dma_addr_t dma_map_page(struct device *dev, struct page *page, | 78 | dma_addr_t dma_map_page(struct device *dev, struct page *page, |
112 | unsigned long offset, size_t size, | 79 | unsigned long offset, size_t size, |
@@ -123,15 +90,6 @@ void dma_unmap_page(struct device *dev, dma_addr_t dma_address, size_t size, | |||
123 | BUG_ON(direction == DMA_NONE); | 90 | BUG_ON(direction == DMA_NONE); |
124 | } | 91 | } |
125 | 92 | ||
126 | /* | ||
127 | * Make physical memory consistent for a single streaming mode DMA translation | ||
128 | * after a transfer. | ||
129 | * | ||
130 | * If you perform a pci_map_single() but wish to interrogate the buffer using | ||
131 | * the cpu, yet do not wish to teardown the PCI dma mapping, you must call this | ||
132 | * function before doing so. At the next point you give the PCI dma address | ||
133 | * back to the card, the device again owns the buffer. | ||
134 | */ | ||
135 | static inline | 93 | static inline |
136 | void dma_sync_single_for_cpu(struct device *dev, dma_addr_t dma_handle, | 94 | void dma_sync_single_for_cpu(struct device *dev, dma_addr_t dma_handle, |
137 | size_t size, enum dma_data_direction direction) | 95 | size_t size, enum dma_data_direction direction) |
@@ -161,13 +119,6 @@ dma_sync_single_range_for_device(struct device *dev, dma_addr_t dma_handle, | |||
161 | } | 119 | } |
162 | 120 | ||
163 | 121 | ||
164 | /* | ||
165 | * Make physical memory consistent for a set of streaming mode DMA translations | ||
166 | * after a transfer. | ||
167 | * | ||
168 | * The same as pci_dma_sync_single but for a scatter-gather list, same rules | ||
169 | * and usage. | ||
170 | */ | ||
171 | static inline | 122 | static inline |
172 | void dma_sync_sg_for_cpu(struct device *dev, struct scatterlist *sg, | 123 | void dma_sync_sg_for_cpu(struct device *dev, struct scatterlist *sg, |
173 | int nelems, enum dma_data_direction direction) | 124 | int nelems, enum dma_data_direction direction) |
@@ -187,12 +138,6 @@ int dma_mapping_error(struct device *dev, dma_addr_t dma_addr) | |||
187 | return 0; | 138 | return 0; |
188 | } | 139 | } |
189 | 140 | ||
190 | /* | ||
191 | * Return whether the given PCI device DMA address mask can be supported | ||
192 | * properly. For example, if your device can only drive the low 24-bits during | ||
193 | * PCI bus mastering, then you would pass 0x00ffffff as the mask to this | ||
194 | * function. | ||
195 | */ | ||
196 | static inline | 141 | static inline |
197 | int dma_supported(struct device *dev, u64 mask) | 142 | int dma_supported(struct device *dev, u64 mask) |
198 | { | 143 | { |
diff --git a/arch/mn10300/include/asm/ptrace.h b/arch/mn10300/include/asm/ptrace.h index 1b0ba5e182b0..7c2e911052b6 100644 --- a/arch/mn10300/include/asm/ptrace.h +++ b/arch/mn10300/include/asm/ptrace.h | |||
@@ -99,8 +99,6 @@ struct task_struct; | |||
99 | extern void show_regs(struct pt_regs *); | 99 | extern void show_regs(struct pt_regs *); |
100 | 100 | ||
101 | #define arch_has_single_step() (1) | 101 | #define arch_has_single_step() (1) |
102 | extern void user_enable_single_step(struct task_struct *); | ||
103 | extern void user_disable_single_step(struct task_struct *); | ||
104 | 102 | ||
105 | #endif /* !__ASSEMBLY */ | 103 | #endif /* !__ASSEMBLY */ |
106 | 104 | ||
diff --git a/arch/mn10300/include/asm/unistd.h b/arch/mn10300/include/asm/unistd.h index c05acb95c2a9..9d056f515929 100644 --- a/arch/mn10300/include/asm/unistd.h +++ b/arch/mn10300/include/asm/unistd.h | |||
@@ -363,6 +363,7 @@ | |||
363 | #define __ARCH_WANT_STAT64 | 363 | #define __ARCH_WANT_STAT64 |
364 | #define __ARCH_WANT_SYS_ALARM | 364 | #define __ARCH_WANT_SYS_ALARM |
365 | #define __ARCH_WANT_SYS_GETHOSTNAME | 365 | #define __ARCH_WANT_SYS_GETHOSTNAME |
366 | #define __ARCH_WANT_SYS_IPC | ||
366 | #define __ARCH_WANT_SYS_PAUSE | 367 | #define __ARCH_WANT_SYS_PAUSE |
367 | #define __ARCH_WANT_SYS_SGETMASK | 368 | #define __ARCH_WANT_SYS_SGETMASK |
368 | #define __ARCH_WANT_SYS_SIGNAL | 369 | #define __ARCH_WANT_SYS_SIGNAL |
@@ -375,6 +376,7 @@ | |||
375 | #define __ARCH_WANT_SYS_LLSEEK | 376 | #define __ARCH_WANT_SYS_LLSEEK |
376 | #define __ARCH_WANT_SYS_NICE | 377 | #define __ARCH_WANT_SYS_NICE |
377 | #define __ARCH_WANT_SYS_OLD_GETRLIMIT | 378 | #define __ARCH_WANT_SYS_OLD_GETRLIMIT |
379 | #define __ARCH_WANT_SYS_OLD_SELECT | ||
378 | #define __ARCH_WANT_SYS_OLDUMOUNT | 380 | #define __ARCH_WANT_SYS_OLDUMOUNT |
379 | #define __ARCH_WANT_SYS_SIGPENDING | 381 | #define __ARCH_WANT_SYS_SIGPENDING |
380 | #define __ARCH_WANT_SYS_SIGPROCMASK | 382 | #define __ARCH_WANT_SYS_SIGPROCMASK |
diff --git a/arch/mn10300/kernel/entry.S b/arch/mn10300/kernel/entry.S index 88e3e1c3cc21..d9ed5a15c547 100644 --- a/arch/mn10300/kernel/entry.S +++ b/arch/mn10300/kernel/entry.S | |||
@@ -468,7 +468,7 @@ ENTRY(sys_call_table) | |||
468 | .long sys_settimeofday | 468 | .long sys_settimeofday |
469 | .long sys_getgroups16 /* 80 */ | 469 | .long sys_getgroups16 /* 80 */ |
470 | .long sys_setgroups16 | 470 | .long sys_setgroups16 |
471 | .long old_select | 471 | .long sys_old_select |
472 | .long sys_symlink | 472 | .long sys_symlink |
473 | .long sys_lstat | 473 | .long sys_lstat |
474 | .long sys_readlink /* 85 */ | 474 | .long sys_readlink /* 85 */ |
diff --git a/arch/mn10300/kernel/sys_mn10300.c b/arch/mn10300/kernel/sys_mn10300.c index 17cc6ce04e84..815f1355fad4 100644 --- a/arch/mn10300/kernel/sys_mn10300.c +++ b/arch/mn10300/kernel/sys_mn10300.c | |||
@@ -31,109 +31,3 @@ asmlinkage long old_mmap(unsigned long addr, unsigned long len, | |||
31 | return -EINVAL; | 31 | return -EINVAL; |
32 | return sys_mmap_pgoff(addr, len, prot, flags, fd, offset >> PAGE_SHIFT); | 32 | return sys_mmap_pgoff(addr, len, prot, flags, fd, offset >> PAGE_SHIFT); |
33 | } | 33 | } |
34 | |||
35 | struct sel_arg_struct { | ||
36 | unsigned long n; | ||
37 | fd_set *inp; | ||
38 | fd_set *outp; | ||
39 | fd_set *exp; | ||
40 | struct timeval *tvp; | ||
41 | }; | ||
42 | |||
43 | asmlinkage int old_select(struct sel_arg_struct __user *arg) | ||
44 | { | ||
45 | struct sel_arg_struct a; | ||
46 | |||
47 | if (copy_from_user(&a, arg, sizeof(a))) | ||
48 | return -EFAULT; | ||
49 | /* sys_select() does the appropriate kernel locking */ | ||
50 | return sys_select(a.n, a.inp, a.outp, a.exp, a.tvp); | ||
51 | } | ||
52 | |||
53 | /* | ||
54 | * sys_ipc() is the de-multiplexer for the SysV IPC calls.. | ||
55 | * | ||
56 | * This is really horribly ugly. | ||
57 | */ | ||
58 | asmlinkage long sys_ipc(uint call, int first, int second, | ||
59 | int third, void __user *ptr, long fifth) | ||
60 | { | ||
61 | int version, ret; | ||
62 | |||
63 | version = call >> 16; /* hack for backward compatibility */ | ||
64 | call &= 0xffff; | ||
65 | |||
66 | switch (call) { | ||
67 | case SEMOP: | ||
68 | return sys_semtimedop(first, (struct sembuf __user *)ptr, | ||
69 | second, NULL); | ||
70 | case SEMTIMEDOP: | ||
71 | return sys_semtimedop(first, (struct sembuf __user *)ptr, | ||
72 | second, | ||
73 | (const struct timespec __user *)fifth); | ||
74 | case SEMGET: | ||
75 | return sys_semget(first, second, third); | ||
76 | case SEMCTL: { | ||
77 | union semun fourth; | ||
78 | if (!ptr) | ||
79 | return -EINVAL; | ||
80 | if (get_user(fourth.__pad, (void __user * __user *) ptr)) | ||
81 | return -EFAULT; | ||
82 | return sys_semctl(first, second, third, fourth); | ||
83 | } | ||
84 | |||
85 | case MSGSND: | ||
86 | return sys_msgsnd(first, (struct msgbuf __user *) ptr, | ||
87 | second, third); | ||
88 | case MSGRCV: | ||
89 | switch (version) { | ||
90 | case 0: { | ||
91 | struct ipc_kludge tmp; | ||
92 | if (!ptr) | ||
93 | return -EINVAL; | ||
94 | |||
95 | if (copy_from_user(&tmp, | ||
96 | (struct ipc_kludge __user *) ptr, | ||
97 | sizeof(tmp))) | ||
98 | return -EFAULT; | ||
99 | return sys_msgrcv(first, tmp.msgp, second, | ||
100 | tmp.msgtyp, third); | ||
101 | } | ||
102 | default: | ||
103 | return sys_msgrcv(first, | ||
104 | (struct msgbuf __user *) ptr, | ||
105 | second, fifth, third); | ||
106 | } | ||
107 | case MSGGET: | ||
108 | return sys_msgget((key_t) first, second); | ||
109 | case MSGCTL: | ||
110 | return sys_msgctl(first, second, | ||
111 | (struct msqid_ds __user *) ptr); | ||
112 | |||
113 | case SHMAT: | ||
114 | switch (version) { | ||
115 | default: { | ||
116 | ulong raddr; | ||
117 | ret = do_shmat(first, (char __user *) ptr, second, | ||
118 | &raddr); | ||
119 | if (ret) | ||
120 | return ret; | ||
121 | return put_user(raddr, (ulong *) third); | ||
122 | } | ||
123 | case 1: /* iBCS2 emulator entry point */ | ||
124 | if (!segment_eq(get_fs(), get_ds())) | ||
125 | return -EINVAL; | ||
126 | return do_shmat(first, (char __user *) ptr, second, | ||
127 | (ulong *) third); | ||
128 | } | ||
129 | case SHMDT: | ||
130 | return sys_shmdt((char __user *)ptr); | ||
131 | case SHMGET: | ||
132 | return sys_shmget(first, second, third); | ||
133 | case SHMCTL: | ||
134 | return sys_shmctl(first, second, | ||
135 | (struct shmid_ds __user *) ptr); | ||
136 | default: | ||
137 | return -EINVAL; | ||
138 | } | ||
139 | } | ||
diff --git a/arch/parisc/Kconfig b/arch/parisc/Kconfig index f388dc68f605..9c4da3d63bfb 100644 --- a/arch/parisc/Kconfig +++ b/arch/parisc/Kconfig | |||
@@ -95,6 +95,9 @@ config PM | |||
95 | config STACKTRACE_SUPPORT | 95 | config STACKTRACE_SUPPORT |
96 | def_bool y | 96 | def_bool y |
97 | 97 | ||
98 | config NEED_DMA_MAP_STATE | ||
99 | def_bool y | ||
100 | |||
98 | config ISA_DMA_API | 101 | config ISA_DMA_API |
99 | bool | 102 | bool |
100 | 103 | ||
diff --git a/arch/parisc/include/asm/compat.h b/arch/parisc/include/asm/compat.h index 7f32611a7a5e..02b77baa5da6 100644 --- a/arch/parisc/include/asm/compat.h +++ b/arch/parisc/include/asm/compat.h | |||
@@ -7,7 +7,8 @@ | |||
7 | #include <linux/sched.h> | 7 | #include <linux/sched.h> |
8 | #include <linux/thread_info.h> | 8 | #include <linux/thread_info.h> |
9 | 9 | ||
10 | #define COMPAT_USER_HZ 100 | 10 | #define COMPAT_USER_HZ 100 |
11 | #define COMPAT_UTS_MACHINE "parisc\0\0" | ||
11 | 12 | ||
12 | typedef u32 compat_size_t; | 13 | typedef u32 compat_size_t; |
13 | typedef s32 compat_ssize_t; | 14 | typedef s32 compat_ssize_t; |
diff --git a/arch/parisc/include/asm/pci.h b/arch/parisc/include/asm/pci.h index 64c7aa590ae5..2242a5c636c2 100644 --- a/arch/parisc/include/asm/pci.h +++ b/arch/parisc/include/asm/pci.h | |||
@@ -183,20 +183,6 @@ struct pci_bios_ops { | |||
183 | void (*fixup_bus)(struct pci_bus *bus); | 183 | void (*fixup_bus)(struct pci_bus *bus); |
184 | }; | 184 | }; |
185 | 185 | ||
186 | /* pci_unmap_{single,page} is not a nop, thus... */ | ||
187 | #define DECLARE_PCI_UNMAP_ADDR(ADDR_NAME) \ | ||
188 | dma_addr_t ADDR_NAME; | ||
189 | #define DECLARE_PCI_UNMAP_LEN(LEN_NAME) \ | ||
190 | __u32 LEN_NAME; | ||
191 | #define pci_unmap_addr(PTR, ADDR_NAME) \ | ||
192 | ((PTR)->ADDR_NAME) | ||
193 | #define pci_unmap_addr_set(PTR, ADDR_NAME, VAL) \ | ||
194 | (((PTR)->ADDR_NAME) = (VAL)) | ||
195 | #define pci_unmap_len(PTR, LEN_NAME) \ | ||
196 | ((PTR)->LEN_NAME) | ||
197 | #define pci_unmap_len_set(PTR, LEN_NAME, VAL) \ | ||
198 | (((PTR)->LEN_NAME) = (VAL)) | ||
199 | |||
200 | /* | 186 | /* |
201 | ** Stuff declared in arch/parisc/kernel/pci.c | 187 | ** Stuff declared in arch/parisc/kernel/pci.c |
202 | */ | 188 | */ |
diff --git a/arch/parisc/include/asm/ptrace.h b/arch/parisc/include/asm/ptrace.h index aead40b16dd8..7f09533da771 100644 --- a/arch/parisc/include/asm/ptrace.h +++ b/arch/parisc/include/asm/ptrace.h | |||
@@ -47,13 +47,8 @@ struct pt_regs { | |||
47 | 47 | ||
48 | #define task_regs(task) ((struct pt_regs *) ((char *)(task) + TASK_REGS)) | 48 | #define task_regs(task) ((struct pt_regs *) ((char *)(task) + TASK_REGS)) |
49 | 49 | ||
50 | struct task_struct; | ||
51 | #define arch_has_single_step() 1 | 50 | #define arch_has_single_step() 1 |
52 | void user_disable_single_step(struct task_struct *task); | ||
53 | void user_enable_single_step(struct task_struct *task); | ||
54 | |||
55 | #define arch_has_block_step() 1 | 51 | #define arch_has_block_step() 1 |
56 | void user_enable_block_step(struct task_struct *task); | ||
57 | 52 | ||
58 | /* XXX should we use iaoq[1] or iaoq[0] ? */ | 53 | /* XXX should we use iaoq[1] or iaoq[0] ? */ |
59 | #define user_mode(regs) (((regs)->iaoq[0] & 3) ? 1 : 0) | 54 | #define user_mode(regs) (((regs)->iaoq[0] & 3) ? 1 : 0) |
diff --git a/arch/parisc/kernel/sys_parisc.c b/arch/parisc/kernel/sys_parisc.c index 9147391afb03..c9b932260f47 100644 --- a/arch/parisc/kernel/sys_parisc.c +++ b/arch/parisc/kernel/sys_parisc.c | |||
@@ -234,18 +234,3 @@ long parisc_personality(unsigned long personality) | |||
234 | 234 | ||
235 | return err; | 235 | return err; |
236 | } | 236 | } |
237 | |||
238 | long parisc_newuname(struct new_utsname __user *name) | ||
239 | { | ||
240 | int err = sys_newuname(name); | ||
241 | |||
242 | #ifdef CONFIG_COMPAT | ||
243 | if (!err && personality(current->personality) == PER_LINUX32) { | ||
244 | if (__put_user(0, name->machine + 6) || | ||
245 | __put_user(0, name->machine + 7)) | ||
246 | err = -EFAULT; | ||
247 | } | ||
248 | #endif | ||
249 | |||
250 | return err; | ||
251 | } | ||
diff --git a/arch/parisc/kernel/syscall_table.S b/arch/parisc/kernel/syscall_table.S index de5f6dab48b7..3d52c978738f 100644 --- a/arch/parisc/kernel/syscall_table.S +++ b/arch/parisc/kernel/syscall_table.S | |||
@@ -127,7 +127,7 @@ | |||
127 | ENTRY_SAME(socketpair) | 127 | ENTRY_SAME(socketpair) |
128 | ENTRY_SAME(setpgid) | 128 | ENTRY_SAME(setpgid) |
129 | ENTRY_SAME(send) | 129 | ENTRY_SAME(send) |
130 | ENTRY_OURS(newuname) | 130 | ENTRY_SAME(newuname) |
131 | ENTRY_SAME(umask) /* 60 */ | 131 | ENTRY_SAME(umask) /* 60 */ |
132 | ENTRY_SAME(chroot) | 132 | ENTRY_SAME(chroot) |
133 | ENTRY_COMP(ustat) | 133 | ENTRY_COMP(ustat) |
diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig index 155d571f5e26..8a54eb8e3768 100644 --- a/arch/powerpc/Kconfig +++ b/arch/powerpc/Kconfig | |||
@@ -672,6 +672,9 @@ config ZONE_DMA | |||
672 | bool | 672 | bool |
673 | default y | 673 | default y |
674 | 674 | ||
675 | config NEED_DMA_MAP_STATE | ||
676 | def_bool (PPC64 || NOT_COHERENT_CACHE) | ||
677 | |||
675 | config GENERIC_ISA_DMA | 678 | config GENERIC_ISA_DMA |
676 | bool | 679 | bool |
677 | depends on PPC64 || POWER4 || 6xx && !CPM2 | 680 | depends on PPC64 || POWER4 || 6xx && !CPM2 |
diff --git a/arch/powerpc/include/asm/compat.h b/arch/powerpc/include/asm/compat.h index 4774c2f92232..396d21a80058 100644 --- a/arch/powerpc/include/asm/compat.h +++ b/arch/powerpc/include/asm/compat.h | |||
@@ -7,7 +7,8 @@ | |||
7 | #include <linux/types.h> | 7 | #include <linux/types.h> |
8 | #include <linux/sched.h> | 8 | #include <linux/sched.h> |
9 | 9 | ||
10 | #define COMPAT_USER_HZ 100 | 10 | #define COMPAT_USER_HZ 100 |
11 | #define COMPAT_UTS_MACHINE "ppc\0\0" | ||
11 | 12 | ||
12 | typedef u32 compat_size_t; | 13 | typedef u32 compat_size_t; |
13 | typedef s32 compat_ssize_t; | 14 | typedef s32 compat_ssize_t; |
diff --git a/arch/powerpc/include/asm/dma-mapping.h b/arch/powerpc/include/asm/dma-mapping.h index 80a973bb9e71..c85ef230135b 100644 --- a/arch/powerpc/include/asm/dma-mapping.h +++ b/arch/powerpc/include/asm/dma-mapping.h | |||
@@ -127,9 +127,6 @@ static inline int dma_supported(struct device *dev, u64 mask) | |||
127 | return dma_ops->dma_supported(dev, mask); | 127 | return dma_ops->dma_supported(dev, mask); |
128 | } | 128 | } |
129 | 129 | ||
130 | /* We have our own implementation of pci_set_dma_mask() */ | ||
131 | #define HAVE_ARCH_PCI_SET_DMA_MASK | ||
132 | |||
133 | static inline int dma_set_mask(struct device *dev, u64 dma_mask) | 130 | static inline int dma_set_mask(struct device *dev, u64 dma_mask) |
134 | { | 131 | { |
135 | struct dma_map_ops *dma_ops = get_dma_ops(dev); | 132 | struct dma_map_ops *dma_ops = get_dma_ops(dev); |
diff --git a/arch/powerpc/include/asm/pci.h b/arch/powerpc/include/asm/pci.h index b5ea626eea2d..a20a9ad2258b 100644 --- a/arch/powerpc/include/asm/pci.h +++ b/arch/powerpc/include/asm/pci.h | |||
@@ -141,38 +141,6 @@ extern int pci_mmap_legacy_page_range(struct pci_bus *bus, | |||
141 | 141 | ||
142 | #define HAVE_PCI_LEGACY 1 | 142 | #define HAVE_PCI_LEGACY 1 |
143 | 143 | ||
144 | #if defined(CONFIG_PPC64) || defined(CONFIG_NOT_COHERENT_CACHE) | ||
145 | /* | ||
146 | * For 64-bit kernels, pci_unmap_{single,page} is not a nop. | ||
147 | * For 32-bit non-coherent kernels, pci_dma_sync_single_for_cpu() and | ||
148 | * so on are not nops. | ||
149 | * and thus... | ||
150 | */ | ||
151 | #define DECLARE_PCI_UNMAP_ADDR(ADDR_NAME) \ | ||
152 | dma_addr_t ADDR_NAME; | ||
153 | #define DECLARE_PCI_UNMAP_LEN(LEN_NAME) \ | ||
154 | __u32 LEN_NAME; | ||
155 | #define pci_unmap_addr(PTR, ADDR_NAME) \ | ||
156 | ((PTR)->ADDR_NAME) | ||
157 | #define pci_unmap_addr_set(PTR, ADDR_NAME, VAL) \ | ||
158 | (((PTR)->ADDR_NAME) = (VAL)) | ||
159 | #define pci_unmap_len(PTR, LEN_NAME) \ | ||
160 | ((PTR)->LEN_NAME) | ||
161 | #define pci_unmap_len_set(PTR, LEN_NAME, VAL) \ | ||
162 | (((PTR)->LEN_NAME) = (VAL)) | ||
163 | |||
164 | #else /* 32-bit && coherent */ | ||
165 | |||
166 | /* pci_unmap_{page,single} is a nop so... */ | ||
167 | #define DECLARE_PCI_UNMAP_ADDR(ADDR_NAME) | ||
168 | #define DECLARE_PCI_UNMAP_LEN(LEN_NAME) | ||
169 | #define pci_unmap_addr(PTR, ADDR_NAME) (0) | ||
170 | #define pci_unmap_addr_set(PTR, ADDR_NAME, VAL) do { } while (0) | ||
171 | #define pci_unmap_len(PTR, LEN_NAME) (0) | ||
172 | #define pci_unmap_len_set(PTR, LEN_NAME, VAL) do { } while (0) | ||
173 | |||
174 | #endif /* CONFIG_PPC64 || CONFIG_NOT_COHERENT_CACHE */ | ||
175 | |||
176 | #ifdef CONFIG_PPC64 | 144 | #ifdef CONFIG_PPC64 |
177 | 145 | ||
178 | /* The PCI address space does not equal the physical memory address | 146 | /* The PCI address space does not equal the physical memory address |
diff --git a/arch/powerpc/include/asm/ptrace.h b/arch/powerpc/include/asm/ptrace.h index b45108126562..9e2d84c06b74 100644 --- a/arch/powerpc/include/asm/ptrace.h +++ b/arch/powerpc/include/asm/ptrace.h | |||
@@ -137,15 +137,8 @@ do { \ | |||
137 | } while (0) | 137 | } while (0) |
138 | #endif /* __powerpc64__ */ | 138 | #endif /* __powerpc64__ */ |
139 | 139 | ||
140 | /* | ||
141 | * These are defined as per linux/ptrace.h, which see. | ||
142 | */ | ||
143 | #define arch_has_single_step() (1) | 140 | #define arch_has_single_step() (1) |
144 | #define arch_has_block_step() (!cpu_has_feature(CPU_FTR_601)) | 141 | #define arch_has_block_step() (!cpu_has_feature(CPU_FTR_601)) |
145 | extern void user_enable_single_step(struct task_struct *); | ||
146 | extern void user_enable_block_step(struct task_struct *); | ||
147 | extern void user_disable_single_step(struct task_struct *); | ||
148 | |||
149 | #define ARCH_HAS_USER_SINGLE_STEP_INFO | 142 | #define ARCH_HAS_USER_SINGLE_STEP_INFO |
150 | 143 | ||
151 | #endif /* __ASSEMBLY__ */ | 144 | #endif /* __ASSEMBLY__ */ |
diff --git a/arch/powerpc/include/asm/syscalls.h b/arch/powerpc/include/asm/syscalls.h index eb8eb400c664..4084e567d28e 100644 --- a/arch/powerpc/include/asm/syscalls.h +++ b/arch/powerpc/include/asm/syscalls.h | |||
@@ -7,7 +7,6 @@ | |||
7 | #include <linux/types.h> | 7 | #include <linux/types.h> |
8 | #include <asm/signal.h> | 8 | #include <asm/signal.h> |
9 | 9 | ||
10 | struct new_utsname; | ||
11 | struct pt_regs; | 10 | struct pt_regs; |
12 | struct rtas_args; | 11 | struct rtas_args; |
13 | struct sigaction; | 12 | struct sigaction; |
@@ -35,12 +34,9 @@ asmlinkage long sys_pipe2(int __user *fildes, int flags); | |||
35 | asmlinkage long sys_rt_sigaction(int sig, | 34 | asmlinkage long sys_rt_sigaction(int sig, |
36 | const struct sigaction __user *act, | 35 | const struct sigaction __user *act, |
37 | struct sigaction __user *oact, size_t sigsetsize); | 36 | struct sigaction __user *oact, size_t sigsetsize); |
38 | asmlinkage int sys_ipc(uint call, int first, unsigned long second, | ||
39 | long third, void __user *ptr, long fifth); | ||
40 | asmlinkage long ppc64_personality(unsigned long personality); | 37 | asmlinkage long ppc64_personality(unsigned long personality); |
41 | asmlinkage int ppc_rtas(struct rtas_args __user *uargs); | 38 | asmlinkage int ppc_rtas(struct rtas_args __user *uargs); |
42 | asmlinkage time_t sys64_time(time_t __user * tloc); | 39 | asmlinkage time_t sys64_time(time_t __user * tloc); |
43 | asmlinkage long ppc_newuname(struct new_utsname __user * name); | ||
44 | 40 | ||
45 | asmlinkage long sys_rt_sigsuspend(sigset_t __user *unewset, | 41 | asmlinkage long sys_rt_sigsuspend(sigset_t __user *unewset, |
46 | size_t sigsetsize); | 42 | size_t sigsetsize); |
diff --git a/arch/powerpc/include/asm/systbl.h b/arch/powerpc/include/asm/systbl.h index 07d2d19ab5e9..a5ee345b6a5c 100644 --- a/arch/powerpc/include/asm/systbl.h +++ b/arch/powerpc/include/asm/systbl.h | |||
@@ -125,7 +125,7 @@ SYSCALL_SPU(fsync) | |||
125 | SYS32ONLY(sigreturn) | 125 | SYS32ONLY(sigreturn) |
126 | PPC_SYS(clone) | 126 | PPC_SYS(clone) |
127 | COMPAT_SYS_SPU(setdomainname) | 127 | COMPAT_SYS_SPU(setdomainname) |
128 | PPC_SYS_SPU(newuname) | 128 | SYSCALL_SPU(newuname) |
129 | SYSCALL(ni_syscall) | 129 | SYSCALL(ni_syscall) |
130 | COMPAT_SYS_SPU(adjtimex) | 130 | COMPAT_SYS_SPU(adjtimex) |
131 | SYSCALL_SPU(mprotect) | 131 | SYSCALL_SPU(mprotect) |
diff --git a/arch/powerpc/include/asm/unistd.h b/arch/powerpc/include/asm/unistd.h index f6ca76176766..f0a10266e7f7 100644 --- a/arch/powerpc/include/asm/unistd.h +++ b/arch/powerpc/include/asm/unistd.h | |||
@@ -364,6 +364,7 @@ | |||
364 | #define __ARCH_WANT_STAT64 | 364 | #define __ARCH_WANT_STAT64 |
365 | #define __ARCH_WANT_SYS_ALARM | 365 | #define __ARCH_WANT_SYS_ALARM |
366 | #define __ARCH_WANT_SYS_GETHOSTNAME | 366 | #define __ARCH_WANT_SYS_GETHOSTNAME |
367 | #define __ARCH_WANT_SYS_IPC | ||
367 | #define __ARCH_WANT_SYS_PAUSE | 368 | #define __ARCH_WANT_SYS_PAUSE |
368 | #define __ARCH_WANT_SYS_SGETMASK | 369 | #define __ARCH_WANT_SYS_SGETMASK |
369 | #define __ARCH_WANT_SYS_SIGNAL | 370 | #define __ARCH_WANT_SYS_SIGNAL |
@@ -376,6 +377,7 @@ | |||
376 | #define __ARCH_WANT_SYS_LLSEEK | 377 | #define __ARCH_WANT_SYS_LLSEEK |
377 | #define __ARCH_WANT_SYS_NICE | 378 | #define __ARCH_WANT_SYS_NICE |
378 | #define __ARCH_WANT_SYS_OLD_GETRLIMIT | 379 | #define __ARCH_WANT_SYS_OLD_GETRLIMIT |
380 | #define __ARCH_WANT_SYS_OLD_UNAME | ||
379 | #define __ARCH_WANT_SYS_OLDUMOUNT | 381 | #define __ARCH_WANT_SYS_OLDUMOUNT |
380 | #define __ARCH_WANT_SYS_SIGPENDING | 382 | #define __ARCH_WANT_SYS_SIGPENDING |
381 | #define __ARCH_WANT_SYS_SIGPROCMASK | 383 | #define __ARCH_WANT_SYS_SIGPROCMASK |
diff --git a/arch/powerpc/kernel/cacheinfo.c b/arch/powerpc/kernel/cacheinfo.c index bb37b1d19a58..01fe9ce28379 100644 --- a/arch/powerpc/kernel/cacheinfo.c +++ b/arch/powerpc/kernel/cacheinfo.c | |||
@@ -642,7 +642,7 @@ static struct kobj_attribute *cache_index_opt_attrs[] = { | |||
642 | &cache_assoc_attr, | 642 | &cache_assoc_attr, |
643 | }; | 643 | }; |
644 | 644 | ||
645 | static struct sysfs_ops cache_index_ops = { | 645 | static const struct sysfs_ops cache_index_ops = { |
646 | .show = cache_index_show, | 646 | .show = cache_index_show, |
647 | }; | 647 | }; |
648 | 648 | ||
diff --git a/arch/powerpc/kernel/pci-common.c b/arch/powerpc/kernel/pci-common.c index 2597f9545d8a..f3c42ce516e7 100644 --- a/arch/powerpc/kernel/pci-common.c +++ b/arch/powerpc/kernel/pci-common.c | |||
@@ -63,21 +63,6 @@ struct dma_map_ops *get_pci_dma_ops(void) | |||
63 | } | 63 | } |
64 | EXPORT_SYMBOL(get_pci_dma_ops); | 64 | EXPORT_SYMBOL(get_pci_dma_ops); |
65 | 65 | ||
66 | int pci_set_dma_mask(struct pci_dev *dev, u64 mask) | ||
67 | { | ||
68 | return dma_set_mask(&dev->dev, mask); | ||
69 | } | ||
70 | |||
71 | int pci_set_consistent_dma_mask(struct pci_dev *dev, u64 mask) | ||
72 | { | ||
73 | int rc; | ||
74 | |||
75 | rc = dma_set_mask(&dev->dev, mask); | ||
76 | dev->dev.coherent_dma_mask = dev->dma_mask; | ||
77 | |||
78 | return rc; | ||
79 | } | ||
80 | |||
81 | struct pci_controller *pcibios_alloc_controller(struct device_node *dev) | 66 | struct pci_controller *pcibios_alloc_controller(struct device_node *dev) |
82 | { | 67 | { |
83 | struct pci_controller *phb; | 68 | struct pci_controller *phb; |
diff --git a/arch/powerpc/kernel/syscalls.c b/arch/powerpc/kernel/syscalls.c index 3370e62e43d4..f2496f2faecc 100644 --- a/arch/powerpc/kernel/syscalls.c +++ b/arch/powerpc/kernel/syscalls.c | |||
@@ -42,100 +42,6 @@ | |||
42 | #include <asm/time.h> | 42 | #include <asm/time.h> |
43 | #include <asm/unistd.h> | 43 | #include <asm/unistd.h> |
44 | 44 | ||
45 | /* | ||
46 | * sys_ipc() is the de-multiplexer for the SysV IPC calls.. | ||
47 | * | ||
48 | * This is really horribly ugly. | ||
49 | */ | ||
50 | int sys_ipc(uint call, int first, unsigned long second, long third, | ||
51 | void __user *ptr, long fifth) | ||
52 | { | ||
53 | int version, ret; | ||
54 | |||
55 | version = call >> 16; /* hack for backward compatibility */ | ||
56 | call &= 0xffff; | ||
57 | |||
58 | ret = -ENOSYS; | ||
59 | switch (call) { | ||
60 | case SEMOP: | ||
61 | ret = sys_semtimedop(first, (struct sembuf __user *)ptr, | ||
62 | (unsigned)second, NULL); | ||
63 | break; | ||
64 | case SEMTIMEDOP: | ||
65 | ret = sys_semtimedop(first, (struct sembuf __user *)ptr, | ||
66 | (unsigned)second, | ||
67 | (const struct timespec __user *) fifth); | ||
68 | break; | ||
69 | case SEMGET: | ||
70 | ret = sys_semget (first, (int)second, third); | ||
71 | break; | ||
72 | case SEMCTL: { | ||
73 | union semun fourth; | ||
74 | |||
75 | ret = -EINVAL; | ||
76 | if (!ptr) | ||
77 | break; | ||
78 | if ((ret = get_user(fourth.__pad, (void __user * __user *)ptr))) | ||
79 | break; | ||
80 | ret = sys_semctl(first, (int)second, third, fourth); | ||
81 | break; | ||
82 | } | ||
83 | case MSGSND: | ||
84 | ret = sys_msgsnd(first, (struct msgbuf __user *)ptr, | ||
85 | (size_t)second, third); | ||
86 | break; | ||
87 | case MSGRCV: | ||
88 | switch (version) { | ||
89 | case 0: { | ||
90 | struct ipc_kludge tmp; | ||
91 | |||
92 | ret = -EINVAL; | ||
93 | if (!ptr) | ||
94 | break; | ||
95 | if ((ret = copy_from_user(&tmp, | ||
96 | (struct ipc_kludge __user *) ptr, | ||
97 | sizeof (tmp)) ? -EFAULT : 0)) | ||
98 | break; | ||
99 | ret = sys_msgrcv(first, tmp.msgp, (size_t) second, | ||
100 | tmp.msgtyp, third); | ||
101 | break; | ||
102 | } | ||
103 | default: | ||
104 | ret = sys_msgrcv (first, (struct msgbuf __user *) ptr, | ||
105 | (size_t)second, fifth, third); | ||
106 | break; | ||
107 | } | ||
108 | break; | ||
109 | case MSGGET: | ||
110 | ret = sys_msgget((key_t)first, (int)second); | ||
111 | break; | ||
112 | case MSGCTL: | ||
113 | ret = sys_msgctl(first, (int)second, | ||
114 | (struct msqid_ds __user *)ptr); | ||
115 | break; | ||
116 | case SHMAT: { | ||
117 | ulong raddr; | ||
118 | ret = do_shmat(first, (char __user *)ptr, (int)second, &raddr); | ||
119 | if (ret) | ||
120 | break; | ||
121 | ret = put_user(raddr, (ulong __user *) third); | ||
122 | break; | ||
123 | } | ||
124 | case SHMDT: | ||
125 | ret = sys_shmdt((char __user *)ptr); | ||
126 | break; | ||
127 | case SHMGET: | ||
128 | ret = sys_shmget(first, (size_t)second, third); | ||
129 | break; | ||
130 | case SHMCTL: | ||
131 | ret = sys_shmctl(first, (int)second, | ||
132 | (struct shmid_ds __user *)ptr); | ||
133 | break; | ||
134 | } | ||
135 | |||
136 | return ret; | ||
137 | } | ||
138 | |||
139 | static inline unsigned long do_mmap2(unsigned long addr, size_t len, | 45 | static inline unsigned long do_mmap2(unsigned long addr, size_t len, |
140 | unsigned long prot, unsigned long flags, | 46 | unsigned long prot, unsigned long flags, |
141 | unsigned long fd, unsigned long off, int shift) | 47 | unsigned long fd, unsigned long off, int shift) |
@@ -210,76 +116,6 @@ long ppc64_personality(unsigned long personality) | |||
210 | } | 116 | } |
211 | #endif | 117 | #endif |
212 | 118 | ||
213 | #ifdef CONFIG_PPC64 | ||
214 | #define OVERRIDE_MACHINE (personality(current->personality) == PER_LINUX32) | ||
215 | #else | ||
216 | #define OVERRIDE_MACHINE 0 | ||
217 | #endif | ||
218 | |||
219 | static inline int override_machine(char __user *mach) | ||
220 | { | ||
221 | if (OVERRIDE_MACHINE) { | ||
222 | /* change ppc64 to ppc */ | ||
223 | if (__put_user(0, mach+3) || __put_user(0, mach+4)) | ||
224 | return -EFAULT; | ||
225 | } | ||
226 | return 0; | ||
227 | } | ||
228 | |||
229 | long ppc_newuname(struct new_utsname __user * name) | ||
230 | { | ||
231 | int err = 0; | ||
232 | |||
233 | down_read(&uts_sem); | ||
234 | if (copy_to_user(name, utsname(), sizeof(*name))) | ||
235 | err = -EFAULT; | ||
236 | up_read(&uts_sem); | ||
237 | if (!err) | ||
238 | err = override_machine(name->machine); | ||
239 | return err; | ||
240 | } | ||
241 | |||
242 | int sys_uname(struct old_utsname __user *name) | ||
243 | { | ||
244 | int err = 0; | ||
245 | |||
246 | down_read(&uts_sem); | ||
247 | if (copy_to_user(name, utsname(), sizeof(*name))) | ||
248 | err = -EFAULT; | ||
249 | up_read(&uts_sem); | ||
250 | if (!err) | ||
251 | err = override_machine(name->machine); | ||
252 | return err; | ||
253 | } | ||
254 | |||
255 | int sys_olduname(struct oldold_utsname __user *name) | ||
256 | { | ||
257 | int error; | ||
258 | |||
259 | if (!access_ok(VERIFY_WRITE, name, sizeof(struct oldold_utsname))) | ||
260 | return -EFAULT; | ||
261 | |||
262 | down_read(&uts_sem); | ||
263 | error = __copy_to_user(&name->sysname, &utsname()->sysname, | ||
264 | __OLD_UTS_LEN); | ||
265 | error |= __put_user(0, name->sysname + __OLD_UTS_LEN); | ||
266 | error |= __copy_to_user(&name->nodename, &utsname()->nodename, | ||
267 | __OLD_UTS_LEN); | ||
268 | error |= __put_user(0, name->nodename + __OLD_UTS_LEN); | ||
269 | error |= __copy_to_user(&name->release, &utsname()->release, | ||
270 | __OLD_UTS_LEN); | ||
271 | error |= __put_user(0, name->release + __OLD_UTS_LEN); | ||
272 | error |= __copy_to_user(&name->version, &utsname()->version, | ||
273 | __OLD_UTS_LEN); | ||
274 | error |= __put_user(0, name->version + __OLD_UTS_LEN); | ||
275 | error |= __copy_to_user(&name->machine, &utsname()->machine, | ||
276 | __OLD_UTS_LEN); | ||
277 | error |= override_machine(name->machine); | ||
278 | up_read(&uts_sem); | ||
279 | |||
280 | return error? -EFAULT: 0; | ||
281 | } | ||
282 | |||
283 | long ppc_fadvise64_64(int fd, int advice, u32 offset_high, u32 offset_low, | 119 | long ppc_fadvise64_64(int fd, int advice, u32 offset_high, u32 offset_low, |
284 | u32 len_high, u32 len_low) | 120 | u32 len_high, u32 len_low) |
285 | { | 121 | { |
diff --git a/arch/powerpc/platforms/52xx/mpc52xx_gpt.c b/arch/powerpc/platforms/52xx/mpc52xx_gpt.c index 6f8ebe1085b3..072b948b2e2d 100644 --- a/arch/powerpc/platforms/52xx/mpc52xx_gpt.c +++ b/arch/powerpc/platforms/52xx/mpc52xx_gpt.c | |||
@@ -553,7 +553,7 @@ static ssize_t mpc52xx_wdt_write(struct file *file, const char __user *data, | |||
553 | return 0; | 553 | return 0; |
554 | } | 554 | } |
555 | 555 | ||
556 | static struct watchdog_info mpc5200_wdt_info = { | 556 | static const struct watchdog_info mpc5200_wdt_info = { |
557 | .options = WDIOF_SETTIMEOUT | WDIOF_KEEPALIVEPING, | 557 | .options = WDIOF_SETTIMEOUT | WDIOF_KEEPALIVEPING, |
558 | .identity = WDT_IDENTITY, | 558 | .identity = WDT_IDENTITY, |
559 | }; | 559 | }; |
diff --git a/arch/s390/include/asm/compat.h b/arch/s390/include/asm/compat.h index 01a08020bc0e..104f2007f097 100644 --- a/arch/s390/include/asm/compat.h +++ b/arch/s390/include/asm/compat.h | |||
@@ -35,7 +35,8 @@ | |||
35 | 35 | ||
36 | extern long psw32_user_bits; | 36 | extern long psw32_user_bits; |
37 | 37 | ||
38 | #define COMPAT_USER_HZ 100 | 38 | #define COMPAT_USER_HZ 100 |
39 | #define COMPAT_UTS_MACHINE "s390\0\0\0\0" | ||
39 | 40 | ||
40 | typedef u32 compat_size_t; | 41 | typedef u32 compat_size_t; |
41 | typedef s32 compat_ssize_t; | 42 | typedef s32 compat_ssize_t; |
diff --git a/arch/s390/include/asm/ptrace.h b/arch/s390/include/asm/ptrace.h index dd2d913afcae..fef9b33cdd59 100644 --- a/arch/s390/include/asm/ptrace.h +++ b/arch/s390/include/asm/ptrace.h | |||
@@ -489,9 +489,6 @@ struct user_regs_struct | |||
489 | * These are defined as per linux/ptrace.h, which see. | 489 | * These are defined as per linux/ptrace.h, which see. |
490 | */ | 490 | */ |
491 | #define arch_has_single_step() (1) | 491 | #define arch_has_single_step() (1) |
492 | struct task_struct; | ||
493 | extern void user_enable_single_step(struct task_struct *); | ||
494 | extern void user_disable_single_step(struct task_struct *); | ||
495 | extern void show_regs(struct pt_regs * regs); | 492 | extern void show_regs(struct pt_regs * regs); |
496 | 493 | ||
497 | #define user_mode(regs) (((regs)->psw.mask & PSW_MASK_PSTATE) != 0) | 494 | #define user_mode(regs) (((regs)->psw.mask & PSW_MASK_PSTATE) != 0) |
diff --git a/arch/s390/include/asm/qdio.h b/arch/s390/include/asm/qdio.h index c666bfe5e984..9b04b1102bbc 100644 --- a/arch/s390/include/asm/qdio.h +++ b/arch/s390/include/asm/qdio.h | |||
@@ -321,11 +321,6 @@ typedef void qdio_handler_t(struct ccw_device *, unsigned int, int, | |||
321 | #define QDIO_ERROR_ACTIVATE_CHECK_CONDITION 0x40 | 321 | #define QDIO_ERROR_ACTIVATE_CHECK_CONDITION 0x40 |
322 | #define QDIO_ERROR_SLSB_STATE 0x80 | 322 | #define QDIO_ERROR_SLSB_STATE 0x80 |
323 | 323 | ||
324 | /* for qdio_initialize */ | ||
325 | #define QDIO_INBOUND_0COPY_SBALS 0x01 | ||
326 | #define QDIO_OUTBOUND_0COPY_SBALS 0x02 | ||
327 | #define QDIO_USE_OUTBOUND_PCIS 0x04 | ||
328 | |||
329 | /* for qdio_cleanup */ | 324 | /* for qdio_cleanup */ |
330 | #define QDIO_FLAG_CLEANUP_USING_CLEAR 0x01 | 325 | #define QDIO_FLAG_CLEANUP_USING_CLEAR 0x01 |
331 | #define QDIO_FLAG_CLEANUP_USING_HALT 0x02 | 326 | #define QDIO_FLAG_CLEANUP_USING_HALT 0x02 |
@@ -344,7 +339,6 @@ typedef void qdio_handler_t(struct ccw_device *, unsigned int, int, | |||
344 | * @input_handler: handler to be called for input queues | 339 | * @input_handler: handler to be called for input queues |
345 | * @output_handler: handler to be called for output queues | 340 | * @output_handler: handler to be called for output queues |
346 | * @int_parm: interruption parameter | 341 | * @int_parm: interruption parameter |
347 | * @flags: initialization flags | ||
348 | * @input_sbal_addr_array: address of no_input_qs * 128 pointers | 342 | * @input_sbal_addr_array: address of no_input_qs * 128 pointers |
349 | * @output_sbal_addr_array: address of no_output_qs * 128 pointers | 343 | * @output_sbal_addr_array: address of no_output_qs * 128 pointers |
350 | */ | 344 | */ |
@@ -361,7 +355,6 @@ struct qdio_initialize { | |||
361 | qdio_handler_t *input_handler; | 355 | qdio_handler_t *input_handler; |
362 | qdio_handler_t *output_handler; | 356 | qdio_handler_t *output_handler; |
363 | unsigned long int_parm; | 357 | unsigned long int_parm; |
364 | unsigned long flags; | ||
365 | void **input_sbal_addr_array; | 358 | void **input_sbal_addr_array; |
366 | void **output_sbal_addr_array; | 359 | void **output_sbal_addr_array; |
367 | }; | 360 | }; |
diff --git a/arch/s390/include/asm/unistd.h b/arch/s390/include/asm/unistd.h index 6e9f049fa823..5f0075150a65 100644 --- a/arch/s390/include/asm/unistd.h +++ b/arch/s390/include/asm/unistd.h | |||
@@ -392,6 +392,7 @@ | |||
392 | #define __ARCH_WANT_SYS_LLSEEK | 392 | #define __ARCH_WANT_SYS_LLSEEK |
393 | #define __ARCH_WANT_SYS_NICE | 393 | #define __ARCH_WANT_SYS_NICE |
394 | #define __ARCH_WANT_SYS_OLD_GETRLIMIT | 394 | #define __ARCH_WANT_SYS_OLD_GETRLIMIT |
395 | #define __ARCH_WANT_SYS_OLD_MMAP | ||
395 | #define __ARCH_WANT_SYS_OLDUMOUNT | 396 | #define __ARCH_WANT_SYS_OLDUMOUNT |
396 | #define __ARCH_WANT_SYS_SIGPENDING | 397 | #define __ARCH_WANT_SYS_SIGPENDING |
397 | #define __ARCH_WANT_SYS_SIGPROCMASK | 398 | #define __ARCH_WANT_SYS_SIGPROCMASK |
diff --git a/arch/s390/kernel/compat_wrapper.S b/arch/s390/kernel/compat_wrapper.S index 30de2d0e52bb..672ce52341b4 100644 --- a/arch/s390/kernel/compat_wrapper.S +++ b/arch/s390/kernel/compat_wrapper.S | |||
@@ -547,7 +547,7 @@ sys32_setdomainname_wrapper: | |||
547 | .globl sys32_newuname_wrapper | 547 | .globl sys32_newuname_wrapper |
548 | sys32_newuname_wrapper: | 548 | sys32_newuname_wrapper: |
549 | llgtr %r2,%r2 # struct new_utsname * | 549 | llgtr %r2,%r2 # struct new_utsname * |
550 | jg sys_s390_newuname # branch to system call | 550 | jg sys_newuname # branch to system call |
551 | 551 | ||
552 | .globl compat_sys_adjtimex_wrapper | 552 | .globl compat_sys_adjtimex_wrapper |
553 | compat_sys_adjtimex_wrapper: | 553 | compat_sys_adjtimex_wrapper: |
diff --git a/arch/s390/kernel/entry.h b/arch/s390/kernel/entry.h index e1e5e767ab56..eb15c12ec158 100644 --- a/arch/s390/kernel/entry.h +++ b/arch/s390/kernel/entry.h | |||
@@ -24,17 +24,13 @@ int __cpuinit start_secondary(void *cpuvoid); | |||
24 | void __init startup_init(void); | 24 | void __init startup_init(void); |
25 | void die(const char * str, struct pt_regs * regs, long err); | 25 | void die(const char * str, struct pt_regs * regs, long err); |
26 | 26 | ||
27 | struct new_utsname; | 27 | struct s390_mmap_arg_struct; |
28 | struct mmap_arg_struct; | ||
29 | struct fadvise64_64_args; | 28 | struct fadvise64_64_args; |
30 | struct old_sigaction; | 29 | struct old_sigaction; |
31 | struct sel_arg_struct; | ||
32 | 30 | ||
33 | long sys_mmap2(struct mmap_arg_struct __user *arg); | 31 | long sys_mmap2(struct s390_mmap_arg_struct __user *arg); |
34 | long sys_s390_old_mmap(struct mmap_arg_struct __user *arg); | 32 | long sys_s390_ipc(uint call, int first, unsigned long second, |
35 | long sys_ipc(uint call, int first, unsigned long second, | ||
36 | unsigned long third, void __user *ptr); | 33 | unsigned long third, void __user *ptr); |
37 | long sys_s390_newuname(struct new_utsname __user *name); | ||
38 | long sys_s390_personality(unsigned long personality); | 34 | long sys_s390_personality(unsigned long personality); |
39 | long sys_s390_fadvise64(int fd, u32 offset_high, u32 offset_low, | 35 | long sys_s390_fadvise64(int fd, u32 offset_high, u32 offset_low, |
40 | size_t len, int advice); | 36 | size_t len, int advice); |
diff --git a/arch/s390/kernel/smp.c b/arch/s390/kernel/smp.c index 8b10127c00ad..29f65bce55e1 100644 --- a/arch/s390/kernel/smp.c +++ b/arch/s390/kernel/smp.c | |||
@@ -1020,7 +1020,9 @@ out: | |||
1020 | return rc; | 1020 | return rc; |
1021 | } | 1021 | } |
1022 | 1022 | ||
1023 | static ssize_t __ref rescan_store(struct sysdev_class *class, const char *buf, | 1023 | static ssize_t __ref rescan_store(struct sysdev_class *class, |
1024 | struct sysdev_class_attribute *attr, | ||
1025 | const char *buf, | ||
1024 | size_t count) | 1026 | size_t count) |
1025 | { | 1027 | { |
1026 | int rc; | 1028 | int rc; |
@@ -1031,7 +1033,9 @@ static ssize_t __ref rescan_store(struct sysdev_class *class, const char *buf, | |||
1031 | static SYSDEV_CLASS_ATTR(rescan, 0200, NULL, rescan_store); | 1033 | static SYSDEV_CLASS_ATTR(rescan, 0200, NULL, rescan_store); |
1032 | #endif /* CONFIG_HOTPLUG_CPU */ | 1034 | #endif /* CONFIG_HOTPLUG_CPU */ |
1033 | 1035 | ||
1034 | static ssize_t dispatching_show(struct sysdev_class *class, char *buf) | 1036 | static ssize_t dispatching_show(struct sysdev_class *class, |
1037 | struct sysdev_class_attribute *attr, | ||
1038 | char *buf) | ||
1035 | { | 1039 | { |
1036 | ssize_t count; | 1040 | ssize_t count; |
1037 | 1041 | ||
@@ -1041,7 +1045,9 @@ static ssize_t dispatching_show(struct sysdev_class *class, char *buf) | |||
1041 | return count; | 1045 | return count; |
1042 | } | 1046 | } |
1043 | 1047 | ||
1044 | static ssize_t dispatching_store(struct sysdev_class *dev, const char *buf, | 1048 | static ssize_t dispatching_store(struct sysdev_class *dev, |
1049 | struct sysdev_class_attribute *attr, | ||
1050 | const char *buf, | ||
1045 | size_t count) | 1051 | size_t count) |
1046 | { | 1052 | { |
1047 | int val, rc; | 1053 | int val, rc; |
diff --git a/arch/s390/kernel/sys_s390.c b/arch/s390/kernel/sys_s390.c index 86a74c9c9e63..7b6b0f81a283 100644 --- a/arch/s390/kernel/sys_s390.c +++ b/arch/s390/kernel/sys_s390.c | |||
@@ -33,13 +33,12 @@ | |||
33 | #include "entry.h" | 33 | #include "entry.h" |
34 | 34 | ||
35 | /* | 35 | /* |
36 | * Perform the select(nd, in, out, ex, tv) and mmap() system | 36 | * Perform the mmap() system call. Linux for S/390 isn't able to handle more |
37 | * calls. Linux for S/390 isn't able to handle more than 5 | 37 | * than 5 system call parameters, so this system call uses a memory block |
38 | * system call parameters, so these system calls used a memory | 38 | * for parameter passing. |
39 | * block for parameter passing.. | ||
40 | */ | 39 | */ |
41 | 40 | ||
42 | struct mmap_arg_struct { | 41 | struct s390_mmap_arg_struct { |
43 | unsigned long addr; | 42 | unsigned long addr; |
44 | unsigned long len; | 43 | unsigned long len; |
45 | unsigned long prot; | 44 | unsigned long prot; |
@@ -48,9 +47,9 @@ struct mmap_arg_struct { | |||
48 | unsigned long offset; | 47 | unsigned long offset; |
49 | }; | 48 | }; |
50 | 49 | ||
51 | SYSCALL_DEFINE1(mmap2, struct mmap_arg_struct __user *, arg) | 50 | SYSCALL_DEFINE1(mmap2, struct s390_mmap_arg_struct __user *, arg) |
52 | { | 51 | { |
53 | struct mmap_arg_struct a; | 52 | struct s390_mmap_arg_struct a; |
54 | int error = -EFAULT; | 53 | int error = -EFAULT; |
55 | 54 | ||
56 | if (copy_from_user(&a, arg, sizeof(a))) | 55 | if (copy_from_user(&a, arg, sizeof(a))) |
@@ -60,29 +59,12 @@ out: | |||
60 | return error; | 59 | return error; |
61 | } | 60 | } |
62 | 61 | ||
63 | SYSCALL_DEFINE1(s390_old_mmap, struct mmap_arg_struct __user *, arg) | ||
64 | { | ||
65 | struct mmap_arg_struct a; | ||
66 | long error = -EFAULT; | ||
67 | |||
68 | if (copy_from_user(&a, arg, sizeof(a))) | ||
69 | goto out; | ||
70 | |||
71 | error = -EINVAL; | ||
72 | if (a.offset & ~PAGE_MASK) | ||
73 | goto out; | ||
74 | |||
75 | error = sys_mmap_pgoff(a.addr, a.len, a.prot, a.flags, a.fd, a.offset >> PAGE_SHIFT); | ||
76 | out: | ||
77 | return error; | ||
78 | } | ||
79 | |||
80 | /* | 62 | /* |
81 | * sys_ipc() is the de-multiplexer for the SysV IPC calls.. | 63 | * sys_ipc() is the de-multiplexer for the SysV IPC calls.. |
82 | * | 64 | * |
83 | * This is really horribly ugly. | 65 | * This is really horribly ugly. |
84 | */ | 66 | */ |
85 | SYSCALL_DEFINE5(ipc, uint, call, int, first, unsigned long, second, | 67 | SYSCALL_DEFINE5(s390_ipc, uint, call, int, first, unsigned long, second, |
86 | unsigned long, third, void __user *, ptr) | 68 | unsigned long, third, void __user *, ptr) |
87 | { | 69 | { |
88 | struct ipc_kludge tmp; | 70 | struct ipc_kludge tmp; |
@@ -149,17 +131,6 @@ SYSCALL_DEFINE5(ipc, uint, call, int, first, unsigned long, second, | |||
149 | } | 131 | } |
150 | 132 | ||
151 | #ifdef CONFIG_64BIT | 133 | #ifdef CONFIG_64BIT |
152 | SYSCALL_DEFINE1(s390_newuname, struct new_utsname __user *, name) | ||
153 | { | ||
154 | int ret = sys_newuname(name); | ||
155 | |||
156 | if (personality(current->personality) == PER_LINUX32 && !ret) { | ||
157 | ret = copy_to_user(name->machine, "s390\0\0\0\0", 8); | ||
158 | if (ret) ret = -EFAULT; | ||
159 | } | ||
160 | return ret; | ||
161 | } | ||
162 | |||
163 | SYSCALL_DEFINE1(s390_personality, unsigned long, personality) | 134 | SYSCALL_DEFINE1(s390_personality, unsigned long, personality) |
164 | { | 135 | { |
165 | int ret; | 136 | int ret; |
diff --git a/arch/s390/kernel/syscalls.S b/arch/s390/kernel/syscalls.S index 30eca070d426..201ce6bed34e 100644 --- a/arch/s390/kernel/syscalls.S +++ b/arch/s390/kernel/syscalls.S | |||
@@ -98,7 +98,7 @@ SYSCALL(sys_uselib,sys_uselib,sys32_uselib_wrapper) | |||
98 | SYSCALL(sys_swapon,sys_swapon,sys32_swapon_wrapper) | 98 | SYSCALL(sys_swapon,sys_swapon,sys32_swapon_wrapper) |
99 | SYSCALL(sys_reboot,sys_reboot,sys32_reboot_wrapper) | 99 | SYSCALL(sys_reboot,sys_reboot,sys32_reboot_wrapper) |
100 | SYSCALL(sys_ni_syscall,sys_ni_syscall,old32_readdir_wrapper) /* old readdir syscall */ | 100 | SYSCALL(sys_ni_syscall,sys_ni_syscall,old32_readdir_wrapper) /* old readdir syscall */ |
101 | SYSCALL(sys_s390_old_mmap,sys_s390_old_mmap,old32_mmap_wrapper) /* 90 */ | 101 | SYSCALL(sys_old_mmap,sys_old_mmap,old32_mmap_wrapper) /* 90 */ |
102 | SYSCALL(sys_munmap,sys_munmap,sys32_munmap_wrapper) | 102 | SYSCALL(sys_munmap,sys_munmap,sys32_munmap_wrapper) |
103 | SYSCALL(sys_truncate,sys_truncate,sys32_truncate_wrapper) | 103 | SYSCALL(sys_truncate,sys_truncate,sys32_truncate_wrapper) |
104 | SYSCALL(sys_ftruncate,sys_ftruncate,sys32_ftruncate_wrapper) | 104 | SYSCALL(sys_ftruncate,sys_ftruncate,sys32_ftruncate_wrapper) |
@@ -125,12 +125,12 @@ NI_SYSCALL /* vm86old for i386 */ | |||
125 | SYSCALL(sys_wait4,sys_wait4,compat_sys_wait4_wrapper) | 125 | SYSCALL(sys_wait4,sys_wait4,compat_sys_wait4_wrapper) |
126 | SYSCALL(sys_swapoff,sys_swapoff,sys32_swapoff_wrapper) /* 115 */ | 126 | SYSCALL(sys_swapoff,sys_swapoff,sys32_swapoff_wrapper) /* 115 */ |
127 | SYSCALL(sys_sysinfo,sys_sysinfo,compat_sys_sysinfo_wrapper) | 127 | SYSCALL(sys_sysinfo,sys_sysinfo,compat_sys_sysinfo_wrapper) |
128 | SYSCALL(sys_ipc,sys_ipc,sys32_ipc_wrapper) | 128 | SYSCALL(sys_s390_ipc,sys_s390_ipc,sys32_ipc_wrapper) |
129 | SYSCALL(sys_fsync,sys_fsync,sys32_fsync_wrapper) | 129 | SYSCALL(sys_fsync,sys_fsync,sys32_fsync_wrapper) |
130 | SYSCALL(sys_sigreturn,sys_sigreturn,sys32_sigreturn) | 130 | SYSCALL(sys_sigreturn,sys_sigreturn,sys32_sigreturn) |
131 | SYSCALL(sys_clone,sys_clone,sys_clone_wrapper) /* 120 */ | 131 | SYSCALL(sys_clone,sys_clone,sys_clone_wrapper) /* 120 */ |
132 | SYSCALL(sys_setdomainname,sys_setdomainname,sys32_setdomainname_wrapper) | 132 | SYSCALL(sys_setdomainname,sys_setdomainname,sys32_setdomainname_wrapper) |
133 | SYSCALL(sys_newuname,sys_s390_newuname,sys32_newuname_wrapper) | 133 | SYSCALL(sys_newuname,sys_newuname,sys32_newuname_wrapper) |
134 | NI_SYSCALL /* modify_ldt for i386 */ | 134 | NI_SYSCALL /* modify_ldt for i386 */ |
135 | SYSCALL(sys_adjtimex,sys_adjtimex,compat_sys_adjtimex_wrapper) | 135 | SYSCALL(sys_adjtimex,sys_adjtimex,compat_sys_adjtimex_wrapper) |
136 | SYSCALL(sys_mprotect,sys_mprotect,sys32_mprotect_wrapper) /* 125 */ | 136 | SYSCALL(sys_mprotect,sys_mprotect,sys32_mprotect_wrapper) /* 125 */ |
diff --git a/arch/s390/kernel/time.c b/arch/s390/kernel/time.c index a8f93f1705ad..aa2483e460f3 100644 --- a/arch/s390/kernel/time.c +++ b/arch/s390/kernel/time.c | |||
@@ -73,15 +73,15 @@ unsigned long long monotonic_clock(void) | |||
73 | } | 73 | } |
74 | EXPORT_SYMBOL(monotonic_clock); | 74 | EXPORT_SYMBOL(monotonic_clock); |
75 | 75 | ||
76 | void tod_to_timeval(__u64 todval, struct timespec *xtime) | 76 | void tod_to_timeval(__u64 todval, struct timespec *xt) |
77 | { | 77 | { |
78 | unsigned long long sec; | 78 | unsigned long long sec; |
79 | 79 | ||
80 | sec = todval >> 12; | 80 | sec = todval >> 12; |
81 | do_div(sec, 1000000); | 81 | do_div(sec, 1000000); |
82 | xtime->tv_sec = sec; | 82 | xt->tv_sec = sec; |
83 | todval -= (sec * 1000000) << 12; | 83 | todval -= (sec * 1000000) << 12; |
84 | xtime->tv_nsec = ((todval * 1000) >> 12); | 84 | xt->tv_nsec = ((todval * 1000) >> 12); |
85 | } | 85 | } |
86 | EXPORT_SYMBOL(tod_to_timeval); | 86 | EXPORT_SYMBOL(tod_to_timeval); |
87 | 87 | ||
@@ -216,8 +216,8 @@ void update_vsyscall(struct timespec *wall_time, struct clocksource *clock, | |||
216 | ++vdso_data->tb_update_count; | 216 | ++vdso_data->tb_update_count; |
217 | smp_wmb(); | 217 | smp_wmb(); |
218 | vdso_data->xtime_tod_stamp = clock->cycle_last; | 218 | vdso_data->xtime_tod_stamp = clock->cycle_last; |
219 | vdso_data->xtime_clock_sec = xtime.tv_sec; | 219 | vdso_data->xtime_clock_sec = wall_time->tv_sec; |
220 | vdso_data->xtime_clock_nsec = xtime.tv_nsec; | 220 | vdso_data->xtime_clock_nsec = wall_time->tv_nsec; |
221 | vdso_data->wtom_clock_sec = wall_to_monotonic.tv_sec; | 221 | vdso_data->wtom_clock_sec = wall_to_monotonic.tv_sec; |
222 | vdso_data->wtom_clock_nsec = wall_to_monotonic.tv_nsec; | 222 | vdso_data->wtom_clock_nsec = wall_to_monotonic.tv_nsec; |
223 | smp_wmb(); | 223 | smp_wmb(); |
@@ -1116,14 +1116,18 @@ static struct sys_device etr_port1_dev = { | |||
1116 | /* | 1116 | /* |
1117 | * ETR class attributes | 1117 | * ETR class attributes |
1118 | */ | 1118 | */ |
1119 | static ssize_t etr_stepping_port_show(struct sysdev_class *class, char *buf) | 1119 | static ssize_t etr_stepping_port_show(struct sysdev_class *class, |
1120 | struct sysdev_class_attribute *attr, | ||
1121 | char *buf) | ||
1120 | { | 1122 | { |
1121 | return sprintf(buf, "%i\n", etr_port0.esw.p); | 1123 | return sprintf(buf, "%i\n", etr_port0.esw.p); |
1122 | } | 1124 | } |
1123 | 1125 | ||
1124 | static SYSDEV_CLASS_ATTR(stepping_port, 0400, etr_stepping_port_show, NULL); | 1126 | static SYSDEV_CLASS_ATTR(stepping_port, 0400, etr_stepping_port_show, NULL); |
1125 | 1127 | ||
1126 | static ssize_t etr_stepping_mode_show(struct sysdev_class *class, char *buf) | 1128 | static ssize_t etr_stepping_mode_show(struct sysdev_class *class, |
1129 | struct sysdev_class_attribute *attr, | ||
1130 | char *buf) | ||
1127 | { | 1131 | { |
1128 | char *mode_str; | 1132 | char *mode_str; |
1129 | 1133 | ||
@@ -1584,7 +1588,9 @@ static struct sysdev_class stp_sysclass = { | |||
1584 | .name = "stp", | 1588 | .name = "stp", |
1585 | }; | 1589 | }; |
1586 | 1590 | ||
1587 | static ssize_t stp_ctn_id_show(struct sysdev_class *class, char *buf) | 1591 | static ssize_t stp_ctn_id_show(struct sysdev_class *class, |
1592 | struct sysdev_class_attribute *attr, | ||
1593 | char *buf) | ||
1588 | { | 1594 | { |
1589 | if (!stp_online) | 1595 | if (!stp_online) |
1590 | return -ENODATA; | 1596 | return -ENODATA; |
@@ -1594,7 +1600,9 @@ static ssize_t stp_ctn_id_show(struct sysdev_class *class, char *buf) | |||
1594 | 1600 | ||
1595 | static SYSDEV_CLASS_ATTR(ctn_id, 0400, stp_ctn_id_show, NULL); | 1601 | static SYSDEV_CLASS_ATTR(ctn_id, 0400, stp_ctn_id_show, NULL); |
1596 | 1602 | ||
1597 | static ssize_t stp_ctn_type_show(struct sysdev_class *class, char *buf) | 1603 | static ssize_t stp_ctn_type_show(struct sysdev_class *class, |
1604 | struct sysdev_class_attribute *attr, | ||
1605 | char *buf) | ||
1598 | { | 1606 | { |
1599 | if (!stp_online) | 1607 | if (!stp_online) |
1600 | return -ENODATA; | 1608 | return -ENODATA; |
@@ -1603,7 +1611,9 @@ static ssize_t stp_ctn_type_show(struct sysdev_class *class, char *buf) | |||
1603 | 1611 | ||
1604 | static SYSDEV_CLASS_ATTR(ctn_type, 0400, stp_ctn_type_show, NULL); | 1612 | static SYSDEV_CLASS_ATTR(ctn_type, 0400, stp_ctn_type_show, NULL); |
1605 | 1613 | ||
1606 | static ssize_t stp_dst_offset_show(struct sysdev_class *class, char *buf) | 1614 | static ssize_t stp_dst_offset_show(struct sysdev_class *class, |
1615 | struct sysdev_class_attribute *attr, | ||
1616 | char *buf) | ||
1607 | { | 1617 | { |
1608 | if (!stp_online || !(stp_info.vbits & 0x2000)) | 1618 | if (!stp_online || !(stp_info.vbits & 0x2000)) |
1609 | return -ENODATA; | 1619 | return -ENODATA; |
@@ -1612,7 +1622,9 @@ static ssize_t stp_dst_offset_show(struct sysdev_class *class, char *buf) | |||
1612 | 1622 | ||
1613 | static SYSDEV_CLASS_ATTR(dst_offset, 0400, stp_dst_offset_show, NULL); | 1623 | static SYSDEV_CLASS_ATTR(dst_offset, 0400, stp_dst_offset_show, NULL); |
1614 | 1624 | ||
1615 | static ssize_t stp_leap_seconds_show(struct sysdev_class *class, char *buf) | 1625 | static ssize_t stp_leap_seconds_show(struct sysdev_class *class, |
1626 | struct sysdev_class_attribute *attr, | ||
1627 | char *buf) | ||
1616 | { | 1628 | { |
1617 | if (!stp_online || !(stp_info.vbits & 0x8000)) | 1629 | if (!stp_online || !(stp_info.vbits & 0x8000)) |
1618 | return -ENODATA; | 1630 | return -ENODATA; |
@@ -1621,7 +1633,9 @@ static ssize_t stp_leap_seconds_show(struct sysdev_class *class, char *buf) | |||
1621 | 1633 | ||
1622 | static SYSDEV_CLASS_ATTR(leap_seconds, 0400, stp_leap_seconds_show, NULL); | 1634 | static SYSDEV_CLASS_ATTR(leap_seconds, 0400, stp_leap_seconds_show, NULL); |
1623 | 1635 | ||
1624 | static ssize_t stp_stratum_show(struct sysdev_class *class, char *buf) | 1636 | static ssize_t stp_stratum_show(struct sysdev_class *class, |
1637 | struct sysdev_class_attribute *attr, | ||
1638 | char *buf) | ||
1625 | { | 1639 | { |
1626 | if (!stp_online) | 1640 | if (!stp_online) |
1627 | return -ENODATA; | 1641 | return -ENODATA; |
@@ -1630,7 +1644,9 @@ static ssize_t stp_stratum_show(struct sysdev_class *class, char *buf) | |||
1630 | 1644 | ||
1631 | static SYSDEV_CLASS_ATTR(stratum, 0400, stp_stratum_show, NULL); | 1645 | static SYSDEV_CLASS_ATTR(stratum, 0400, stp_stratum_show, NULL); |
1632 | 1646 | ||
1633 | static ssize_t stp_time_offset_show(struct sysdev_class *class, char *buf) | 1647 | static ssize_t stp_time_offset_show(struct sysdev_class *class, |
1648 | struct sysdev_class_attribute *attr, | ||
1649 | char *buf) | ||
1634 | { | 1650 | { |
1635 | if (!stp_online || !(stp_info.vbits & 0x0800)) | 1651 | if (!stp_online || !(stp_info.vbits & 0x0800)) |
1636 | return -ENODATA; | 1652 | return -ENODATA; |
@@ -1639,7 +1655,9 @@ static ssize_t stp_time_offset_show(struct sysdev_class *class, char *buf) | |||
1639 | 1655 | ||
1640 | static SYSDEV_CLASS_ATTR(time_offset, 0400, stp_time_offset_show, NULL); | 1656 | static SYSDEV_CLASS_ATTR(time_offset, 0400, stp_time_offset_show, NULL); |
1641 | 1657 | ||
1642 | static ssize_t stp_time_zone_offset_show(struct sysdev_class *class, char *buf) | 1658 | static ssize_t stp_time_zone_offset_show(struct sysdev_class *class, |
1659 | struct sysdev_class_attribute *attr, | ||
1660 | char *buf) | ||
1643 | { | 1661 | { |
1644 | if (!stp_online || !(stp_info.vbits & 0x4000)) | 1662 | if (!stp_online || !(stp_info.vbits & 0x4000)) |
1645 | return -ENODATA; | 1663 | return -ENODATA; |
@@ -1649,7 +1667,9 @@ static ssize_t stp_time_zone_offset_show(struct sysdev_class *class, char *buf) | |||
1649 | static SYSDEV_CLASS_ATTR(time_zone_offset, 0400, | 1667 | static SYSDEV_CLASS_ATTR(time_zone_offset, 0400, |
1650 | stp_time_zone_offset_show, NULL); | 1668 | stp_time_zone_offset_show, NULL); |
1651 | 1669 | ||
1652 | static ssize_t stp_timing_mode_show(struct sysdev_class *class, char *buf) | 1670 | static ssize_t stp_timing_mode_show(struct sysdev_class *class, |
1671 | struct sysdev_class_attribute *attr, | ||
1672 | char *buf) | ||
1653 | { | 1673 | { |
1654 | if (!stp_online) | 1674 | if (!stp_online) |
1655 | return -ENODATA; | 1675 | return -ENODATA; |
@@ -1658,7 +1678,9 @@ static ssize_t stp_timing_mode_show(struct sysdev_class *class, char *buf) | |||
1658 | 1678 | ||
1659 | static SYSDEV_CLASS_ATTR(timing_mode, 0400, stp_timing_mode_show, NULL); | 1679 | static SYSDEV_CLASS_ATTR(timing_mode, 0400, stp_timing_mode_show, NULL); |
1660 | 1680 | ||
1661 | static ssize_t stp_timing_state_show(struct sysdev_class *class, char *buf) | 1681 | static ssize_t stp_timing_state_show(struct sysdev_class *class, |
1682 | struct sysdev_class_attribute *attr, | ||
1683 | char *buf) | ||
1662 | { | 1684 | { |
1663 | if (!stp_online) | 1685 | if (!stp_online) |
1664 | return -ENODATA; | 1686 | return -ENODATA; |
@@ -1667,12 +1689,15 @@ static ssize_t stp_timing_state_show(struct sysdev_class *class, char *buf) | |||
1667 | 1689 | ||
1668 | static SYSDEV_CLASS_ATTR(timing_state, 0400, stp_timing_state_show, NULL); | 1690 | static SYSDEV_CLASS_ATTR(timing_state, 0400, stp_timing_state_show, NULL); |
1669 | 1691 | ||
1670 | static ssize_t stp_online_show(struct sysdev_class *class, char *buf) | 1692 | static ssize_t stp_online_show(struct sysdev_class *class, |
1693 | struct sysdev_class_attribute *attr, | ||
1694 | char *buf) | ||
1671 | { | 1695 | { |
1672 | return sprintf(buf, "%i\n", stp_online); | 1696 | return sprintf(buf, "%i\n", stp_online); |
1673 | } | 1697 | } |
1674 | 1698 | ||
1675 | static ssize_t stp_online_store(struct sysdev_class *class, | 1699 | static ssize_t stp_online_store(struct sysdev_class *class, |
1700 | struct sysdev_class_attribute *attr, | ||
1676 | const char *buf, size_t count) | 1701 | const char *buf, size_t count) |
1677 | { | 1702 | { |
1678 | unsigned int value; | 1703 | unsigned int value; |
diff --git a/arch/s390/lib/Makefile b/arch/s390/lib/Makefile index cd54a1c352af..761ab8b56afc 100644 --- a/arch/s390/lib/Makefile +++ b/arch/s390/lib/Makefile | |||
@@ -2,7 +2,8 @@ | |||
2 | # Makefile for s390-specific library files.. | 2 | # Makefile for s390-specific library files.. |
3 | # | 3 | # |
4 | 4 | ||
5 | lib-y += delay.o string.o uaccess_std.o uaccess_pt.o usercopy.o | 5 | lib-y += delay.o string.o uaccess_std.o uaccess_pt.o |
6 | obj-y += usercopy.o | ||
6 | obj-$(CONFIG_32BIT) += div64.o qrnnd.o ucmpdi2.o | 7 | obj-$(CONFIG_32BIT) += div64.o qrnnd.o ucmpdi2.o |
7 | lib-$(CONFIG_64BIT) += uaccess_mvcos.o | 8 | lib-$(CONFIG_64BIT) += uaccess_mvcos.o |
8 | lib-$(CONFIG_SMP) += spinlock.o | 9 | lib-$(CONFIG_SMP) += spinlock.o |
diff --git a/arch/s390/mm/cmm.c b/arch/s390/mm/cmm.c index 76a3637b88e0..f16bd04e39e9 100644 --- a/arch/s390/mm/cmm.c +++ b/arch/s390/mm/cmm.c | |||
@@ -374,7 +374,7 @@ static struct ctl_table cmm_dir_table[] = { | |||
374 | #ifdef CONFIG_CMM_IUCV | 374 | #ifdef CONFIG_CMM_IUCV |
375 | #define SMSG_PREFIX "CMM" | 375 | #define SMSG_PREFIX "CMM" |
376 | static void | 376 | static void |
377 | cmm_smsg_target(char *from, char *msg) | 377 | cmm_smsg_target(const char *from, char *msg) |
378 | { | 378 | { |
379 | long nr, seconds; | 379 | long nr, seconds; |
380 | 380 | ||
diff --git a/arch/score/include/asm/ptrace.h b/arch/score/include/asm/ptrace.h index d40e691f23e2..e89dc9b1ef49 100644 --- a/arch/score/include/asm/ptrace.h +++ b/arch/score/include/asm/ptrace.h | |||
@@ -90,8 +90,7 @@ extern int read_tsk_short(struct task_struct *, unsigned long, | |||
90 | unsigned short *); | 90 | unsigned short *); |
91 | 91 | ||
92 | #define arch_has_single_step() (1) | 92 | #define arch_has_single_step() (1) |
93 | extern void user_enable_single_step(struct task_struct *); | 93 | |
94 | extern void user_disable_single_step(struct task_struct *); | ||
95 | #endif /* __KERNEL__ */ | 94 | #endif /* __KERNEL__ */ |
96 | 95 | ||
97 | #endif /* _ASM_SCORE_PTRACE_H */ | 96 | #endif /* _ASM_SCORE_PTRACE_H */ |
diff --git a/arch/sh/Kconfig b/arch/sh/Kconfig index 05cef5061293..8d90564c2bcf 100644 --- a/arch/sh/Kconfig +++ b/arch/sh/Kconfig | |||
@@ -183,6 +183,9 @@ config DMA_COHERENT | |||
183 | config DMA_NONCOHERENT | 183 | config DMA_NONCOHERENT |
184 | def_bool !DMA_COHERENT | 184 | def_bool !DMA_COHERENT |
185 | 185 | ||
186 | config NEED_DMA_MAP_STATE | ||
187 | def_bool DMA_NONCOHERENT | ||
188 | |||
186 | source "init/Kconfig" | 189 | source "init/Kconfig" |
187 | 190 | ||
188 | source "kernel/Kconfig.freezer" | 191 | source "kernel/Kconfig.freezer" |
diff --git a/arch/sh/include/asm/pci.h b/arch/sh/include/asm/pci.h index 1042f7f0a48b..8bd952fcf3ba 100644 --- a/arch/sh/include/asm/pci.h +++ b/arch/sh/include/asm/pci.h | |||
@@ -83,25 +83,6 @@ static inline void pcibios_penalize_isa_irq(int irq, int active) | |||
83 | */ | 83 | */ |
84 | #define PCI_DMA_BUS_IS_PHYS (dma_ops->is_phys) | 84 | #define PCI_DMA_BUS_IS_PHYS (dma_ops->is_phys) |
85 | 85 | ||
86 | /* pci_unmap_{single,page} being a nop depends upon the | ||
87 | * configuration. | ||
88 | */ | ||
89 | #ifdef CONFIG_DMA_NONCOHERENT | ||
90 | #define DECLARE_PCI_UNMAP_ADDR(ADDR_NAME) dma_addr_t ADDR_NAME; | ||
91 | #define DECLARE_PCI_UNMAP_LEN(LEN_NAME) __u32 LEN_NAME; | ||
92 | #define pci_unmap_addr(PTR, ADDR_NAME) ((PTR)->ADDR_NAME) | ||
93 | #define pci_unmap_addr_set(PTR, ADDR_NAME, VAL) (((PTR)->ADDR_NAME) = (VAL)) | ||
94 | #define pci_unmap_len(PTR, LEN_NAME) ((PTR)->LEN_NAME) | ||
95 | #define pci_unmap_len_set(PTR, LEN_NAME, VAL) (((PTR)->LEN_NAME) = (VAL)) | ||
96 | #else | ||
97 | #define DECLARE_PCI_UNMAP_ADDR(ADDR_NAME) | ||
98 | #define DECLARE_PCI_UNMAP_LEN(LEN_NAME) | ||
99 | #define pci_unmap_addr(PTR, ADDR_NAME) (0) | ||
100 | #define pci_unmap_addr_set(PTR, ADDR_NAME, VAL) do { } while (0) | ||
101 | #define pci_unmap_len(PTR, LEN_NAME) (0) | ||
102 | #define pci_unmap_len_set(PTR, LEN_NAME, VAL) do { } while (0) | ||
103 | #endif | ||
104 | |||
105 | #ifdef CONFIG_PCI | 86 | #ifdef CONFIG_PCI |
106 | /* | 87 | /* |
107 | * None of the SH PCI controllers support MWI, it is always treated as a | 88 | * None of the SH PCI controllers support MWI, it is always treated as a |
diff --git a/arch/sh/include/asm/ptrace.h b/arch/sh/include/asm/ptrace.h index e11b14ea2c43..2168fde25611 100644 --- a/arch/sh/include/asm/ptrace.h +++ b/arch/sh/include/asm/ptrace.h | |||
@@ -123,8 +123,6 @@ extern void show_regs(struct pt_regs *); | |||
123 | struct task_struct; | 123 | struct task_struct; |
124 | 124 | ||
125 | #define arch_has_single_step() (1) | 125 | #define arch_has_single_step() (1) |
126 | extern void user_enable_single_step(struct task_struct *); | ||
127 | extern void user_disable_single_step(struct task_struct *); | ||
128 | 126 | ||
129 | struct perf_event; | 127 | struct perf_event; |
130 | struct perf_sample_data; | 128 | struct perf_sample_data; |
diff --git a/arch/sh/include/asm/syscalls.h b/arch/sh/include/asm/syscalls.h index c1e2b8deb837..507725af2e54 100644 --- a/arch/sh/include/asm/syscalls.h +++ b/arch/sh/include/asm/syscalls.h | |||
@@ -3,17 +3,12 @@ | |||
3 | 3 | ||
4 | #ifdef __KERNEL__ | 4 | #ifdef __KERNEL__ |
5 | 5 | ||
6 | struct old_utsname; | ||
7 | |||
8 | asmlinkage int old_mmap(unsigned long addr, unsigned long len, | 6 | asmlinkage int old_mmap(unsigned long addr, unsigned long len, |
9 | unsigned long prot, unsigned long flags, | 7 | unsigned long prot, unsigned long flags, |
10 | int fd, unsigned long off); | 8 | int fd, unsigned long off); |
11 | asmlinkage long sys_mmap2(unsigned long addr, unsigned long len, | 9 | asmlinkage long sys_mmap2(unsigned long addr, unsigned long len, |
12 | unsigned long prot, unsigned long flags, | 10 | unsigned long prot, unsigned long flags, |
13 | unsigned long fd, unsigned long pgoff); | 11 | unsigned long fd, unsigned long pgoff); |
14 | asmlinkage int sys_ipc(uint call, int first, int second, | ||
15 | int third, void __user *ptr, long fifth); | ||
16 | asmlinkage int sys_uname(struct old_utsname __user *name); | ||
17 | 12 | ||
18 | #ifdef CONFIG_SUPERH32 | 13 | #ifdef CONFIG_SUPERH32 |
19 | # include "syscalls_32.h" | 14 | # include "syscalls_32.h" |
diff --git a/arch/sh/include/asm/unistd_32.h b/arch/sh/include/asm/unistd_32.h index 365744b05269..0e7f0fc8f086 100644 --- a/arch/sh/include/asm/unistd_32.h +++ b/arch/sh/include/asm/unistd_32.h | |||
@@ -358,6 +358,7 @@ | |||
358 | #define __ARCH_WANT_STAT64 | 358 | #define __ARCH_WANT_STAT64 |
359 | #define __ARCH_WANT_SYS_ALARM | 359 | #define __ARCH_WANT_SYS_ALARM |
360 | #define __ARCH_WANT_SYS_GETHOSTNAME | 360 | #define __ARCH_WANT_SYS_GETHOSTNAME |
361 | #define __ARCH_WANT_SYS_IPC | ||
361 | #define __ARCH_WANT_SYS_PAUSE | 362 | #define __ARCH_WANT_SYS_PAUSE |
362 | #define __ARCH_WANT_SYS_SGETMASK | 363 | #define __ARCH_WANT_SYS_SGETMASK |
363 | #define __ARCH_WANT_SYS_SIGNAL | 364 | #define __ARCH_WANT_SYS_SIGNAL |
@@ -370,6 +371,7 @@ | |||
370 | #define __ARCH_WANT_SYS_LLSEEK | 371 | #define __ARCH_WANT_SYS_LLSEEK |
371 | #define __ARCH_WANT_SYS_NICE | 372 | #define __ARCH_WANT_SYS_NICE |
372 | #define __ARCH_WANT_SYS_OLD_GETRLIMIT | 373 | #define __ARCH_WANT_SYS_OLD_GETRLIMIT |
374 | #define __ARCH_WANT_SYS_OLD_UNAME | ||
373 | #define __ARCH_WANT_SYS_OLDUMOUNT | 375 | #define __ARCH_WANT_SYS_OLDUMOUNT |
374 | #define __ARCH_WANT_SYS_SIGPENDING | 376 | #define __ARCH_WANT_SYS_SIGPENDING |
375 | #define __ARCH_WANT_SYS_SIGPROCMASK | 377 | #define __ARCH_WANT_SYS_SIGPROCMASK |
diff --git a/arch/sh/include/asm/unistd_64.h b/arch/sh/include/asm/unistd_64.h index 25de158aac3a..0580c33a1e04 100644 --- a/arch/sh/include/asm/unistd_64.h +++ b/arch/sh/include/asm/unistd_64.h | |||
@@ -398,6 +398,7 @@ | |||
398 | #define __ARCH_WANT_STAT64 | 398 | #define __ARCH_WANT_STAT64 |
399 | #define __ARCH_WANT_SYS_ALARM | 399 | #define __ARCH_WANT_SYS_ALARM |
400 | #define __ARCH_WANT_SYS_GETHOSTNAME | 400 | #define __ARCH_WANT_SYS_GETHOSTNAME |
401 | #define __ARCH_WANT_SYS_IPC | ||
401 | #define __ARCH_WANT_SYS_PAUSE | 402 | #define __ARCH_WANT_SYS_PAUSE |
402 | #define __ARCH_WANT_SYS_SGETMASK | 403 | #define __ARCH_WANT_SYS_SGETMASK |
403 | #define __ARCH_WANT_SYS_SIGNAL | 404 | #define __ARCH_WANT_SYS_SIGNAL |
@@ -410,6 +411,7 @@ | |||
410 | #define __ARCH_WANT_SYS_LLSEEK | 411 | #define __ARCH_WANT_SYS_LLSEEK |
411 | #define __ARCH_WANT_SYS_NICE | 412 | #define __ARCH_WANT_SYS_NICE |
412 | #define __ARCH_WANT_SYS_OLD_GETRLIMIT | 413 | #define __ARCH_WANT_SYS_OLD_GETRLIMIT |
414 | #define __ARCH_WANT_SYS_OLD_UNAME | ||
413 | #define __ARCH_WANT_SYS_OLDUMOUNT | 415 | #define __ARCH_WANT_SYS_OLDUMOUNT |
414 | #define __ARCH_WANT_SYS_SIGPENDING | 416 | #define __ARCH_WANT_SYS_SIGPENDING |
415 | #define __ARCH_WANT_SYS_SIGPROCMASK | 417 | #define __ARCH_WANT_SYS_SIGPROCMASK |
diff --git a/arch/sh/kernel/cpu/sh4/sq.c b/arch/sh/kernel/cpu/sh4/sq.c index fc065f9da6e5..14726eef1ce0 100644 --- a/arch/sh/kernel/cpu/sh4/sq.c +++ b/arch/sh/kernel/cpu/sh4/sq.c | |||
@@ -326,7 +326,7 @@ static struct attribute *sq_sysfs_attrs[] = { | |||
326 | NULL, | 326 | NULL, |
327 | }; | 327 | }; |
328 | 328 | ||
329 | static struct sysfs_ops sq_sysfs_ops = { | 329 | static const struct sysfs_ops sq_sysfs_ops = { |
330 | .show = sq_sysfs_show, | 330 | .show = sq_sysfs_show, |
331 | .store = sq_sysfs_store, | 331 | .store = sq_sysfs_store, |
332 | }; | 332 | }; |
diff --git a/arch/sh/kernel/sys_sh.c b/arch/sh/kernel/sys_sh.c index 71399cde03b5..81f58371613d 100644 --- a/arch/sh/kernel/sys_sh.c +++ b/arch/sh/kernel/sys_sh.c | |||
@@ -53,110 +53,6 @@ asmlinkage long sys_mmap2(unsigned long addr, unsigned long len, | |||
53 | return sys_mmap_pgoff(addr, len, prot, flags, fd, pgoff); | 53 | return sys_mmap_pgoff(addr, len, prot, flags, fd, pgoff); |
54 | } | 54 | } |
55 | 55 | ||
56 | /* | ||
57 | * sys_ipc() is the de-multiplexer for the SysV IPC calls.. | ||
58 | * | ||
59 | * This is really horribly ugly. | ||
60 | */ | ||
61 | asmlinkage int sys_ipc(uint call, int first, int second, | ||
62 | int third, void __user *ptr, long fifth) | ||
63 | { | ||
64 | int version, ret; | ||
65 | |||
66 | version = call >> 16; /* hack for backward compatibility */ | ||
67 | call &= 0xffff; | ||
68 | |||
69 | if (call <= SEMTIMEDOP) | ||
70 | switch (call) { | ||
71 | case SEMOP: | ||
72 | return sys_semtimedop(first, | ||
73 | (struct sembuf __user *)ptr, | ||
74 | second, NULL); | ||
75 | case SEMTIMEDOP: | ||
76 | return sys_semtimedop(first, | ||
77 | (struct sembuf __user *)ptr, second, | ||
78 | (const struct timespec __user *)fifth); | ||
79 | case SEMGET: | ||
80 | return sys_semget (first, second, third); | ||
81 | case SEMCTL: { | ||
82 | union semun fourth; | ||
83 | if (!ptr) | ||
84 | return -EINVAL; | ||
85 | if (get_user(fourth.__pad, (void __user * __user *) ptr)) | ||
86 | return -EFAULT; | ||
87 | return sys_semctl (first, second, third, fourth); | ||
88 | } | ||
89 | default: | ||
90 | return -EINVAL; | ||
91 | } | ||
92 | |||
93 | if (call <= MSGCTL) | ||
94 | switch (call) { | ||
95 | case MSGSND: | ||
96 | return sys_msgsnd (first, (struct msgbuf __user *) ptr, | ||
97 | second, third); | ||
98 | case MSGRCV: | ||
99 | switch (version) { | ||
100 | case 0: | ||
101 | { | ||
102 | struct ipc_kludge tmp; | ||
103 | |||
104 | if (!ptr) | ||
105 | return -EINVAL; | ||
106 | |||
107 | if (copy_from_user(&tmp, | ||
108 | (struct ipc_kludge __user *) ptr, | ||
109 | sizeof (tmp))) | ||
110 | return -EFAULT; | ||
111 | |||
112 | return sys_msgrcv (first, tmp.msgp, second, | ||
113 | tmp.msgtyp, third); | ||
114 | } | ||
115 | default: | ||
116 | return sys_msgrcv (first, | ||
117 | (struct msgbuf __user *) ptr, | ||
118 | second, fifth, third); | ||
119 | } | ||
120 | case MSGGET: | ||
121 | return sys_msgget ((key_t) first, second); | ||
122 | case MSGCTL: | ||
123 | return sys_msgctl (first, second, | ||
124 | (struct msqid_ds __user *) ptr); | ||
125 | default: | ||
126 | return -EINVAL; | ||
127 | } | ||
128 | if (call <= SHMCTL) | ||
129 | switch (call) { | ||
130 | case SHMAT: | ||
131 | switch (version) { | ||
132 | default: { | ||
133 | ulong raddr; | ||
134 | ret = do_shmat (first, (char __user *) ptr, | ||
135 | second, &raddr); | ||
136 | if (ret) | ||
137 | return ret; | ||
138 | return put_user (raddr, (ulong __user *) third); | ||
139 | } | ||
140 | case 1: /* iBCS2 emulator entry point */ | ||
141 | if (!segment_eq(get_fs(), get_ds())) | ||
142 | return -EINVAL; | ||
143 | return do_shmat (first, (char __user *) ptr, | ||
144 | second, (ulong *) third); | ||
145 | } | ||
146 | case SHMDT: | ||
147 | return sys_shmdt ((char __user *)ptr); | ||
148 | case SHMGET: | ||
149 | return sys_shmget (first, second, third); | ||
150 | case SHMCTL: | ||
151 | return sys_shmctl (first, second, | ||
152 | (struct shmid_ds __user *) ptr); | ||
153 | default: | ||
154 | return -EINVAL; | ||
155 | } | ||
156 | |||
157 | return -EINVAL; | ||
158 | } | ||
159 | |||
160 | /* sys_cacheflush -- flush (part of) the processor cache. */ | 56 | /* sys_cacheflush -- flush (part of) the processor cache. */ |
161 | asmlinkage int sys_cacheflush(unsigned long addr, unsigned long len, int op) | 57 | asmlinkage int sys_cacheflush(unsigned long addr, unsigned long len, int op) |
162 | { | 58 | { |
@@ -197,14 +93,3 @@ asmlinkage int sys_cacheflush(unsigned long addr, unsigned long len, int op) | |||
197 | up_read(¤t->mm->mmap_sem); | 93 | up_read(¤t->mm->mmap_sem); |
198 | return 0; | 94 | return 0; |
199 | } | 95 | } |
200 | |||
201 | asmlinkage int sys_uname(struct old_utsname __user *name) | ||
202 | { | ||
203 | int err; | ||
204 | if (!name) | ||
205 | return -EFAULT; | ||
206 | down_read(&uts_sem); | ||
207 | err = copy_to_user(name, utsname(), sizeof(*name)); | ||
208 | up_read(&uts_sem); | ||
209 | return err?-EFAULT:0; | ||
210 | } | ||
diff --git a/arch/sparc/Kconfig b/arch/sparc/Kconfig index 4097f6a10860..6db513674050 100644 --- a/arch/sparc/Kconfig +++ b/arch/sparc/Kconfig | |||
@@ -127,6 +127,9 @@ config ZONE_DMA | |||
127 | bool | 127 | bool |
128 | default y if SPARC32 | 128 | default y if SPARC32 |
129 | 129 | ||
130 | config NEED_DMA_MAP_STATE | ||
131 | def_bool y | ||
132 | |||
130 | config GENERIC_ISA_DMA | 133 | config GENERIC_ISA_DMA |
131 | bool | 134 | bool |
132 | default y if SPARC32 | 135 | default y if SPARC32 |
diff --git a/arch/sparc/include/asm/compat.h b/arch/sparc/include/asm/compat.h index 0e706257918f..5016f76ea98a 100644 --- a/arch/sparc/include/asm/compat.h +++ b/arch/sparc/include/asm/compat.h | |||
@@ -5,7 +5,8 @@ | |||
5 | */ | 5 | */ |
6 | #include <linux/types.h> | 6 | #include <linux/types.h> |
7 | 7 | ||
8 | #define COMPAT_USER_HZ 100 | 8 | #define COMPAT_USER_HZ 100 |
9 | #define COMPAT_UTS_MACHINE "sparc\0\0" | ||
9 | 10 | ||
10 | typedef u32 compat_size_t; | 11 | typedef u32 compat_size_t; |
11 | typedef s32 compat_ssize_t; | 12 | typedef s32 compat_ssize_t; |
diff --git a/arch/sparc/include/asm/dma-mapping.h b/arch/sparc/include/asm/dma-mapping.h index 5a8c308e2b5c..4b4a0c0b0ccd 100644 --- a/arch/sparc/include/asm/dma-mapping.h +++ b/arch/sparc/include/asm/dma-mapping.h | |||
@@ -8,7 +8,6 @@ | |||
8 | #define DMA_ERROR_CODE (~(dma_addr_t)0x0) | 8 | #define DMA_ERROR_CODE (~(dma_addr_t)0x0) |
9 | 9 | ||
10 | extern int dma_supported(struct device *dev, u64 mask); | 10 | extern int dma_supported(struct device *dev, u64 mask); |
11 | extern int dma_set_mask(struct device *dev, u64 dma_mask); | ||
12 | 11 | ||
13 | #define dma_alloc_noncoherent(d, s, h, f) dma_alloc_coherent(d, s, h, f) | 12 | #define dma_alloc_noncoherent(d, s, h, f) dma_alloc_coherent(d, s, h, f) |
14 | #define dma_free_noncoherent(d, s, v, h) dma_free_coherent(d, s, v, h) | 13 | #define dma_free_noncoherent(d, s, v, h) dma_free_coherent(d, s, v, h) |
@@ -62,4 +61,17 @@ static inline int dma_get_cache_alignment(void) | |||
62 | return (1 << INTERNODE_CACHE_SHIFT); | 61 | return (1 << INTERNODE_CACHE_SHIFT); |
63 | } | 62 | } |
64 | 63 | ||
64 | static inline int dma_set_mask(struct device *dev, u64 mask) | ||
65 | { | ||
66 | #ifdef CONFIG_PCI | ||
67 | if (dev->bus == &pci_bus_type) { | ||
68 | if (!dev->dma_mask || !dma_supported(dev, mask)) | ||
69 | return -EINVAL; | ||
70 | *dev->dma_mask = mask; | ||
71 | return 0; | ||
72 | } | ||
73 | #endif | ||
74 | return -EINVAL; | ||
75 | } | ||
76 | |||
65 | #endif | 77 | #endif |
diff --git a/arch/sparc/include/asm/pci_32.h b/arch/sparc/include/asm/pci_32.h index e769f668a4b5..332ac9ab36bc 100644 --- a/arch/sparc/include/asm/pci_32.h +++ b/arch/sparc/include/asm/pci_32.h | |||
@@ -32,20 +32,6 @@ static inline void pcibios_penalize_isa_irq(int irq, int active) | |||
32 | 32 | ||
33 | struct pci_dev; | 33 | struct pci_dev; |
34 | 34 | ||
35 | /* pci_unmap_{single,page} is not a nop, thus... */ | ||
36 | #define DECLARE_PCI_UNMAP_ADDR(ADDR_NAME) \ | ||
37 | dma_addr_t ADDR_NAME; | ||
38 | #define DECLARE_PCI_UNMAP_LEN(LEN_NAME) \ | ||
39 | __u32 LEN_NAME; | ||
40 | #define pci_unmap_addr(PTR, ADDR_NAME) \ | ||
41 | ((PTR)->ADDR_NAME) | ||
42 | #define pci_unmap_addr_set(PTR, ADDR_NAME, VAL) \ | ||
43 | (((PTR)->ADDR_NAME) = (VAL)) | ||
44 | #define pci_unmap_len(PTR, LEN_NAME) \ | ||
45 | ((PTR)->LEN_NAME) | ||
46 | #define pci_unmap_len_set(PTR, LEN_NAME, VAL) \ | ||
47 | (((PTR)->LEN_NAME) = (VAL)) | ||
48 | |||
49 | #ifdef CONFIG_PCI | 35 | #ifdef CONFIG_PCI |
50 | static inline void pci_dma_burst_advice(struct pci_dev *pdev, | 36 | static inline void pci_dma_burst_advice(struct pci_dev *pdev, |
51 | enum pci_dma_burst_strategy *strat, | 37 | enum pci_dma_burst_strategy *strat, |
diff --git a/arch/sparc/include/asm/pci_64.h b/arch/sparc/include/asm/pci_64.h index b0576df6ec83..5312782f0b5e 100644 --- a/arch/sparc/include/asm/pci_64.h +++ b/arch/sparc/include/asm/pci_64.h | |||
@@ -32,20 +32,6 @@ static inline void pcibios_penalize_isa_irq(int irq, int active) | |||
32 | */ | 32 | */ |
33 | #define PCI_DMA_BUS_IS_PHYS (0) | 33 | #define PCI_DMA_BUS_IS_PHYS (0) |
34 | 34 | ||
35 | /* pci_unmap_{single,page} is not a nop, thus... */ | ||
36 | #define DECLARE_PCI_UNMAP_ADDR(ADDR_NAME) \ | ||
37 | dma_addr_t ADDR_NAME; | ||
38 | #define DECLARE_PCI_UNMAP_LEN(LEN_NAME) \ | ||
39 | __u32 LEN_NAME; | ||
40 | #define pci_unmap_addr(PTR, ADDR_NAME) \ | ||
41 | ((PTR)->ADDR_NAME) | ||
42 | #define pci_unmap_addr_set(PTR, ADDR_NAME, VAL) \ | ||
43 | (((PTR)->ADDR_NAME) = (VAL)) | ||
44 | #define pci_unmap_len(PTR, LEN_NAME) \ | ||
45 | ((PTR)->LEN_NAME) | ||
46 | #define pci_unmap_len_set(PTR, LEN_NAME, VAL) \ | ||
47 | (((PTR)->LEN_NAME) = (VAL)) | ||
48 | |||
49 | /* PCI IOMMU mapping bypass support. */ | 35 | /* PCI IOMMU mapping bypass support. */ |
50 | 36 | ||
51 | /* PCI 64-bit addressing works for all slots on all controller | 37 | /* PCI 64-bit addressing works for all slots on all controller |
diff --git a/arch/sparc/include/asm/unistd.h b/arch/sparc/include/asm/unistd.h index cb4b9bfd0d87..d0b3b01ac9d4 100644 --- a/arch/sparc/include/asm/unistd.h +++ b/arch/sparc/include/asm/unistd.h | |||
@@ -432,7 +432,9 @@ | |||
432 | #define __ARCH_WANT_SYS_SIGPENDING | 432 | #define __ARCH_WANT_SYS_SIGPENDING |
433 | #define __ARCH_WANT_SYS_SIGPROCMASK | 433 | #define __ARCH_WANT_SYS_SIGPROCMASK |
434 | #define __ARCH_WANT_SYS_RT_SIGSUSPEND | 434 | #define __ARCH_WANT_SYS_RT_SIGSUSPEND |
435 | #ifndef __32bit_syscall_numbers__ | 435 | #ifdef __32bit_syscall_numbers__ |
436 | #define __ARCH_WANT_SYS_IPC | ||
437 | #else | ||
436 | #define __ARCH_WANT_COMPAT_SYS_TIME | 438 | #define __ARCH_WANT_COMPAT_SYS_TIME |
437 | #define __ARCH_WANT_COMPAT_SYS_RT_SIGSUSPEND | 439 | #define __ARCH_WANT_COMPAT_SYS_RT_SIGSUSPEND |
438 | #endif | 440 | #endif |
diff --git a/arch/sparc/kernel/iommu.c b/arch/sparc/kernel/iommu.c index 5fad94950e76..8414549c1834 100644 --- a/arch/sparc/kernel/iommu.c +++ b/arch/sparc/kernel/iommu.c | |||
@@ -862,13 +862,3 @@ int dma_supported(struct device *dev, u64 device_mask) | |||
862 | return 0; | 862 | return 0; |
863 | } | 863 | } |
864 | EXPORT_SYMBOL(dma_supported); | 864 | EXPORT_SYMBOL(dma_supported); |
865 | |||
866 | int dma_set_mask(struct device *dev, u64 dma_mask) | ||
867 | { | ||
868 | #ifdef CONFIG_PCI | ||
869 | if (dev->bus == &pci_bus_type) | ||
870 | return pci_set_dma_mask(to_pci_dev(dev), dma_mask); | ||
871 | #endif | ||
872 | return -EINVAL; | ||
873 | } | ||
874 | EXPORT_SYMBOL(dma_set_mask); | ||
diff --git a/arch/sparc/kernel/ioport.c b/arch/sparc/kernel/ioport.c index 3c8c44f6a41c..84e5386714cd 100644 --- a/arch/sparc/kernel/ioport.c +++ b/arch/sparc/kernel/ioport.c | |||
@@ -676,17 +676,6 @@ int dma_supported(struct device *dev, u64 mask) | |||
676 | } | 676 | } |
677 | EXPORT_SYMBOL(dma_supported); | 677 | EXPORT_SYMBOL(dma_supported); |
678 | 678 | ||
679 | int dma_set_mask(struct device *dev, u64 dma_mask) | ||
680 | { | ||
681 | #ifdef CONFIG_PCI | ||
682 | if (dev->bus == &pci_bus_type) | ||
683 | return pci_set_dma_mask(to_pci_dev(dev), dma_mask); | ||
684 | #endif | ||
685 | return -EOPNOTSUPP; | ||
686 | } | ||
687 | EXPORT_SYMBOL(dma_set_mask); | ||
688 | |||
689 | |||
690 | #ifdef CONFIG_PROC_FS | 679 | #ifdef CONFIG_PROC_FS |
691 | 680 | ||
692 | static int sparc_io_proc_show(struct seq_file *m, void *v) | 681 | static int sparc_io_proc_show(struct seq_file *m, void *v) |
diff --git a/arch/sparc/kernel/sys_sparc_32.c b/arch/sparc/kernel/sys_sparc_32.c index 3a82e65d8db2..ee995b7dae7e 100644 --- a/arch/sparc/kernel/sys_sparc_32.c +++ b/arch/sparc/kernel/sys_sparc_32.c | |||
@@ -98,119 +98,6 @@ out: | |||
98 | return error; | 98 | return error; |
99 | } | 99 | } |
100 | 100 | ||
101 | /* | ||
102 | * sys_ipc() is the de-multiplexer for the SysV IPC calls.. | ||
103 | * | ||
104 | * This is really horribly ugly. | ||
105 | */ | ||
106 | |||
107 | asmlinkage int sys_ipc (uint call, int first, int second, int third, void __user *ptr, long fifth) | ||
108 | { | ||
109 | int version, err; | ||
110 | |||
111 | version = call >> 16; /* hack for backward compatibility */ | ||
112 | call &= 0xffff; | ||
113 | |||
114 | if (call <= SEMCTL) | ||
115 | switch (call) { | ||
116 | case SEMOP: | ||
117 | err = sys_semtimedop (first, (struct sembuf __user *)ptr, second, NULL); | ||
118 | goto out; | ||
119 | case SEMTIMEDOP: | ||
120 | err = sys_semtimedop (first, (struct sembuf __user *)ptr, second, (const struct timespec __user *) fifth); | ||
121 | goto out; | ||
122 | case SEMGET: | ||
123 | err = sys_semget (first, second, third); | ||
124 | goto out; | ||
125 | case SEMCTL: { | ||
126 | union semun fourth; | ||
127 | err = -EINVAL; | ||
128 | if (!ptr) | ||
129 | goto out; | ||
130 | err = -EFAULT; | ||
131 | if (get_user(fourth.__pad, | ||
132 | (void __user * __user *)ptr)) | ||
133 | goto out; | ||
134 | err = sys_semctl (first, second, third, fourth); | ||
135 | goto out; | ||
136 | } | ||
137 | default: | ||
138 | err = -ENOSYS; | ||
139 | goto out; | ||
140 | } | ||
141 | if (call <= MSGCTL) | ||
142 | switch (call) { | ||
143 | case MSGSND: | ||
144 | err = sys_msgsnd (first, (struct msgbuf __user *) ptr, | ||
145 | second, third); | ||
146 | goto out; | ||
147 | case MSGRCV: | ||
148 | switch (version) { | ||
149 | case 0: { | ||
150 | struct ipc_kludge tmp; | ||
151 | err = -EINVAL; | ||
152 | if (!ptr) | ||
153 | goto out; | ||
154 | err = -EFAULT; | ||
155 | if (copy_from_user(&tmp, (struct ipc_kludge __user *) ptr, sizeof (tmp))) | ||
156 | goto out; | ||
157 | err = sys_msgrcv (first, tmp.msgp, second, tmp.msgtyp, third); | ||
158 | goto out; | ||
159 | } | ||
160 | case 1: default: | ||
161 | err = sys_msgrcv (first, | ||
162 | (struct msgbuf __user *) ptr, | ||
163 | second, fifth, third); | ||
164 | goto out; | ||
165 | } | ||
166 | case MSGGET: | ||
167 | err = sys_msgget ((key_t) first, second); | ||
168 | goto out; | ||
169 | case MSGCTL: | ||
170 | err = sys_msgctl (first, second, (struct msqid_ds __user *) ptr); | ||
171 | goto out; | ||
172 | default: | ||
173 | err = -ENOSYS; | ||
174 | goto out; | ||
175 | } | ||
176 | if (call <= SHMCTL) | ||
177 | switch (call) { | ||
178 | case SHMAT: | ||
179 | switch (version) { | ||
180 | case 0: default: { | ||
181 | ulong raddr; | ||
182 | err = do_shmat (first, (char __user *) ptr, second, &raddr); | ||
183 | if (err) | ||
184 | goto out; | ||
185 | err = -EFAULT; | ||
186 | if (put_user (raddr, (ulong __user *) third)) | ||
187 | goto out; | ||
188 | err = 0; | ||
189 | goto out; | ||
190 | } | ||
191 | case 1: /* iBCS2 emulator entry point */ | ||
192 | err = -EINVAL; | ||
193 | goto out; | ||
194 | } | ||
195 | case SHMDT: | ||
196 | err = sys_shmdt ((char __user *)ptr); | ||
197 | goto out; | ||
198 | case SHMGET: | ||
199 | err = sys_shmget (first, second, third); | ||
200 | goto out; | ||
201 | case SHMCTL: | ||
202 | err = sys_shmctl (first, second, (struct shmid_ds __user *) ptr); | ||
203 | goto out; | ||
204 | default: | ||
205 | err = -ENOSYS; | ||
206 | goto out; | ||
207 | } | ||
208 | else | ||
209 | err = -ENOSYS; | ||
210 | out: | ||
211 | return err; | ||
212 | } | ||
213 | |||
214 | int sparc_mmap_check(unsigned long addr, unsigned long len) | 101 | int sparc_mmap_check(unsigned long addr, unsigned long len) |
215 | { | 102 | { |
216 | if (ARCH_SUN4C && | 103 | if (ARCH_SUN4C && |
diff --git a/arch/sparc/kernel/sys_sparc_64.c b/arch/sparc/kernel/sys_sparc_64.c index cb1bef6f14b7..3d435c42e6db 100644 --- a/arch/sparc/kernel/sys_sparc_64.c +++ b/arch/sparc/kernel/sys_sparc_64.c | |||
@@ -426,7 +426,7 @@ out: | |||
426 | * This is really horribly ugly. | 426 | * This is really horribly ugly. |
427 | */ | 427 | */ |
428 | 428 | ||
429 | SYSCALL_DEFINE6(ipc, unsigned int, call, int, first, unsigned long, second, | 429 | SYSCALL_DEFINE6(sparc_ipc, unsigned int, call, int, first, unsigned long, second, |
430 | unsigned long, third, void __user *, ptr, long, fifth) | 430 | unsigned long, third, void __user *, ptr, long, fifth) |
431 | { | 431 | { |
432 | long err; | 432 | long err; |
@@ -510,17 +510,6 @@ out: | |||
510 | return err; | 510 | return err; |
511 | } | 511 | } |
512 | 512 | ||
513 | SYSCALL_DEFINE1(sparc64_newuname, struct new_utsname __user *, name) | ||
514 | { | ||
515 | int ret = sys_newuname(name); | ||
516 | |||
517 | if (current->personality == PER_LINUX32 && !ret) { | ||
518 | ret = (copy_to_user(name->machine, "sparc\0\0", 8) | ||
519 | ? -EFAULT : 0); | ||
520 | } | ||
521 | return ret; | ||
522 | } | ||
523 | |||
524 | SYSCALL_DEFINE1(sparc64_personality, unsigned long, personality) | 513 | SYSCALL_DEFINE1(sparc64_personality, unsigned long, personality) |
525 | { | 514 | { |
526 | int ret; | 515 | int ret; |
diff --git a/arch/sparc/kernel/systbls.h b/arch/sparc/kernel/systbls.h index 68312fe8da74..118759cd7342 100644 --- a/arch/sparc/kernel/systbls.h +++ b/arch/sparc/kernel/systbls.h | |||
@@ -6,15 +6,12 @@ | |||
6 | #include <asm/utrap.h> | 6 | #include <asm/utrap.h> |
7 | #include <asm/signal.h> | 7 | #include <asm/signal.h> |
8 | 8 | ||
9 | struct new_utsname; | ||
10 | |||
11 | extern asmlinkage unsigned long sys_getpagesize(void); | 9 | extern asmlinkage unsigned long sys_getpagesize(void); |
12 | extern asmlinkage long sparc_pipe(struct pt_regs *regs); | 10 | extern asmlinkage long sparc_pipe(struct pt_regs *regs); |
13 | extern asmlinkage long sys_ipc(unsigned int call, int first, | 11 | extern asmlinkage long sys_sparc_ipc(unsigned int call, int first, |
14 | unsigned long second, | 12 | unsigned long second, |
15 | unsigned long third, | 13 | unsigned long third, |
16 | void __user *ptr, long fifth); | 14 | void __user *ptr, long fifth); |
17 | extern asmlinkage long sparc64_newuname(struct new_utsname __user *name); | ||
18 | extern asmlinkage long sparc64_personality(unsigned long personality); | 15 | extern asmlinkage long sparc64_personality(unsigned long personality); |
19 | extern asmlinkage long sys64_munmap(unsigned long addr, size_t len); | 16 | extern asmlinkage long sys64_munmap(unsigned long addr, size_t len); |
20 | extern asmlinkage unsigned long sys64_mremap(unsigned long addr, | 17 | extern asmlinkage unsigned long sys64_mremap(unsigned long addr, |
diff --git a/arch/sparc/kernel/systbls_64.S b/arch/sparc/kernel/systbls_64.S index 17614251fb6d..9db058dd039e 100644 --- a/arch/sparc/kernel/systbls_64.S +++ b/arch/sparc/kernel/systbls_64.S | |||
@@ -55,7 +55,7 @@ sys_call_table32: | |||
55 | /*170*/ .word sys32_lsetxattr, sys32_fsetxattr, sys_getxattr, sys_lgetxattr, compat_sys_getdents | 55 | /*170*/ .word sys32_lsetxattr, sys32_fsetxattr, sys_getxattr, sys_lgetxattr, compat_sys_getdents |
56 | .word sys_setsid, sys_fchdir, sys32_fgetxattr, sys_listxattr, sys_llistxattr | 56 | .word sys_setsid, sys_fchdir, sys32_fgetxattr, sys_listxattr, sys_llistxattr |
57 | /*180*/ .word sys32_flistxattr, sys_removexattr, sys_lremovexattr, compat_sys_sigpending, sys_ni_syscall | 57 | /*180*/ .word sys32_flistxattr, sys_removexattr, sys_lremovexattr, compat_sys_sigpending, sys_ni_syscall |
58 | .word sys32_setpgid, sys32_fremovexattr, sys32_tkill, sys32_exit_group, sys_sparc64_newuname | 58 | .word sys32_setpgid, sys32_fremovexattr, sys32_tkill, sys32_exit_group, sys_newuname |
59 | /*190*/ .word sys32_init_module, sys_sparc64_personality, sys_remap_file_pages, sys32_epoll_create, sys32_epoll_ctl | 59 | /*190*/ .word sys32_init_module, sys_sparc64_personality, sys_remap_file_pages, sys32_epoll_create, sys32_epoll_ctl |
60 | .word sys32_epoll_wait, sys32_ioprio_set, sys_getppid, sys32_sigaction, sys_sgetmask | 60 | .word sys32_epoll_wait, sys32_ioprio_set, sys_getppid, sys32_sigaction, sys_sgetmask |
61 | /*200*/ .word sys32_ssetmask, sys_sigsuspend, compat_sys_newlstat, sys_uselib, compat_sys_old_readdir | 61 | /*200*/ .word sys32_ssetmask, sys_sigsuspend, compat_sys_newlstat, sys_uselib, compat_sys_old_readdir |
@@ -130,13 +130,13 @@ sys_call_table: | |||
130 | /*170*/ .word sys_lsetxattr, sys_fsetxattr, sys_getxattr, sys_lgetxattr, sys_getdents | 130 | /*170*/ .word sys_lsetxattr, sys_fsetxattr, sys_getxattr, sys_lgetxattr, sys_getdents |
131 | .word sys_setsid, sys_fchdir, sys_fgetxattr, sys_listxattr, sys_llistxattr | 131 | .word sys_setsid, sys_fchdir, sys_fgetxattr, sys_listxattr, sys_llistxattr |
132 | /*180*/ .word sys_flistxattr, sys_removexattr, sys_lremovexattr, sys_nis_syscall, sys_ni_syscall | 132 | /*180*/ .word sys_flistxattr, sys_removexattr, sys_lremovexattr, sys_nis_syscall, sys_ni_syscall |
133 | .word sys_setpgid, sys_fremovexattr, sys_tkill, sys_exit_group, sys_sparc64_newuname | 133 | .word sys_setpgid, sys_fremovexattr, sys_tkill, sys_exit_group, sys_newuname |
134 | /*190*/ .word sys_init_module, sys_sparc64_personality, sys_remap_file_pages, sys_epoll_create, sys_epoll_ctl | 134 | /*190*/ .word sys_init_module, sys_sparc64_personality, sys_remap_file_pages, sys_epoll_create, sys_epoll_ctl |
135 | .word sys_epoll_wait, sys_ioprio_set, sys_getppid, sys_nis_syscall, sys_sgetmask | 135 | .word sys_epoll_wait, sys_ioprio_set, sys_getppid, sys_nis_syscall, sys_sgetmask |
136 | /*200*/ .word sys_ssetmask, sys_nis_syscall, sys_newlstat, sys_uselib, sys_nis_syscall | 136 | /*200*/ .word sys_ssetmask, sys_nis_syscall, sys_newlstat, sys_uselib, sys_nis_syscall |
137 | .word sys_readahead, sys_socketcall, sys_syslog, sys_lookup_dcookie, sys_fadvise64 | 137 | .word sys_readahead, sys_socketcall, sys_syslog, sys_lookup_dcookie, sys_fadvise64 |
138 | /*210*/ .word sys_fadvise64_64, sys_tgkill, sys_waitpid, sys_swapoff, sys_sysinfo | 138 | /*210*/ .word sys_fadvise64_64, sys_tgkill, sys_waitpid, sys_swapoff, sys_sysinfo |
139 | .word sys_ipc, sys_nis_syscall, sys_clone, sys_ioprio_get, sys_adjtimex | 139 | .word sys_sparc_ipc, sys_nis_syscall, sys_clone, sys_ioprio_get, sys_adjtimex |
140 | /*220*/ .word sys_nis_syscall, sys_ni_syscall, sys_delete_module, sys_ni_syscall, sys_getpgid | 140 | /*220*/ .word sys_nis_syscall, sys_ni_syscall, sys_delete_module, sys_ni_syscall, sys_getpgid |
141 | .word sys_bdflush, sys_sysfs, sys_nis_syscall, sys_setfsuid, sys_setfsgid | 141 | .word sys_bdflush, sys_sysfs, sys_nis_syscall, sys_setfsuid, sys_setfsgid |
142 | /*230*/ .word sys_select, sys_nis_syscall, sys_splice, sys_stime, sys_statfs64 | 142 | /*230*/ .word sys_select, sys_nis_syscall, sys_splice, sys_stime, sys_statfs64 |
diff --git a/arch/um/include/asm/dma-mapping.h b/arch/um/include/asm/dma-mapping.h index 378de4bbf49f..b948c14a7867 100644 --- a/arch/um/include/asm/dma-mapping.h +++ b/arch/um/include/asm/dma-mapping.h | |||
@@ -104,14 +104,6 @@ dma_get_cache_alignment(void) | |||
104 | } | 104 | } |
105 | 105 | ||
106 | static inline void | 106 | static inline void |
107 | dma_sync_single_range(struct device *dev, dma_addr_t dma_handle, | ||
108 | unsigned long offset, size_t size, | ||
109 | enum dma_data_direction direction) | ||
110 | { | ||
111 | BUG(); | ||
112 | } | ||
113 | |||
114 | static inline void | ||
115 | dma_cache_sync(struct device *dev, void *vaddr, size_t size, | 107 | dma_cache_sync(struct device *dev, void *vaddr, size_t size, |
116 | enum dma_data_direction direction) | 108 | enum dma_data_direction direction) |
117 | { | 109 | { |
diff --git a/arch/um/include/asm/ptrace-generic.h b/arch/um/include/asm/ptrace-generic.h index 6c8899013c92..2cd899f75a3c 100644 --- a/arch/um/include/asm/ptrace-generic.h +++ b/arch/um/include/asm/ptrace-generic.h | |||
@@ -16,6 +16,8 @@ struct pt_regs { | |||
16 | struct uml_pt_regs regs; | 16 | struct uml_pt_regs regs; |
17 | }; | 17 | }; |
18 | 18 | ||
19 | #define arch_has_single_step() (1) | ||
20 | |||
19 | #define EMPTY_REGS { .regs = EMPTY_UML_PT_REGS } | 21 | #define EMPTY_REGS { .regs = EMPTY_UML_PT_REGS } |
20 | 22 | ||
21 | #define PT_REGS_IP(r) UPT_IP(&(r)->regs) | 23 | #define PT_REGS_IP(r) UPT_IP(&(r)->regs) |
diff --git a/arch/um/kernel/ptrace.c b/arch/um/kernel/ptrace.c index 8e3d69e4fcb5..484509948ee9 100644 --- a/arch/um/kernel/ptrace.c +++ b/arch/um/kernel/ptrace.c | |||
@@ -12,16 +12,25 @@ | |||
12 | #endif | 12 | #endif |
13 | #include "skas_ptrace.h" | 13 | #include "skas_ptrace.h" |
14 | 14 | ||
15 | static inline void set_singlestepping(struct task_struct *child, int on) | 15 | |
16 | |||
17 | void user_enable_single_step(struct task_struct *child) | ||
16 | { | 18 | { |
17 | if (on) | 19 | child->ptrace |= PT_DTRACE; |
18 | child->ptrace |= PT_DTRACE; | ||
19 | else | ||
20 | child->ptrace &= ~PT_DTRACE; | ||
21 | child->thread.singlestep_syscall = 0; | 20 | child->thread.singlestep_syscall = 0; |
22 | 21 | ||
23 | #ifdef SUBARCH_SET_SINGLESTEPPING | 22 | #ifdef SUBARCH_SET_SINGLESTEPPING |
24 | SUBARCH_SET_SINGLESTEPPING(child, on); | 23 | SUBARCH_SET_SINGLESTEPPING(child, 1); |
24 | #endif | ||
25 | } | ||
26 | |||
27 | void user_disable_single_step(struct task_struct *child) | ||
28 | { | ||
29 | child->ptrace &= ~PT_DTRACE; | ||
30 | child->thread.singlestep_syscall = 0; | ||
31 | |||
32 | #ifdef SUBARCH_SET_SINGLESTEPPING | ||
33 | SUBARCH_SET_SINGLESTEPPING(child, 0); | ||
25 | #endif | 34 | #endif |
26 | } | 35 | } |
27 | 36 | ||
@@ -30,7 +39,7 @@ static inline void set_singlestepping(struct task_struct *child, int on) | |||
30 | */ | 39 | */ |
31 | void ptrace_disable(struct task_struct *child) | 40 | void ptrace_disable(struct task_struct *child) |
32 | { | 41 | { |
33 | set_singlestepping(child,0); | 42 | user_disable_single_step(child); |
34 | } | 43 | } |
35 | 44 | ||
36 | extern int peek_user(struct task_struct * child, long addr, long data); | 45 | extern int peek_user(struct task_struct * child, long addr, long data); |
@@ -69,53 +78,6 @@ long arch_ptrace(struct task_struct *child, long request, long addr, long data) | |||
69 | ret = -EIO; | 78 | ret = -EIO; |
70 | break; | 79 | break; |
71 | 80 | ||
72 | /* continue and stop at next (return from) syscall */ | ||
73 | case PTRACE_SYSCALL: | ||
74 | /* restart after signal. */ | ||
75 | case PTRACE_CONT: { | ||
76 | ret = -EIO; | ||
77 | if (!valid_signal(data)) | ||
78 | break; | ||
79 | |||
80 | set_singlestepping(child, 0); | ||
81 | if (request == PTRACE_SYSCALL) | ||
82 | set_tsk_thread_flag(child, TIF_SYSCALL_TRACE); | ||
83 | else clear_tsk_thread_flag(child, TIF_SYSCALL_TRACE); | ||
84 | child->exit_code = data; | ||
85 | wake_up_process(child); | ||
86 | ret = 0; | ||
87 | break; | ||
88 | } | ||
89 | |||
90 | /* | ||
91 | * make the child exit. Best I can do is send it a sigkill. | ||
92 | * perhaps it should be put in the status that it wants to | ||
93 | * exit. | ||
94 | */ | ||
95 | case PTRACE_KILL: { | ||
96 | ret = 0; | ||
97 | if (child->exit_state == EXIT_ZOMBIE) /* already dead */ | ||
98 | break; | ||
99 | |||
100 | set_singlestepping(child, 0); | ||
101 | child->exit_code = SIGKILL; | ||
102 | wake_up_process(child); | ||
103 | break; | ||
104 | } | ||
105 | |||
106 | case PTRACE_SINGLESTEP: { /* set the trap flag. */ | ||
107 | ret = -EIO; | ||
108 | if (!valid_signal(data)) | ||
109 | break; | ||
110 | clear_tsk_thread_flag(child, TIF_SYSCALL_TRACE); | ||
111 | set_singlestepping(child, 1); | ||
112 | child->exit_code = data; | ||
113 | /* give it a chance to run. */ | ||
114 | wake_up_process(child); | ||
115 | ret = 0; | ||
116 | break; | ||
117 | } | ||
118 | |||
119 | #ifdef PTRACE_GETREGS | 81 | #ifdef PTRACE_GETREGS |
120 | case PTRACE_GETREGS: { /* Get all gp regs from the child. */ | 82 | case PTRACE_GETREGS: { /* Get all gp regs from the child. */ |
121 | if (!access_ok(VERIFY_WRITE, p, MAX_REG_OFFSET)) { | 83 | if (!access_ok(VERIFY_WRITE, p, MAX_REG_OFFSET)) { |
diff --git a/arch/um/kernel/syscall.c b/arch/um/kernel/syscall.c index cccab850c27e..4393173923f5 100644 --- a/arch/um/kernel/syscall.c +++ b/arch/um/kernel/syscall.c | |||
@@ -51,51 +51,6 @@ long old_mmap(unsigned long addr, unsigned long len, | |||
51 | return err; | 51 | return err; |
52 | } | 52 | } |
53 | 53 | ||
54 | long sys_uname(struct old_utsname __user * name) | ||
55 | { | ||
56 | long err; | ||
57 | if (!name) | ||
58 | return -EFAULT; | ||
59 | down_read(&uts_sem); | ||
60 | err = copy_to_user(name, utsname(), sizeof (*name)); | ||
61 | up_read(&uts_sem); | ||
62 | return err?-EFAULT:0; | ||
63 | } | ||
64 | |||
65 | long sys_olduname(struct oldold_utsname __user * name) | ||
66 | { | ||
67 | long error; | ||
68 | |||
69 | if (!name) | ||
70 | return -EFAULT; | ||
71 | if (!access_ok(VERIFY_WRITE,name,sizeof(struct oldold_utsname))) | ||
72 | return -EFAULT; | ||
73 | |||
74 | down_read(&uts_sem); | ||
75 | |||
76 | error = __copy_to_user(&name->sysname, &utsname()->sysname, | ||
77 | __OLD_UTS_LEN); | ||
78 | error |= __put_user(0, name->sysname + __OLD_UTS_LEN); | ||
79 | error |= __copy_to_user(&name->nodename, &utsname()->nodename, | ||
80 | __OLD_UTS_LEN); | ||
81 | error |= __put_user(0, name->nodename + __OLD_UTS_LEN); | ||
82 | error |= __copy_to_user(&name->release, &utsname()->release, | ||
83 | __OLD_UTS_LEN); | ||
84 | error |= __put_user(0, name->release + __OLD_UTS_LEN); | ||
85 | error |= __copy_to_user(&name->version, &utsname()->version, | ||
86 | __OLD_UTS_LEN); | ||
87 | error |= __put_user(0, name->version + __OLD_UTS_LEN); | ||
88 | error |= __copy_to_user(&name->machine, &utsname()->machine, | ||
89 | __OLD_UTS_LEN); | ||
90 | error |= __put_user(0, name->machine + __OLD_UTS_LEN); | ||
91 | |||
92 | up_read(&uts_sem); | ||
93 | |||
94 | error = error ? -EFAULT : 0; | ||
95 | |||
96 | return error; | ||
97 | } | ||
98 | |||
99 | int kernel_execve(const char *filename, char *const argv[], char *const envp[]) | 54 | int kernel_execve(const char *filename, char *const argv[], char *const envp[]) |
100 | { | 55 | { |
101 | mm_segment_t fs; | 56 | mm_segment_t fs; |
diff --git a/arch/um/sys-i386/shared/sysdep/syscalls.h b/arch/um/sys-i386/shared/sysdep/syscalls.h index e7787679e317..05cb796aecb5 100644 --- a/arch/um/sys-i386/shared/sysdep/syscalls.h +++ b/arch/um/sys-i386/shared/sysdep/syscalls.h | |||
@@ -13,8 +13,6 @@ typedef long syscall_handler_t(struct pt_regs); | |||
13 | */ | 13 | */ |
14 | extern syscall_handler_t sys_rt_sigaction; | 14 | extern syscall_handler_t sys_rt_sigaction; |
15 | 15 | ||
16 | extern syscall_handler_t old_mmap_i386; | ||
17 | |||
18 | extern syscall_handler_t *sys_call_table[]; | 16 | extern syscall_handler_t *sys_call_table[]; |
19 | 17 | ||
20 | #define EXECUTE_SYSCALL(syscall, regs) \ | 18 | #define EXECUTE_SYSCALL(syscall, regs) \ |
diff --git a/arch/um/sys-i386/sys_call_table.S b/arch/um/sys-i386/sys_call_table.S index c6260dd6ebb9..de274071455d 100644 --- a/arch/um/sys-i386/sys_call_table.S +++ b/arch/um/sys-i386/sys_call_table.S | |||
@@ -7,7 +7,7 @@ | |||
7 | #define sys_vm86old sys_ni_syscall | 7 | #define sys_vm86old sys_ni_syscall |
8 | #define sys_vm86 sys_ni_syscall | 8 | #define sys_vm86 sys_ni_syscall |
9 | 9 | ||
10 | #define old_mmap old_mmap_i386 | 10 | #define old_mmap sys_old_mmap |
11 | 11 | ||
12 | #define ptregs_fork sys_fork | 12 | #define ptregs_fork sys_fork |
13 | #define ptregs_execve sys_execve | 13 | #define ptregs_execve sys_execve |
diff --git a/arch/um/sys-i386/syscalls.c b/arch/um/sys-i386/syscalls.c index 857ca0b3bdef..70ca357393b8 100644 --- a/arch/um/sys-i386/syscalls.c +++ b/arch/um/sys-i386/syscalls.c | |||
@@ -12,57 +12,6 @@ | |||
12 | #include "asm/unistd.h" | 12 | #include "asm/unistd.h" |
13 | 13 | ||
14 | /* | 14 | /* |
15 | * Perform the select(nd, in, out, ex, tv) and mmap() system | ||
16 | * calls. Linux/i386 didn't use to be able to handle more than | ||
17 | * 4 system call parameters, so these system calls used a memory | ||
18 | * block for parameter passing.. | ||
19 | */ | ||
20 | |||
21 | struct mmap_arg_struct { | ||
22 | unsigned long addr; | ||
23 | unsigned long len; | ||
24 | unsigned long prot; | ||
25 | unsigned long flags; | ||
26 | unsigned long fd; | ||
27 | unsigned long offset; | ||
28 | }; | ||
29 | |||
30 | extern int old_mmap(unsigned long addr, unsigned long len, | ||
31 | unsigned long prot, unsigned long flags, | ||
32 | unsigned long fd, unsigned long offset); | ||
33 | |||
34 | long old_mmap_i386(struct mmap_arg_struct __user *arg) | ||
35 | { | ||
36 | struct mmap_arg_struct a; | ||
37 | int err = -EFAULT; | ||
38 | |||
39 | if (copy_from_user(&a, arg, sizeof(a))) | ||
40 | goto out; | ||
41 | |||
42 | err = old_mmap(a.addr, a.len, a.prot, a.flags, a.fd, a.offset); | ||
43 | out: | ||
44 | return err; | ||
45 | } | ||
46 | |||
47 | struct sel_arg_struct { | ||
48 | unsigned long n; | ||
49 | fd_set __user *inp; | ||
50 | fd_set __user *outp; | ||
51 | fd_set __user *exp; | ||
52 | struct timeval __user *tvp; | ||
53 | }; | ||
54 | |||
55 | long old_select(struct sel_arg_struct __user *arg) | ||
56 | { | ||
57 | struct sel_arg_struct a; | ||
58 | |||
59 | if (copy_from_user(&a, arg, sizeof(a))) | ||
60 | return -EFAULT; | ||
61 | /* sys_select() does the appropriate kernel locking */ | ||
62 | return sys_select(a.n, a.inp, a.outp, a.exp, a.tvp); | ||
63 | } | ||
64 | |||
65 | /* | ||
66 | * The prototype on i386 is: | 15 | * The prototype on i386 is: |
67 | * | 16 | * |
68 | * int clone(int flags, void * child_stack, int * parent_tidptr, struct user_desc * newtls, int * child_tidptr) | 17 | * int clone(int flags, void * child_stack, int * parent_tidptr, struct user_desc * newtls, int * child_tidptr) |
@@ -85,92 +34,6 @@ long sys_clone(unsigned long clone_flags, unsigned long newsp, | |||
85 | return ret; | 34 | return ret; |
86 | } | 35 | } |
87 | 36 | ||
88 | /* | ||
89 | * sys_ipc() is the de-multiplexer for the SysV IPC calls.. | ||
90 | * | ||
91 | * This is really horribly ugly. | ||
92 | */ | ||
93 | long sys_ipc (uint call, int first, int second, | ||
94 | int third, void __user *ptr, long fifth) | ||
95 | { | ||
96 | int version, ret; | ||
97 | |||
98 | version = call >> 16; /* hack for backward compatibility */ | ||
99 | call &= 0xffff; | ||
100 | |||
101 | switch (call) { | ||
102 | case SEMOP: | ||
103 | return sys_semtimedop(first, (struct sembuf __user *) ptr, | ||
104 | second, NULL); | ||
105 | case SEMTIMEDOP: | ||
106 | return sys_semtimedop(first, (struct sembuf __user *) ptr, | ||
107 | second, | ||
108 | (const struct timespec __user *) fifth); | ||
109 | case SEMGET: | ||
110 | return sys_semget (first, second, third); | ||
111 | case SEMCTL: { | ||
112 | union semun fourth; | ||
113 | if (!ptr) | ||
114 | return -EINVAL; | ||
115 | if (get_user(fourth.__pad, (void __user * __user *) ptr)) | ||
116 | return -EFAULT; | ||
117 | return sys_semctl (first, second, third, fourth); | ||
118 | } | ||
119 | |||
120 | case MSGSND: | ||
121 | return sys_msgsnd (first, (struct msgbuf *) ptr, | ||
122 | second, third); | ||
123 | case MSGRCV: | ||
124 | switch (version) { | ||
125 | case 0: { | ||
126 | struct ipc_kludge tmp; | ||
127 | if (!ptr) | ||
128 | return -EINVAL; | ||
129 | |||
130 | if (copy_from_user(&tmp, | ||
131 | (struct ipc_kludge *) ptr, | ||
132 | sizeof (tmp))) | ||
133 | return -EFAULT; | ||
134 | return sys_msgrcv (first, tmp.msgp, second, | ||
135 | tmp.msgtyp, third); | ||
136 | } | ||
137 | default: | ||
138 | panic("msgrcv with version != 0"); | ||
139 | return sys_msgrcv (first, | ||
140 | (struct msgbuf *) ptr, | ||
141 | second, fifth, third); | ||
142 | } | ||
143 | case MSGGET: | ||
144 | return sys_msgget ((key_t) first, second); | ||
145 | case MSGCTL: | ||
146 | return sys_msgctl (first, second, (struct msqid_ds *) ptr); | ||
147 | |||
148 | case SHMAT: | ||
149 | switch (version) { | ||
150 | default: { | ||
151 | ulong raddr; | ||
152 | ret = do_shmat (first, (char *) ptr, second, &raddr); | ||
153 | if (ret) | ||
154 | return ret; | ||
155 | return put_user (raddr, (ulong *) third); | ||
156 | } | ||
157 | case 1: /* iBCS2 emulator entry point */ | ||
158 | if (!segment_eq(get_fs(), get_ds())) | ||
159 | return -EINVAL; | ||
160 | return do_shmat (first, (char *) ptr, second, (ulong *) third); | ||
161 | } | ||
162 | case SHMDT: | ||
163 | return sys_shmdt ((char *)ptr); | ||
164 | case SHMGET: | ||
165 | return sys_shmget (first, second, third); | ||
166 | case SHMCTL: | ||
167 | return sys_shmctl (first, second, | ||
168 | (struct shmid_ds *) ptr); | ||
169 | default: | ||
170 | return -ENOSYS; | ||
171 | } | ||
172 | } | ||
173 | |||
174 | long sys_sigaction(int sig, const struct old_sigaction __user *act, | 37 | long sys_sigaction(int sig, const struct old_sigaction __user *act, |
175 | struct old_sigaction __user *oact) | 38 | struct old_sigaction __user *oact) |
176 | { | 39 | { |
diff --git a/arch/um/sys-x86_64/syscall_table.c b/arch/um/sys-x86_64/syscall_table.c index dd21d69715e6..47d469e7e7ce 100644 --- a/arch/um/sys-x86_64/syscall_table.c +++ b/arch/um/sys-x86_64/syscall_table.c | |||
@@ -26,11 +26,6 @@ | |||
26 | 26 | ||
27 | /* On UML we call it this way ("old" means it's not mmap2) */ | 27 | /* On UML we call it this way ("old" means it's not mmap2) */ |
28 | #define sys_mmap old_mmap | 28 | #define sys_mmap old_mmap |
29 | /* | ||
30 | * On x86-64 sys_uname is actually sys_newuname plus a compatibility trick. | ||
31 | * See arch/x86_64/kernel/sys_x86_64.c | ||
32 | */ | ||
33 | #define sys_uname sys_uname64 | ||
34 | 29 | ||
35 | #define stub_clone sys_clone | 30 | #define stub_clone sys_clone |
36 | #define stub_fork sys_fork | 31 | #define stub_fork sys_fork |
diff --git a/arch/um/sys-x86_64/syscalls.c b/arch/um/sys-x86_64/syscalls.c index f1199fd34d38..f3d82bb6e15a 100644 --- a/arch/um/sys-x86_64/syscalls.c +++ b/arch/um/sys-x86_64/syscalls.c | |||
@@ -12,20 +12,6 @@ | |||
12 | #include "asm/uaccess.h" | 12 | #include "asm/uaccess.h" |
13 | #include "os.h" | 13 | #include "os.h" |
14 | 14 | ||
15 | asmlinkage long sys_uname64(struct new_utsname __user * name) | ||
16 | { | ||
17 | int err; | ||
18 | |||
19 | down_read(&uts_sem); | ||
20 | err = copy_to_user(name, utsname(), sizeof (*name)); | ||
21 | up_read(&uts_sem); | ||
22 | |||
23 | if (personality(current->personality) == PER_LINUX32) | ||
24 | err |= copy_to_user(&name->machine, "i686", 5); | ||
25 | |||
26 | return err ? -EFAULT : 0; | ||
27 | } | ||
28 | |||
29 | long arch_prctl(struct task_struct *task, int code, unsigned long __user *addr) | 15 | long arch_prctl(struct task_struct *task, int code, unsigned long __user *addr) |
30 | { | 16 | { |
31 | unsigned long *ptr = addr, tmp; | 17 | unsigned long *ptr = addr, tmp; |
diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig index e98440371525..93936de67796 100644 --- a/arch/x86/Kconfig +++ b/arch/x86/Kconfig | |||
@@ -102,6 +102,9 @@ config ZONE_DMA | |||
102 | config SBUS | 102 | config SBUS |
103 | bool | 103 | bool |
104 | 104 | ||
105 | config NEED_DMA_MAP_STATE | ||
106 | def_bool (X86_64 || DMAR || DMA_API_DEBUG) | ||
107 | |||
105 | config GENERIC_ISA_DMA | 108 | config GENERIC_ISA_DMA |
106 | def_bool y | 109 | def_bool y |
107 | 110 | ||
diff --git a/arch/x86/ia32/ia32entry.S b/arch/x86/ia32/ia32entry.S index 53147ad85b96..59b4556a5b92 100644 --- a/arch/x86/ia32/ia32entry.S +++ b/arch/x86/ia32/ia32entry.S | |||
@@ -563,7 +563,7 @@ ia32_sys_call_table: | |||
563 | .quad quiet_ni_syscall /* old mpx syscall holder */ | 563 | .quad quiet_ni_syscall /* old mpx syscall holder */ |
564 | .quad sys_setpgid | 564 | .quad sys_setpgid |
565 | .quad quiet_ni_syscall /* old ulimit syscall holder */ | 565 | .quad quiet_ni_syscall /* old ulimit syscall holder */ |
566 | .quad sys32_olduname | 566 | .quad sys_olduname |
567 | .quad sys_umask /* 60 */ | 567 | .quad sys_umask /* 60 */ |
568 | .quad sys_chroot | 568 | .quad sys_chroot |
569 | .quad compat_sys_ustat | 569 | .quad compat_sys_ustat |
@@ -586,7 +586,7 @@ ia32_sys_call_table: | |||
586 | .quad compat_sys_settimeofday | 586 | .quad compat_sys_settimeofday |
587 | .quad sys_getgroups16 /* 80 */ | 587 | .quad sys_getgroups16 /* 80 */ |
588 | .quad sys_setgroups16 | 588 | .quad sys_setgroups16 |
589 | .quad sys32_old_select | 589 | .quad compat_sys_old_select |
590 | .quad sys_symlink | 590 | .quad sys_symlink |
591 | .quad sys_lstat | 591 | .quad sys_lstat |
592 | .quad sys_readlink /* 85 */ | 592 | .quad sys_readlink /* 85 */ |
@@ -613,7 +613,7 @@ ia32_sys_call_table: | |||
613 | .quad compat_sys_newstat | 613 | .quad compat_sys_newstat |
614 | .quad compat_sys_newlstat | 614 | .quad compat_sys_newlstat |
615 | .quad compat_sys_newfstat | 615 | .quad compat_sys_newfstat |
616 | .quad sys32_uname | 616 | .quad sys_uname |
617 | .quad stub32_iopl /* 110 */ | 617 | .quad stub32_iopl /* 110 */ |
618 | .quad sys_vhangup | 618 | .quad sys_vhangup |
619 | .quad quiet_ni_syscall /* old "idle" system call */ | 619 | .quad quiet_ni_syscall /* old "idle" system call */ |
diff --git a/arch/x86/ia32/sys_ia32.c b/arch/x86/ia32/sys_ia32.c index 422572c77923..74c35431b7d8 100644 --- a/arch/x86/ia32/sys_ia32.c +++ b/arch/x86/ia32/sys_ia32.c | |||
@@ -143,7 +143,7 @@ asmlinkage long sys32_fstatat(unsigned int dfd, char __user *filename, | |||
143 | * block for parameter passing.. | 143 | * block for parameter passing.. |
144 | */ | 144 | */ |
145 | 145 | ||
146 | struct mmap_arg_struct { | 146 | struct mmap_arg_struct32 { |
147 | unsigned int addr; | 147 | unsigned int addr; |
148 | unsigned int len; | 148 | unsigned int len; |
149 | unsigned int prot; | 149 | unsigned int prot; |
@@ -152,9 +152,9 @@ struct mmap_arg_struct { | |||
152 | unsigned int offset; | 152 | unsigned int offset; |
153 | }; | 153 | }; |
154 | 154 | ||
155 | asmlinkage long sys32_mmap(struct mmap_arg_struct __user *arg) | 155 | asmlinkage long sys32_mmap(struct mmap_arg_struct32 __user *arg) |
156 | { | 156 | { |
157 | struct mmap_arg_struct a; | 157 | struct mmap_arg_struct32 a; |
158 | 158 | ||
159 | if (copy_from_user(&a, arg, sizeof(a))) | 159 | if (copy_from_user(&a, arg, sizeof(a))) |
160 | return -EFAULT; | 160 | return -EFAULT; |
@@ -332,24 +332,6 @@ asmlinkage long sys32_alarm(unsigned int seconds) | |||
332 | return alarm_setitimer(seconds); | 332 | return alarm_setitimer(seconds); |
333 | } | 333 | } |
334 | 334 | ||
335 | struct sel_arg_struct { | ||
336 | unsigned int n; | ||
337 | unsigned int inp; | ||
338 | unsigned int outp; | ||
339 | unsigned int exp; | ||
340 | unsigned int tvp; | ||
341 | }; | ||
342 | |||
343 | asmlinkage long sys32_old_select(struct sel_arg_struct __user *arg) | ||
344 | { | ||
345 | struct sel_arg_struct a; | ||
346 | |||
347 | if (copy_from_user(&a, arg, sizeof(a))) | ||
348 | return -EFAULT; | ||
349 | return compat_sys_select(a.n, compat_ptr(a.inp), compat_ptr(a.outp), | ||
350 | compat_ptr(a.exp), compat_ptr(a.tvp)); | ||
351 | } | ||
352 | |||
353 | asmlinkage long sys32_waitpid(compat_pid_t pid, unsigned int *stat_addr, | 335 | asmlinkage long sys32_waitpid(compat_pid_t pid, unsigned int *stat_addr, |
354 | int options) | 336 | int options) |
355 | { | 337 | { |
@@ -466,58 +448,6 @@ asmlinkage long sys32_sendfile(int out_fd, int in_fd, | |||
466 | return ret; | 448 | return ret; |
467 | } | 449 | } |
468 | 450 | ||
469 | asmlinkage long sys32_olduname(struct oldold_utsname __user *name) | ||
470 | { | ||
471 | char *arch = "x86_64"; | ||
472 | int err; | ||
473 | |||
474 | if (!name) | ||
475 | return -EFAULT; | ||
476 | if (!access_ok(VERIFY_WRITE, name, sizeof(struct oldold_utsname))) | ||
477 | return -EFAULT; | ||
478 | |||
479 | down_read(&uts_sem); | ||
480 | |||
481 | err = __copy_to_user(&name->sysname, &utsname()->sysname, | ||
482 | __OLD_UTS_LEN); | ||
483 | err |= __put_user(0, name->sysname+__OLD_UTS_LEN); | ||
484 | err |= __copy_to_user(&name->nodename, &utsname()->nodename, | ||
485 | __OLD_UTS_LEN); | ||
486 | err |= __put_user(0, name->nodename+__OLD_UTS_LEN); | ||
487 | err |= __copy_to_user(&name->release, &utsname()->release, | ||
488 | __OLD_UTS_LEN); | ||
489 | err |= __put_user(0, name->release+__OLD_UTS_LEN); | ||
490 | err |= __copy_to_user(&name->version, &utsname()->version, | ||
491 | __OLD_UTS_LEN); | ||
492 | err |= __put_user(0, name->version+__OLD_UTS_LEN); | ||
493 | |||
494 | if (personality(current->personality) == PER_LINUX32) | ||
495 | arch = "i686"; | ||
496 | |||
497 | err |= __copy_to_user(&name->machine, arch, strlen(arch) + 1); | ||
498 | |||
499 | up_read(&uts_sem); | ||
500 | |||
501 | err = err ? -EFAULT : 0; | ||
502 | |||
503 | return err; | ||
504 | } | ||
505 | |||
506 | long sys32_uname(struct old_utsname __user *name) | ||
507 | { | ||
508 | int err; | ||
509 | |||
510 | if (!name) | ||
511 | return -EFAULT; | ||
512 | down_read(&uts_sem); | ||
513 | err = copy_to_user(name, utsname(), sizeof(*name)); | ||
514 | up_read(&uts_sem); | ||
515 | if (personality(current->personality) == PER_LINUX32) | ||
516 | err |= copy_to_user(&name->machine, "i686", 5); | ||
517 | |||
518 | return err ? -EFAULT : 0; | ||
519 | } | ||
520 | |||
521 | asmlinkage long sys32_execve(char __user *name, compat_uptr_t __user *argv, | 451 | asmlinkage long sys32_execve(char __user *name, compat_uptr_t __user *argv, |
522 | compat_uptr_t __user *envp, struct pt_regs *regs) | 452 | compat_uptr_t __user *envp, struct pt_regs *regs) |
523 | { | 453 | { |
diff --git a/arch/x86/include/asm/compat.h b/arch/x86/include/asm/compat.h index 9a9c7bdc923d..306160e58b48 100644 --- a/arch/x86/include/asm/compat.h +++ b/arch/x86/include/asm/compat.h | |||
@@ -8,7 +8,8 @@ | |||
8 | #include <linux/sched.h> | 8 | #include <linux/sched.h> |
9 | #include <asm/user32.h> | 9 | #include <asm/user32.h> |
10 | 10 | ||
11 | #define COMPAT_USER_HZ 100 | 11 | #define COMPAT_USER_HZ 100 |
12 | #define COMPAT_UTS_MACHINE "i686\0\0" | ||
12 | 13 | ||
13 | typedef u32 compat_size_t; | 14 | typedef u32 compat_size_t; |
14 | typedef s32 compat_ssize_t; | 15 | typedef s32 compat_ssize_t; |
diff --git a/arch/x86/include/asm/pci.h b/arch/x86/include/asm/pci.h index 3e002ca5a287..404a880ea325 100644 --- a/arch/x86/include/asm/pci.h +++ b/arch/x86/include/asm/pci.h | |||
@@ -97,34 +97,6 @@ extern void pci_iommu_alloc(void); | |||
97 | 97 | ||
98 | #define PCI_DMA_BUS_IS_PHYS (dma_ops->is_phys) | 98 | #define PCI_DMA_BUS_IS_PHYS (dma_ops->is_phys) |
99 | 99 | ||
100 | #if defined(CONFIG_X86_64) || defined(CONFIG_DMAR) || defined(CONFIG_DMA_API_DEBUG) | ||
101 | |||
102 | #define DECLARE_PCI_UNMAP_ADDR(ADDR_NAME) \ | ||
103 | dma_addr_t ADDR_NAME; | ||
104 | #define DECLARE_PCI_UNMAP_LEN(LEN_NAME) \ | ||
105 | __u32 LEN_NAME; | ||
106 | #define pci_unmap_addr(PTR, ADDR_NAME) \ | ||
107 | ((PTR)->ADDR_NAME) | ||
108 | #define pci_unmap_addr_set(PTR, ADDR_NAME, VAL) \ | ||
109 | (((PTR)->ADDR_NAME) = (VAL)) | ||
110 | #define pci_unmap_len(PTR, LEN_NAME) \ | ||
111 | ((PTR)->LEN_NAME) | ||
112 | #define pci_unmap_len_set(PTR, LEN_NAME, VAL) \ | ||
113 | (((PTR)->LEN_NAME) = (VAL)) | ||
114 | |||
115 | #else | ||
116 | |||
117 | #define DECLARE_PCI_UNMAP_ADDR(ADDR_NAME) dma_addr_t ADDR_NAME[0]; | ||
118 | #define DECLARE_PCI_UNMAP_LEN(LEN_NAME) unsigned LEN_NAME[0]; | ||
119 | #define pci_unmap_addr(PTR, ADDR_NAME) sizeof((PTR)->ADDR_NAME) | ||
120 | #define pci_unmap_addr_set(PTR, ADDR_NAME, VAL) \ | ||
121 | do { break; } while (pci_unmap_addr(PTR, ADDR_NAME)) | ||
122 | #define pci_unmap_len(PTR, LEN_NAME) sizeof((PTR)->LEN_NAME) | ||
123 | #define pci_unmap_len_set(PTR, LEN_NAME, VAL) \ | ||
124 | do { break; } while (pci_unmap_len(PTR, LEN_NAME)) | ||
125 | |||
126 | #endif | ||
127 | |||
128 | #endif /* __KERNEL__ */ | 100 | #endif /* __KERNEL__ */ |
129 | 101 | ||
130 | #ifdef CONFIG_X86_64 | 102 | #ifdef CONFIG_X86_64 |
diff --git a/arch/x86/include/asm/ptrace.h b/arch/x86/include/asm/ptrace.h index 20102808b191..69a686a7dff0 100644 --- a/arch/x86/include/asm/ptrace.h +++ b/arch/x86/include/asm/ptrace.h | |||
@@ -274,14 +274,7 @@ static inline unsigned long regs_get_kernel_stack_nth(struct pt_regs *regs, | |||
274 | return 0; | 274 | return 0; |
275 | } | 275 | } |
276 | 276 | ||
277 | /* | ||
278 | * These are defined as per linux/ptrace.h, which see. | ||
279 | */ | ||
280 | #define arch_has_single_step() (1) | 277 | #define arch_has_single_step() (1) |
281 | extern void user_enable_single_step(struct task_struct *); | ||
282 | extern void user_disable_single_step(struct task_struct *); | ||
283 | |||
284 | extern void user_enable_block_step(struct task_struct *); | ||
285 | #ifdef CONFIG_X86_DEBUGCTLMSR | 278 | #ifdef CONFIG_X86_DEBUGCTLMSR |
286 | #define arch_has_block_step() (1) | 279 | #define arch_has_block_step() (1) |
287 | #else | 280 | #else |
diff --git a/arch/x86/include/asm/sys_ia32.h b/arch/x86/include/asm/sys_ia32.h index d5f69045c100..3ad421784ae7 100644 --- a/arch/x86/include/asm/sys_ia32.h +++ b/arch/x86/include/asm/sys_ia32.h | |||
@@ -26,8 +26,8 @@ asmlinkage long sys32_lstat64(char __user *, struct stat64 __user *); | |||
26 | asmlinkage long sys32_fstat64(unsigned int, struct stat64 __user *); | 26 | asmlinkage long sys32_fstat64(unsigned int, struct stat64 __user *); |
27 | asmlinkage long sys32_fstatat(unsigned int, char __user *, | 27 | asmlinkage long sys32_fstatat(unsigned int, char __user *, |
28 | struct stat64 __user *, int); | 28 | struct stat64 __user *, int); |
29 | struct mmap_arg_struct; | 29 | struct mmap_arg_struct32; |
30 | asmlinkage long sys32_mmap(struct mmap_arg_struct __user *); | 30 | asmlinkage long sys32_mmap(struct mmap_arg_struct32 __user *); |
31 | asmlinkage long sys32_mprotect(unsigned long, size_t, unsigned long); | 31 | asmlinkage long sys32_mprotect(unsigned long, size_t, unsigned long); |
32 | 32 | ||
33 | struct sigaction32; | 33 | struct sigaction32; |
@@ -40,8 +40,6 @@ asmlinkage long sys32_rt_sigprocmask(int, compat_sigset_t __user *, | |||
40 | compat_sigset_t __user *, unsigned int); | 40 | compat_sigset_t __user *, unsigned int); |
41 | asmlinkage long sys32_alarm(unsigned int); | 41 | asmlinkage long sys32_alarm(unsigned int); |
42 | 42 | ||
43 | struct sel_arg_struct; | ||
44 | asmlinkage long sys32_old_select(struct sel_arg_struct __user *); | ||
45 | asmlinkage long sys32_waitpid(compat_pid_t, unsigned int *, int); | 43 | asmlinkage long sys32_waitpid(compat_pid_t, unsigned int *, int); |
46 | asmlinkage long sys32_sysfs(int, u32, u32); | 44 | asmlinkage long sys32_sysfs(int, u32, u32); |
47 | 45 | ||
@@ -56,11 +54,6 @@ asmlinkage long sys32_pwrite(unsigned int, char __user *, u32, u32, u32); | |||
56 | asmlinkage long sys32_personality(unsigned long); | 54 | asmlinkage long sys32_personality(unsigned long); |
57 | asmlinkage long sys32_sendfile(int, int, compat_off_t __user *, s32); | 55 | asmlinkage long sys32_sendfile(int, int, compat_off_t __user *, s32); |
58 | 56 | ||
59 | struct oldold_utsname; | ||
60 | struct old_utsname; | ||
61 | asmlinkage long sys32_olduname(struct oldold_utsname __user *); | ||
62 | long sys32_uname(struct old_utsname __user *); | ||
63 | |||
64 | asmlinkage long sys32_execve(char __user *, compat_uptr_t __user *, | 57 | asmlinkage long sys32_execve(char __user *, compat_uptr_t __user *, |
65 | compat_uptr_t __user *, struct pt_regs *); | 58 | compat_uptr_t __user *, struct pt_regs *); |
66 | asmlinkage long sys32_clone(unsigned int, unsigned int, struct pt_regs *); | 59 | asmlinkage long sys32_clone(unsigned int, unsigned int, struct pt_regs *); |
diff --git a/arch/x86/include/asm/syscalls.h b/arch/x86/include/asm/syscalls.h index 8868b9420b0e..5c044b43e9a7 100644 --- a/arch/x86/include/asm/syscalls.h +++ b/arch/x86/include/asm/syscalls.h | |||
@@ -50,18 +50,6 @@ asmlinkage int sys_sigaction(int, const struct old_sigaction __user *, | |||
50 | struct old_sigaction __user *); | 50 | struct old_sigaction __user *); |
51 | unsigned long sys_sigreturn(struct pt_regs *); | 51 | unsigned long sys_sigreturn(struct pt_regs *); |
52 | 52 | ||
53 | /* kernel/sys_i386_32.c */ | ||
54 | struct mmap_arg_struct; | ||
55 | struct sel_arg_struct; | ||
56 | struct oldold_utsname; | ||
57 | struct old_utsname; | ||
58 | |||
59 | asmlinkage int old_mmap(struct mmap_arg_struct __user *); | ||
60 | asmlinkage int old_select(struct sel_arg_struct __user *); | ||
61 | asmlinkage int sys_ipc(uint, int, int, int, void __user *, long); | ||
62 | asmlinkage int sys_uname(struct old_utsname __user *); | ||
63 | asmlinkage int sys_olduname(struct oldold_utsname __user *); | ||
64 | |||
65 | /* kernel/vm86_32.c */ | 53 | /* kernel/vm86_32.c */ |
66 | int sys_vm86old(struct vm86_struct __user *, struct pt_regs *); | 54 | int sys_vm86old(struct vm86_struct __user *, struct pt_regs *); |
67 | int sys_vm86(unsigned long, unsigned long, struct pt_regs *); | 55 | int sys_vm86(unsigned long, unsigned long, struct pt_regs *); |
@@ -73,11 +61,8 @@ int sys_vm86(unsigned long, unsigned long, struct pt_regs *); | |||
73 | long sys_arch_prctl(int, unsigned long); | 61 | long sys_arch_prctl(int, unsigned long); |
74 | 62 | ||
75 | /* kernel/sys_x86_64.c */ | 63 | /* kernel/sys_x86_64.c */ |
76 | struct new_utsname; | ||
77 | |||
78 | asmlinkage long sys_mmap(unsigned long, unsigned long, unsigned long, | 64 | asmlinkage long sys_mmap(unsigned long, unsigned long, unsigned long, |
79 | unsigned long, unsigned long, unsigned long); | 65 | unsigned long, unsigned long, unsigned long); |
80 | asmlinkage long sys_uname(struct new_utsname __user *); | ||
81 | 66 | ||
82 | #endif /* CONFIG_X86_32 */ | 67 | #endif /* CONFIG_X86_32 */ |
83 | #endif /* _ASM_X86_SYSCALLS_H */ | 68 | #endif /* _ASM_X86_SYSCALLS_H */ |
diff --git a/arch/x86/include/asm/unistd_32.h b/arch/x86/include/asm/unistd_32.h index 3baf379fa840..beb9b5f8f8a4 100644 --- a/arch/x86/include/asm/unistd_32.h +++ b/arch/x86/include/asm/unistd_32.h | |||
@@ -354,6 +354,7 @@ | |||
354 | #define __ARCH_WANT_STAT64 | 354 | #define __ARCH_WANT_STAT64 |
355 | #define __ARCH_WANT_SYS_ALARM | 355 | #define __ARCH_WANT_SYS_ALARM |
356 | #define __ARCH_WANT_SYS_GETHOSTNAME | 356 | #define __ARCH_WANT_SYS_GETHOSTNAME |
357 | #define __ARCH_WANT_SYS_IPC | ||
357 | #define __ARCH_WANT_SYS_PAUSE | 358 | #define __ARCH_WANT_SYS_PAUSE |
358 | #define __ARCH_WANT_SYS_SGETMASK | 359 | #define __ARCH_WANT_SYS_SGETMASK |
359 | #define __ARCH_WANT_SYS_SIGNAL | 360 | #define __ARCH_WANT_SYS_SIGNAL |
@@ -366,6 +367,9 @@ | |||
366 | #define __ARCH_WANT_SYS_LLSEEK | 367 | #define __ARCH_WANT_SYS_LLSEEK |
367 | #define __ARCH_WANT_SYS_NICE | 368 | #define __ARCH_WANT_SYS_NICE |
368 | #define __ARCH_WANT_SYS_OLD_GETRLIMIT | 369 | #define __ARCH_WANT_SYS_OLD_GETRLIMIT |
370 | #define __ARCH_WANT_SYS_OLD_UNAME | ||
371 | #define __ARCH_WANT_SYS_OLD_MMAP | ||
372 | #define __ARCH_WANT_SYS_OLD_SELECT | ||
369 | #define __ARCH_WANT_SYS_OLDUMOUNT | 373 | #define __ARCH_WANT_SYS_OLDUMOUNT |
370 | #define __ARCH_WANT_SYS_SIGPENDING | 374 | #define __ARCH_WANT_SYS_SIGPENDING |
371 | #define __ARCH_WANT_SYS_SIGPROCMASK | 375 | #define __ARCH_WANT_SYS_SIGPROCMASK |
diff --git a/arch/x86/include/asm/unistd_64.h b/arch/x86/include/asm/unistd_64.h index 4843f7ba754a..ff4307b0e81e 100644 --- a/arch/x86/include/asm/unistd_64.h +++ b/arch/x86/include/asm/unistd_64.h | |||
@@ -146,7 +146,7 @@ __SYSCALL(__NR_wait4, sys_wait4) | |||
146 | #define __NR_kill 62 | 146 | #define __NR_kill 62 |
147 | __SYSCALL(__NR_kill, sys_kill) | 147 | __SYSCALL(__NR_kill, sys_kill) |
148 | #define __NR_uname 63 | 148 | #define __NR_uname 63 |
149 | __SYSCALL(__NR_uname, sys_uname) | 149 | __SYSCALL(__NR_uname, sys_newuname) |
150 | 150 | ||
151 | #define __NR_semget 64 | 151 | #define __NR_semget 64 |
152 | __SYSCALL(__NR_semget, sys_semget) | 152 | __SYSCALL(__NR_semget, sys_semget) |
@@ -680,6 +680,7 @@ __SYSCALL(__NR_recvmmsg, sys_recvmmsg) | |||
680 | #define __ARCH_WANT_SYS_LLSEEK | 680 | #define __ARCH_WANT_SYS_LLSEEK |
681 | #define __ARCH_WANT_SYS_NICE | 681 | #define __ARCH_WANT_SYS_NICE |
682 | #define __ARCH_WANT_SYS_OLD_GETRLIMIT | 682 | #define __ARCH_WANT_SYS_OLD_GETRLIMIT |
683 | #define __ARCH_WANT_SYS_OLD_UNAME | ||
683 | #define __ARCH_WANT_SYS_OLDUMOUNT | 684 | #define __ARCH_WANT_SYS_OLDUMOUNT |
684 | #define __ARCH_WANT_SYS_SIGPENDING | 685 | #define __ARCH_WANT_SYS_SIGPENDING |
685 | #define __ARCH_WANT_SYS_SIGPROCMASK | 686 | #define __ARCH_WANT_SYS_SIGPROCMASK |
diff --git a/arch/x86/kernel/cpu/intel_cacheinfo.c b/arch/x86/kernel/cpu/intel_cacheinfo.c index eddb1bdd1b8f..b3eeb66c0a51 100644 --- a/arch/x86/kernel/cpu/intel_cacheinfo.c +++ b/arch/x86/kernel/cpu/intel_cacheinfo.c | |||
@@ -903,7 +903,7 @@ static ssize_t store(struct kobject *kobj, struct attribute *attr, | |||
903 | return ret; | 903 | return ret; |
904 | } | 904 | } |
905 | 905 | ||
906 | static struct sysfs_ops sysfs_ops = { | 906 | static const struct sysfs_ops sysfs_ops = { |
907 | .show = show, | 907 | .show = show, |
908 | .store = store, | 908 | .store = store, |
909 | }; | 909 | }; |
diff --git a/arch/x86/kernel/cpu/mcheck/mce.c b/arch/x86/kernel/cpu/mcheck/mce.c index a8aacd4b513c..28cba46bf32c 100644 --- a/arch/x86/kernel/cpu/mcheck/mce.c +++ b/arch/x86/kernel/cpu/mcheck/mce.c | |||
@@ -2044,6 +2044,7 @@ static __init void mce_init_banks(void) | |||
2044 | struct mce_bank *b = &mce_banks[i]; | 2044 | struct mce_bank *b = &mce_banks[i]; |
2045 | struct sysdev_attribute *a = &b->attr; | 2045 | struct sysdev_attribute *a = &b->attr; |
2046 | 2046 | ||
2047 | sysfs_attr_init(&a->attr); | ||
2047 | a->attr.name = b->attrname; | 2048 | a->attr.name = b->attrname; |
2048 | snprintf(b->attrname, ATTR_LEN, "bank%d", i); | 2049 | snprintf(b->attrname, ATTR_LEN, "bank%d", i); |
2049 | 2050 | ||
diff --git a/arch/x86/kernel/cpu/mcheck/mce_amd.c b/arch/x86/kernel/cpu/mcheck/mce_amd.c index 83a3d1f4efca..cda932ca3ade 100644 --- a/arch/x86/kernel/cpu/mcheck/mce_amd.c +++ b/arch/x86/kernel/cpu/mcheck/mce_amd.c | |||
@@ -388,7 +388,7 @@ static ssize_t store(struct kobject *kobj, struct attribute *attr, | |||
388 | return ret; | 388 | return ret; |
389 | } | 389 | } |
390 | 390 | ||
391 | static struct sysfs_ops threshold_ops = { | 391 | static const struct sysfs_ops threshold_ops = { |
392 | .show = show, | 392 | .show = show, |
393 | .store = store, | 393 | .store = store, |
394 | }; | 394 | }; |
diff --git a/arch/x86/kernel/sys_i386_32.c b/arch/x86/kernel/sys_i386_32.c index dee1ff7cba58..196552bb412c 100644 --- a/arch/x86/kernel/sys_i386_32.c +++ b/arch/x86/kernel/sys_i386_32.c | |||
@@ -25,191 +25,6 @@ | |||
25 | #include <asm/syscalls.h> | 25 | #include <asm/syscalls.h> |
26 | 26 | ||
27 | /* | 27 | /* |
28 | * Perform the select(nd, in, out, ex, tv) and mmap() system | ||
29 | * calls. Linux/i386 didn't use to be able to handle more than | ||
30 | * 4 system call parameters, so these system calls used a memory | ||
31 | * block for parameter passing.. | ||
32 | */ | ||
33 | |||
34 | struct mmap_arg_struct { | ||
35 | unsigned long addr; | ||
36 | unsigned long len; | ||
37 | unsigned long prot; | ||
38 | unsigned long flags; | ||
39 | unsigned long fd; | ||
40 | unsigned long offset; | ||
41 | }; | ||
42 | |||
43 | asmlinkage int old_mmap(struct mmap_arg_struct __user *arg) | ||
44 | { | ||
45 | struct mmap_arg_struct a; | ||
46 | int err = -EFAULT; | ||
47 | |||
48 | if (copy_from_user(&a, arg, sizeof(a))) | ||
49 | goto out; | ||
50 | |||
51 | err = -EINVAL; | ||
52 | if (a.offset & ~PAGE_MASK) | ||
53 | goto out; | ||
54 | |||
55 | err = sys_mmap_pgoff(a.addr, a.len, a.prot, a.flags, | ||
56 | a.fd, a.offset >> PAGE_SHIFT); | ||
57 | out: | ||
58 | return err; | ||
59 | } | ||
60 | |||
61 | |||
62 | struct sel_arg_struct { | ||
63 | unsigned long n; | ||
64 | fd_set __user *inp, *outp, *exp; | ||
65 | struct timeval __user *tvp; | ||
66 | }; | ||
67 | |||
68 | asmlinkage int old_select(struct sel_arg_struct __user *arg) | ||
69 | { | ||
70 | struct sel_arg_struct a; | ||
71 | |||
72 | if (copy_from_user(&a, arg, sizeof(a))) | ||
73 | return -EFAULT; | ||
74 | /* sys_select() does the appropriate kernel locking */ | ||
75 | return sys_select(a.n, a.inp, a.outp, a.exp, a.tvp); | ||
76 | } | ||
77 | |||
78 | /* | ||
79 | * sys_ipc() is the de-multiplexer for the SysV IPC calls.. | ||
80 | * | ||
81 | * This is really horribly ugly. | ||
82 | */ | ||
83 | asmlinkage int sys_ipc(uint call, int first, int second, | ||
84 | int third, void __user *ptr, long fifth) | ||
85 | { | ||
86 | int version, ret; | ||
87 | |||
88 | version = call >> 16; /* hack for backward compatibility */ | ||
89 | call &= 0xffff; | ||
90 | |||
91 | switch (call) { | ||
92 | case SEMOP: | ||
93 | return sys_semtimedop(first, (struct sembuf __user *)ptr, second, NULL); | ||
94 | case SEMTIMEDOP: | ||
95 | return sys_semtimedop(first, (struct sembuf __user *)ptr, second, | ||
96 | (const struct timespec __user *)fifth); | ||
97 | |||
98 | case SEMGET: | ||
99 | return sys_semget(first, second, third); | ||
100 | case SEMCTL: { | ||
101 | union semun fourth; | ||
102 | if (!ptr) | ||
103 | return -EINVAL; | ||
104 | if (get_user(fourth.__pad, (void __user * __user *) ptr)) | ||
105 | return -EFAULT; | ||
106 | return sys_semctl(first, second, third, fourth); | ||
107 | } | ||
108 | |||
109 | case MSGSND: | ||
110 | return sys_msgsnd(first, (struct msgbuf __user *) ptr, | ||
111 | second, third); | ||
112 | case MSGRCV: | ||
113 | switch (version) { | ||
114 | case 0: { | ||
115 | struct ipc_kludge tmp; | ||
116 | if (!ptr) | ||
117 | return -EINVAL; | ||
118 | |||
119 | if (copy_from_user(&tmp, | ||
120 | (struct ipc_kludge __user *) ptr, | ||
121 | sizeof(tmp))) | ||
122 | return -EFAULT; | ||
123 | return sys_msgrcv(first, tmp.msgp, second, | ||
124 | tmp.msgtyp, third); | ||
125 | } | ||
126 | default: | ||
127 | return sys_msgrcv(first, | ||
128 | (struct msgbuf __user *) ptr, | ||
129 | second, fifth, third); | ||
130 | } | ||
131 | case MSGGET: | ||
132 | return sys_msgget((key_t) first, second); | ||
133 | case MSGCTL: | ||
134 | return sys_msgctl(first, second, (struct msqid_ds __user *) ptr); | ||
135 | |||
136 | case SHMAT: | ||
137 | switch (version) { | ||
138 | default: { | ||
139 | ulong raddr; | ||
140 | ret = do_shmat(first, (char __user *) ptr, second, &raddr); | ||
141 | if (ret) | ||
142 | return ret; | ||
143 | return put_user(raddr, (ulong __user *) third); | ||
144 | } | ||
145 | case 1: /* iBCS2 emulator entry point */ | ||
146 | if (!segment_eq(get_fs(), get_ds())) | ||
147 | return -EINVAL; | ||
148 | /* The "(ulong *) third" is valid _only_ because of the kernel segment thing */ | ||
149 | return do_shmat(first, (char __user *) ptr, second, (ulong *) third); | ||
150 | } | ||
151 | case SHMDT: | ||
152 | return sys_shmdt((char __user *)ptr); | ||
153 | case SHMGET: | ||
154 | return sys_shmget(first, second, third); | ||
155 | case SHMCTL: | ||
156 | return sys_shmctl(first, second, | ||
157 | (struct shmid_ds __user *) ptr); | ||
158 | default: | ||
159 | return -ENOSYS; | ||
160 | } | ||
161 | } | ||
162 | |||
163 | /* | ||
164 | * Old cruft | ||
165 | */ | ||
166 | asmlinkage int sys_uname(struct old_utsname __user *name) | ||
167 | { | ||
168 | int err; | ||
169 | if (!name) | ||
170 | return -EFAULT; | ||
171 | down_read(&uts_sem); | ||
172 | err = copy_to_user(name, utsname(), sizeof(*name)); | ||
173 | up_read(&uts_sem); | ||
174 | return err? -EFAULT:0; | ||
175 | } | ||
176 | |||
177 | asmlinkage int sys_olduname(struct oldold_utsname __user *name) | ||
178 | { | ||
179 | int error; | ||
180 | |||
181 | if (!name) | ||
182 | return -EFAULT; | ||
183 | if (!access_ok(VERIFY_WRITE, name, sizeof(struct oldold_utsname))) | ||
184 | return -EFAULT; | ||
185 | |||
186 | down_read(&uts_sem); | ||
187 | |||
188 | error = __copy_to_user(&name->sysname, &utsname()->sysname, | ||
189 | __OLD_UTS_LEN); | ||
190 | error |= __put_user(0, name->sysname + __OLD_UTS_LEN); | ||
191 | error |= __copy_to_user(&name->nodename, &utsname()->nodename, | ||
192 | __OLD_UTS_LEN); | ||
193 | error |= __put_user(0, name->nodename + __OLD_UTS_LEN); | ||
194 | error |= __copy_to_user(&name->release, &utsname()->release, | ||
195 | __OLD_UTS_LEN); | ||
196 | error |= __put_user(0, name->release + __OLD_UTS_LEN); | ||
197 | error |= __copy_to_user(&name->version, &utsname()->version, | ||
198 | __OLD_UTS_LEN); | ||
199 | error |= __put_user(0, name->version + __OLD_UTS_LEN); | ||
200 | error |= __copy_to_user(&name->machine, &utsname()->machine, | ||
201 | __OLD_UTS_LEN); | ||
202 | error |= __put_user(0, name->machine + __OLD_UTS_LEN); | ||
203 | |||
204 | up_read(&uts_sem); | ||
205 | |||
206 | error = error ? -EFAULT : 0; | ||
207 | |||
208 | return error; | ||
209 | } | ||
210 | |||
211 | |||
212 | /* | ||
213 | * Do a system call from kernel instead of calling sys_execve so we | 28 | * Do a system call from kernel instead of calling sys_execve so we |
214 | * end up with proper pt_regs. | 29 | * end up with proper pt_regs. |
215 | */ | 30 | */ |
diff --git a/arch/x86/kernel/sys_x86_64.c b/arch/x86/kernel/sys_x86_64.c index 8aa2057efd12..ff14a5044ce6 100644 --- a/arch/x86/kernel/sys_x86_64.c +++ b/arch/x86/kernel/sys_x86_64.c | |||
@@ -209,15 +209,3 @@ bottomup: | |||
209 | 209 | ||
210 | return addr; | 210 | return addr; |
211 | } | 211 | } |
212 | |||
213 | |||
214 | SYSCALL_DEFINE1(uname, struct new_utsname __user *, name) | ||
215 | { | ||
216 | int err; | ||
217 | down_read(&uts_sem); | ||
218 | err = copy_to_user(name, utsname(), sizeof(*name)); | ||
219 | up_read(&uts_sem); | ||
220 | if (personality(current->personality) == PER_LINUX32) | ||
221 | err |= copy_to_user(&name->machine, "i686", 5); | ||
222 | return err ? -EFAULT : 0; | ||
223 | } | ||
diff --git a/arch/x86/kernel/syscall_table_32.S b/arch/x86/kernel/syscall_table_32.S index 15228b5d3eb7..8b3729341216 100644 --- a/arch/x86/kernel/syscall_table_32.S +++ b/arch/x86/kernel/syscall_table_32.S | |||
@@ -81,7 +81,7 @@ ENTRY(sys_call_table) | |||
81 | .long sys_settimeofday | 81 | .long sys_settimeofday |
82 | .long sys_getgroups16 /* 80 */ | 82 | .long sys_getgroups16 /* 80 */ |
83 | .long sys_setgroups16 | 83 | .long sys_setgroups16 |
84 | .long old_select | 84 | .long sys_old_select |
85 | .long sys_symlink | 85 | .long sys_symlink |
86 | .long sys_lstat | 86 | .long sys_lstat |
87 | .long sys_readlink /* 85 */ | 87 | .long sys_readlink /* 85 */ |
@@ -89,7 +89,7 @@ ENTRY(sys_call_table) | |||
89 | .long sys_swapon | 89 | .long sys_swapon |
90 | .long sys_reboot | 90 | .long sys_reboot |
91 | .long sys_old_readdir | 91 | .long sys_old_readdir |
92 | .long old_mmap /* 90 */ | 92 | .long sys_old_mmap /* 90 */ |
93 | .long sys_munmap | 93 | .long sys_munmap |
94 | .long sys_truncate | 94 | .long sys_truncate |
95 | .long sys_ftruncate | 95 | .long sys_ftruncate |
diff --git a/arch/xtensa/include/asm/pci.h b/arch/xtensa/include/asm/pci.h index 66410acf18b4..4609b0f15f1f 100644 --- a/arch/xtensa/include/asm/pci.h +++ b/arch/xtensa/include/asm/pci.h | |||
@@ -56,14 +56,6 @@ struct pci_dev; | |||
56 | 56 | ||
57 | #define PCI_DMA_BUS_IS_PHYS (1) | 57 | #define PCI_DMA_BUS_IS_PHYS (1) |
58 | 58 | ||
59 | /* pci_unmap_{page,single} is a no-op, so */ | ||
60 | #define DECLARE_PCI_UNMAP_ADDR(ADDR_NAME) | ||
61 | #define DECLARE_PCI_UNMAP_LEN(LEN_NAME) | ||
62 | #define pci_unmap_addr(PTR, ADDR_NAME) (0) | ||
63 | #define pci_unmap_addr_set(PTR, ADDR_NAME, VAL) do { } while (0) | ||
64 | #define pci_ubnmap_len(PTR, LEN_NAME) (0) | ||
65 | #define pci_unmap_len_set(PTR, LEN_NAME, VAL) do { } while (0) | ||
66 | |||
67 | /* Map a range of PCI memory or I/O space for a device into user space */ | 59 | /* Map a range of PCI memory or I/O space for a device into user space */ |
68 | int pci_mmap_page_range(struct pci_dev *pdev, struct vm_area_struct *vma, | 60 | int pci_mmap_page_range(struct pci_dev *pdev, struct vm_area_struct *vma, |
69 | enum pci_mmap_state mmap_state, int write_combine); | 61 | enum pci_mmap_state mmap_state, int write_combine); |
diff --git a/arch/xtensa/include/asm/ptrace.h b/arch/xtensa/include/asm/ptrace.h index 905e1e619654..3c549f798727 100644 --- a/arch/xtensa/include/asm/ptrace.h +++ b/arch/xtensa/include/asm/ptrace.h | |||
@@ -113,6 +113,7 @@ struct pt_regs { | |||
113 | 113 | ||
114 | #include <variant/core.h> | 114 | #include <variant/core.h> |
115 | 115 | ||
116 | # define arch_has_single_step() (1) | ||
116 | # define task_pt_regs(tsk) ((struct pt_regs*) \ | 117 | # define task_pt_regs(tsk) ((struct pt_regs*) \ |
117 | (task_stack_page(tsk) + KERNEL_STACK_SIZE - (XCHAL_NUM_AREGS-16)*4) - 1) | 118 | (task_stack_page(tsk) + KERNEL_STACK_SIZE - (XCHAL_NUM_AREGS-16)*4) - 1) |
118 | # define user_mode(regs) (((regs)->ps & 0x00000020)!=0) | 119 | # define user_mode(regs) (((regs)->ps & 0x00000020)!=0) |
diff --git a/arch/xtensa/kernel/ptrace.c b/arch/xtensa/kernel/ptrace.c index 9486882ef0af..9d4e1ceb3f09 100644 --- a/arch/xtensa/kernel/ptrace.c +++ b/arch/xtensa/kernel/ptrace.c | |||
@@ -30,6 +30,17 @@ | |||
30 | #include <asm/elf.h> | 30 | #include <asm/elf.h> |
31 | #include <asm/coprocessor.h> | 31 | #include <asm/coprocessor.h> |
32 | 32 | ||
33 | |||
34 | void user_enable_single_step(struct task_struct *child) | ||
35 | { | ||
36 | child->ptrace |= PT_SINGLESTEP; | ||
37 | } | ||
38 | |||
39 | void user_disable_single_step(struct task_struct *child) | ||
40 | { | ||
41 | child->ptrace &= ~PT_SINGLESTEP; | ||
42 | } | ||
43 | |||
33 | /* | 44 | /* |
34 | * Called by kernel/ptrace.c when detaching to disable single stepping. | 45 | * Called by kernel/ptrace.c when detaching to disable single stepping. |
35 | */ | 46 | */ |
@@ -268,51 +279,6 @@ long arch_ptrace(struct task_struct *child, long request, long addr, long data) | |||
268 | ret = ptrace_pokeusr(child, addr, data); | 279 | ret = ptrace_pokeusr(child, addr, data); |
269 | break; | 280 | break; |
270 | 281 | ||
271 | /* continue and stop at next (return from) syscall */ | ||
272 | |||
273 | case PTRACE_SYSCALL: | ||
274 | case PTRACE_CONT: /* restart after signal. */ | ||
275 | { | ||
276 | ret = -EIO; | ||
277 | if (!valid_signal(data)) | ||
278 | break; | ||
279 | if (request == PTRACE_SYSCALL) | ||
280 | set_tsk_thread_flag(child, TIF_SYSCALL_TRACE); | ||
281 | else | ||
282 | clear_tsk_thread_flag(child, TIF_SYSCALL_TRACE); | ||
283 | child->exit_code = data; | ||
284 | /* Make sure the single step bit is not set. */ | ||
285 | child->ptrace &= ~PT_SINGLESTEP; | ||
286 | wake_up_process(child); | ||
287 | ret = 0; | ||
288 | break; | ||
289 | } | ||
290 | |||
291 | /* | ||
292 | * make the child exit. Best I can do is send it a sigkill. | ||
293 | * perhaps it should be put in the status that it wants to | ||
294 | * exit. | ||
295 | */ | ||
296 | case PTRACE_KILL: | ||
297 | ret = 0; | ||
298 | if (child->exit_state == EXIT_ZOMBIE) /* already dead */ | ||
299 | break; | ||
300 | child->exit_code = SIGKILL; | ||
301 | child->ptrace &= ~PT_SINGLESTEP; | ||
302 | wake_up_process(child); | ||
303 | break; | ||
304 | |||
305 | case PTRACE_SINGLESTEP: | ||
306 | ret = -EIO; | ||
307 | if (!valid_signal(data)) | ||
308 | break; | ||
309 | clear_tsk_thread_flag(child, TIF_SYSCALL_TRACE); | ||
310 | child->ptrace |= PT_SINGLESTEP; | ||
311 | child->exit_code = data; | ||
312 | wake_up_process(child); | ||
313 | ret = 0; | ||
314 | break; | ||
315 | |||
316 | case PTRACE_GETREGS: | 282 | case PTRACE_GETREGS: |
317 | ret = ptrace_getregs(child, (void __user *) data); | 283 | ret = ptrace_getregs(child, (void __user *) data); |
318 | break; | 284 | break; |