Contents of /trunk/kernel-alx/patches-3.10/0178-3.10.79-all-fixes.patch
Parent Directory | Revision Log
Revision 2666 -
(show annotations)
(download)
Tue Jul 21 16:20:24 2015 UTC (9 years, 2 months ago) by niro
File size: 23678 byte(s)
Tue Jul 21 16:20:24 2015 UTC (9 years, 2 months ago) by niro
File size: 23678 byte(s)
-linux-3.10.79
1 | diff --git a/Documentation/devicetree/bindings/dma/fsl-mxs-dma.txt b/Documentation/devicetree/bindings/dma/fsl-mxs-dma.txt |
2 | index a4873e5e3e36..e30e184f50c7 100644 |
3 | --- a/Documentation/devicetree/bindings/dma/fsl-mxs-dma.txt |
4 | +++ b/Documentation/devicetree/bindings/dma/fsl-mxs-dma.txt |
5 | @@ -38,7 +38,7 @@ dma_apbx: dma-apbx@80024000 { |
6 | 80 81 68 69 |
7 | 70 71 72 73 |
8 | 74 75 76 77>; |
9 | - interrupt-names = "auart4-rx", "aurat4-tx", "spdif-tx", "empty", |
10 | + interrupt-names = "auart4-rx", "auart4-tx", "spdif-tx", "empty", |
11 | "saif0", "saif1", "i2c0", "i2c1", |
12 | "auart0-rx", "auart0-tx", "auart1-rx", "auart1-tx", |
13 | "auart2-rx", "auart2-tx", "auart3-rx", "auart3-tx"; |
14 | diff --git a/Makefile b/Makefile |
15 | index cf99a9b53c6f..e26cb1e56266 100644 |
16 | --- a/Makefile |
17 | +++ b/Makefile |
18 | @@ -1,6 +1,6 @@ |
19 | VERSION = 3 |
20 | PATCHLEVEL = 10 |
21 | -SUBLEVEL = 78 |
22 | +SUBLEVEL = 79 |
23 | EXTRAVERSION = |
24 | NAME = TOSSUG Baby Fish |
25 | |
26 | diff --git a/arch/arm/boot/dts/armada-xp-openblocks-ax3-4.dts b/arch/arm/boot/dts/armada-xp-openblocks-ax3-4.dts |
27 | index 9746d0e7fcb4..5dfb3d354470 100644 |
28 | --- a/arch/arm/boot/dts/armada-xp-openblocks-ax3-4.dts |
29 | +++ b/arch/arm/boot/dts/armada-xp-openblocks-ax3-4.dts |
30 | @@ -32,6 +32,10 @@ |
31 | 0xf0000000 0 0xf0000000 0x8000000 /* Device Bus, NOR 128MiB */>; |
32 | |
33 | internal-regs { |
34 | + rtc@10300 { |
35 | + /* No crystal connected to the internal RTC */ |
36 | + status = "disabled"; |
37 | + }; |
38 | serial@12000 { |
39 | clock-frequency = <250000000>; |
40 | status = "okay"; |
41 | diff --git a/arch/arm/boot/dts/imx23-olinuxino.dts b/arch/arm/boot/dts/imx23-olinuxino.dts |
42 | index d107c4af321f..6fef54416cbf 100644 |
43 | --- a/arch/arm/boot/dts/imx23-olinuxino.dts |
44 | +++ b/arch/arm/boot/dts/imx23-olinuxino.dts |
45 | @@ -89,6 +89,7 @@ |
46 | |
47 | ahb@80080000 { |
48 | usb0: usb@80080000 { |
49 | + dr_mode = "host"; |
50 | vbus-supply = <®_usb0_vbus>; |
51 | status = "okay"; |
52 | }; |
53 | diff --git a/arch/arm/boot/dts/imx25.dtsi b/arch/arm/boot/dts/imx25.dtsi |
54 | index 97d1a550eb98..2a571bcacaf4 100644 |
55 | --- a/arch/arm/boot/dts/imx25.dtsi |
56 | +++ b/arch/arm/boot/dts/imx25.dtsi |
57 | @@ -393,6 +393,7 @@ |
58 | |
59 | pwm4: pwm@53fc8000 { |
60 | compatible = "fsl,imx25-pwm", "fsl,imx27-pwm"; |
61 | + #pwm-cells = <2>; |
62 | reg = <0x53fc8000 0x4000>; |
63 | clocks = <&clks 108>, <&clks 52>; |
64 | clock-names = "ipg", "per"; |
65 | diff --git a/arch/arm/boot/dts/imx28.dtsi b/arch/arm/boot/dts/imx28.dtsi |
66 | index 4c10a1968c0e..2e76b84c6bad 100644 |
67 | --- a/arch/arm/boot/dts/imx28.dtsi |
68 | +++ b/arch/arm/boot/dts/imx28.dtsi |
69 | @@ -691,7 +691,7 @@ |
70 | 80 81 68 69 |
71 | 70 71 72 73 |
72 | 74 75 76 77>; |
73 | - interrupt-names = "auart4-rx", "aurat4-tx", "spdif-tx", "empty", |
74 | + interrupt-names = "auart4-rx", "auart4-tx", "spdif-tx", "empty", |
75 | "saif0", "saif1", "i2c0", "i2c1", |
76 | "auart0-rx", "auart0-tx", "auart1-rx", "auart1-tx", |
77 | "auart2-rx", "auart2-tx", "auart3-rx", "auart3-tx"; |
78 | diff --git a/drivers/acpi/acpica/dsopcode.c b/drivers/acpi/acpica/dsopcode.c |
79 | index ee6367b8eaf7..e9b13b92ba1e 100644 |
80 | --- a/drivers/acpi/acpica/dsopcode.c |
81 | +++ b/drivers/acpi/acpica/dsopcode.c |
82 | @@ -539,8 +539,7 @@ acpi_ds_eval_table_region_operands(struct acpi_walk_state *walk_state, |
83 | return_ACPI_STATUS(AE_NOT_EXIST); |
84 | } |
85 | |
86 | - obj_desc->region.address = |
87 | - (acpi_physical_address) ACPI_TO_INTEGER(table); |
88 | + obj_desc->region.address = ACPI_PTR_TO_PHYSADDR(table); |
89 | obj_desc->region.length = table->length; |
90 | |
91 | ACPI_DEBUG_PRINT((ACPI_DB_EXEC, "RgnObj %p Addr %8.8X%8.8X Len %X\n", |
92 | diff --git a/drivers/acpi/acpica/tbinstal.c b/drivers/acpi/acpica/tbinstal.c |
93 | index e57cd38004e3..0d2351596a3c 100644 |
94 | --- a/drivers/acpi/acpica/tbinstal.c |
95 | +++ b/drivers/acpi/acpica/tbinstal.c |
96 | @@ -301,8 +301,7 @@ struct acpi_table_header *acpi_tb_table_override(struct acpi_table_header |
97 | ACPI_EXCEPTION((AE_INFO, AE_NO_MEMORY, |
98 | "%4.4s %p Attempted physical table override failed", |
99 | table_header->signature, |
100 | - ACPI_CAST_PTR(void, |
101 | - table_desc->address))); |
102 | + ACPI_PHYSADDR_TO_PTR(table_desc->address))); |
103 | return (NULL); |
104 | } |
105 | |
106 | @@ -318,7 +317,7 @@ struct acpi_table_header *acpi_tb_table_override(struct acpi_table_header |
107 | ACPI_INFO((AE_INFO, |
108 | "%4.4s %p %s table override, new table: %p", |
109 | table_header->signature, |
110 | - ACPI_CAST_PTR(void, table_desc->address), |
111 | + ACPI_PHYSADDR_TO_PTR(table_desc->address), |
112 | override_type, new_table)); |
113 | |
114 | /* We can now unmap/delete the original table (if fully mapped) */ |
115 | diff --git a/drivers/acpi/acpica/tbxfroot.c b/drivers/acpi/acpica/tbxfroot.c |
116 | index 7c2ecfb7c2c3..e12486031d97 100644 |
117 | --- a/drivers/acpi/acpica/tbxfroot.c |
118 | +++ b/drivers/acpi/acpica/tbxfroot.c |
119 | @@ -118,7 +118,7 @@ static acpi_status acpi_tb_validate_rsdp(struct acpi_table_rsdp *rsdp) |
120 | * |
121 | ******************************************************************************/ |
122 | |
123 | -acpi_status acpi_find_root_pointer(acpi_size *table_address) |
124 | +acpi_status acpi_find_root_pointer(acpi_physical_address * table_address) |
125 | { |
126 | u8 *table_ptr; |
127 | u8 *mem_rover; |
128 | @@ -176,7 +176,8 @@ acpi_status acpi_find_root_pointer(acpi_size *table_address) |
129 | physical_address += |
130 | (u32) ACPI_PTR_DIFF(mem_rover, table_ptr); |
131 | |
132 | - *table_address = physical_address; |
133 | + *table_address = |
134 | + (acpi_physical_address) physical_address; |
135 | return_ACPI_STATUS(AE_OK); |
136 | } |
137 | } |
138 | @@ -209,7 +210,7 @@ acpi_status acpi_find_root_pointer(acpi_size *table_address) |
139 | (ACPI_HI_RSDP_WINDOW_BASE + |
140 | ACPI_PTR_DIFF(mem_rover, table_ptr)); |
141 | |
142 | - *table_address = physical_address; |
143 | + *table_address = (acpi_physical_address) physical_address; |
144 | return_ACPI_STATUS(AE_OK); |
145 | } |
146 | |
147 | diff --git a/drivers/gpio/gpiolib.c b/drivers/gpio/gpiolib.c |
148 | index ca1cb2d756c2..c3768fafff45 100644 |
149 | --- a/drivers/gpio/gpiolib.c |
150 | +++ b/drivers/gpio/gpiolib.c |
151 | @@ -752,6 +752,7 @@ static struct class gpio_class = { |
152 | */ |
153 | static int gpiod_export(struct gpio_desc *desc, bool direction_may_change) |
154 | { |
155 | + struct gpio_chip *chip; |
156 | unsigned long flags; |
157 | int status; |
158 | const char *ioname = NULL; |
159 | @@ -769,8 +770,16 @@ static int gpiod_export(struct gpio_desc *desc, bool direction_may_change) |
160 | return -EINVAL; |
161 | } |
162 | |
163 | + chip = desc->chip; |
164 | + |
165 | mutex_lock(&sysfs_lock); |
166 | |
167 | + /* check if chip is being removed */ |
168 | + if (!chip || !chip->exported) { |
169 | + status = -ENODEV; |
170 | + goto fail_unlock; |
171 | + } |
172 | + |
173 | spin_lock_irqsave(&gpio_lock, flags); |
174 | if (!test_bit(FLAG_REQUESTED, &desc->flags) || |
175 | test_bit(FLAG_EXPORT, &desc->flags)) { |
176 | @@ -1040,6 +1049,8 @@ static void gpiochip_unexport(struct gpio_chip *chip) |
177 | { |
178 | int status; |
179 | struct device *dev; |
180 | + struct gpio_desc *desc; |
181 | + unsigned int i; |
182 | |
183 | mutex_lock(&sysfs_lock); |
184 | dev = class_find_device(&gpio_class, NULL, chip, match_export); |
185 | @@ -1047,6 +1058,7 @@ static void gpiochip_unexport(struct gpio_chip *chip) |
186 | sysfs_remove_group(&dev->kobj, &gpiochip_attr_group); |
187 | put_device(dev); |
188 | device_unregister(dev); |
189 | + /* prevent further gpiod exports */ |
190 | chip->exported = 0; |
191 | status = 0; |
192 | } else |
193 | @@ -1056,6 +1068,13 @@ static void gpiochip_unexport(struct gpio_chip *chip) |
194 | if (status) |
195 | pr_debug("%s: chip %s status %d\n", __func__, |
196 | chip->label, status); |
197 | + |
198 | + /* unregister gpiod class devices owned by sysfs */ |
199 | + for (i = 0; i < chip->ngpio; i++) { |
200 | + desc = &chip->desc[i]; |
201 | + if (test_and_clear_bit(FLAG_SYSFS, &desc->flags)) |
202 | + gpiod_free(desc); |
203 | + } |
204 | } |
205 | |
206 | static int __init gpiolib_sysfs_init(void) |
207 | @@ -1265,6 +1284,8 @@ int gpiochip_remove(struct gpio_chip *chip) |
208 | int status = 0; |
209 | unsigned id; |
210 | |
211 | + gpiochip_unexport(chip); |
212 | + |
213 | spin_lock_irqsave(&gpio_lock, flags); |
214 | |
215 | gpiochip_remove_pin_ranges(chip); |
216 | @@ -1285,9 +1306,6 @@ int gpiochip_remove(struct gpio_chip *chip) |
217 | |
218 | spin_unlock_irqrestore(&gpio_lock, flags); |
219 | |
220 | - if (status == 0) |
221 | - gpiochip_unexport(chip); |
222 | - |
223 | return status; |
224 | } |
225 | EXPORT_SYMBOL_GPL(gpiochip_remove); |
226 | diff --git a/drivers/gpu/drm/i915/intel_lvds.c b/drivers/gpu/drm/i915/intel_lvds.c |
227 | index f5d1dc5b5563..54ebfbe370c6 100644 |
228 | --- a/drivers/gpu/drm/i915/intel_lvds.c |
229 | +++ b/drivers/gpu/drm/i915/intel_lvds.c |
230 | @@ -1007,12 +1007,28 @@ static int intel_dual_link_lvds_callback(const struct dmi_system_id *id) |
231 | static const struct dmi_system_id intel_dual_link_lvds[] = { |
232 | { |
233 | .callback = intel_dual_link_lvds_callback, |
234 | - .ident = "Apple MacBook Pro (Core i5/i7 Series)", |
235 | + .ident = "Apple MacBook Pro 15\" (2010)", |
236 | + .matches = { |
237 | + DMI_MATCH(DMI_SYS_VENDOR, "Apple Inc."), |
238 | + DMI_MATCH(DMI_PRODUCT_NAME, "MacBookPro6,2"), |
239 | + }, |
240 | + }, |
241 | + { |
242 | + .callback = intel_dual_link_lvds_callback, |
243 | + .ident = "Apple MacBook Pro 15\" (2011)", |
244 | .matches = { |
245 | DMI_MATCH(DMI_SYS_VENDOR, "Apple Inc."), |
246 | DMI_MATCH(DMI_PRODUCT_NAME, "MacBookPro8,2"), |
247 | }, |
248 | }, |
249 | + { |
250 | + .callback = intel_dual_link_lvds_callback, |
251 | + .ident = "Apple MacBook Pro 15\" (2012)", |
252 | + .matches = { |
253 | + DMI_MATCH(DMI_SYS_VENDOR, "Apple Inc."), |
254 | + DMI_MATCH(DMI_PRODUCT_NAME, "MacBookPro9,1"), |
255 | + }, |
256 | + }, |
257 | { } /* terminating entry */ |
258 | }; |
259 | |
260 | diff --git a/drivers/mmc/card/block.c b/drivers/mmc/card/block.c |
261 | index 7ad66823d022..56998eca1a8d 100644 |
262 | --- a/drivers/mmc/card/block.c |
263 | +++ b/drivers/mmc/card/block.c |
264 | @@ -908,6 +908,18 @@ static inline void mmc_blk_reset_success(struct mmc_blk_data *md, int type) |
265 | md->reset_done &= ~type; |
266 | } |
267 | |
268 | +int mmc_access_rpmb(struct mmc_queue *mq) |
269 | +{ |
270 | + struct mmc_blk_data *md = mq->data; |
271 | + /* |
272 | + * If this is a RPMB partition access, return ture |
273 | + */ |
274 | + if (md && md->part_type == EXT_CSD_PART_CONFIG_ACC_RPMB) |
275 | + return true; |
276 | + |
277 | + return false; |
278 | +} |
279 | + |
280 | static int mmc_blk_issue_discard_rq(struct mmc_queue *mq, struct request *req) |
281 | { |
282 | struct mmc_blk_data *md = mq->data; |
283 | diff --git a/drivers/mmc/card/queue.c b/drivers/mmc/card/queue.c |
284 | index 9447a0e970d1..645519fe3acd 100644 |
285 | --- a/drivers/mmc/card/queue.c |
286 | +++ b/drivers/mmc/card/queue.c |
287 | @@ -37,7 +37,7 @@ static int mmc_prep_request(struct request_queue *q, struct request *req) |
288 | return BLKPREP_KILL; |
289 | } |
290 | |
291 | - if (mq && mmc_card_removed(mq->card)) |
292 | + if (mq && (mmc_card_removed(mq->card) || mmc_access_rpmb(mq))) |
293 | return BLKPREP_KILL; |
294 | |
295 | req->cmd_flags |= REQ_DONTPREP; |
296 | diff --git a/drivers/mmc/card/queue.h b/drivers/mmc/card/queue.h |
297 | index 5752d50049a3..99e6521e6169 100644 |
298 | --- a/drivers/mmc/card/queue.h |
299 | +++ b/drivers/mmc/card/queue.h |
300 | @@ -73,4 +73,6 @@ extern void mmc_queue_bounce_post(struct mmc_queue_req *); |
301 | extern int mmc_packed_init(struct mmc_queue *, struct mmc_card *); |
302 | extern void mmc_packed_clean(struct mmc_queue *); |
303 | |
304 | +extern int mmc_access_rpmb(struct mmc_queue *); |
305 | + |
306 | #endif |
307 | diff --git a/drivers/pinctrl/core.c b/drivers/pinctrl/core.c |
308 | index 9c9fc69a01b3..ea40c5139766 100644 |
309 | --- a/drivers/pinctrl/core.c |
310 | +++ b/drivers/pinctrl/core.c |
311 | @@ -1077,7 +1077,7 @@ void devm_pinctrl_put(struct pinctrl *p) |
312 | EXPORT_SYMBOL_GPL(devm_pinctrl_put); |
313 | |
314 | int pinctrl_register_map(struct pinctrl_map const *maps, unsigned num_maps, |
315 | - bool dup, bool locked) |
316 | + bool dup) |
317 | { |
318 | int i, ret; |
319 | struct pinctrl_maps *maps_node; |
320 | @@ -1145,11 +1145,9 @@ int pinctrl_register_map(struct pinctrl_map const *maps, unsigned num_maps, |
321 | maps_node->maps = maps; |
322 | } |
323 | |
324 | - if (!locked) |
325 | - mutex_lock(&pinctrl_maps_mutex); |
326 | + mutex_lock(&pinctrl_maps_mutex); |
327 | list_add_tail(&maps_node->node, &pinctrl_maps); |
328 | - if (!locked) |
329 | - mutex_unlock(&pinctrl_maps_mutex); |
330 | + mutex_unlock(&pinctrl_maps_mutex); |
331 | |
332 | return 0; |
333 | } |
334 | @@ -1164,7 +1162,7 @@ int pinctrl_register_map(struct pinctrl_map const *maps, unsigned num_maps, |
335 | int pinctrl_register_mappings(struct pinctrl_map const *maps, |
336 | unsigned num_maps) |
337 | { |
338 | - return pinctrl_register_map(maps, num_maps, true, false); |
339 | + return pinctrl_register_map(maps, num_maps, true); |
340 | } |
341 | |
342 | void pinctrl_unregister_map(struct pinctrl_map const *map) |
343 | diff --git a/drivers/pinctrl/core.h b/drivers/pinctrl/core.h |
344 | index 75476b3d87da..b24ea846c867 100644 |
345 | --- a/drivers/pinctrl/core.h |
346 | +++ b/drivers/pinctrl/core.h |
347 | @@ -183,7 +183,7 @@ static inline struct pin_desc *pin_desc_get(struct pinctrl_dev *pctldev, |
348 | } |
349 | |
350 | int pinctrl_register_map(struct pinctrl_map const *maps, unsigned num_maps, |
351 | - bool dup, bool locked); |
352 | + bool dup); |
353 | void pinctrl_unregister_map(struct pinctrl_map const *map); |
354 | |
355 | extern int pinctrl_force_sleep(struct pinctrl_dev *pctldev); |
356 | diff --git a/drivers/pinctrl/devicetree.c b/drivers/pinctrl/devicetree.c |
357 | index 340fb4e6c600..fd91c4c31f6b 100644 |
358 | --- a/drivers/pinctrl/devicetree.c |
359 | +++ b/drivers/pinctrl/devicetree.c |
360 | @@ -92,7 +92,7 @@ static int dt_remember_or_free_map(struct pinctrl *p, const char *statename, |
361 | dt_map->num_maps = num_maps; |
362 | list_add_tail(&dt_map->node, &p->dt_maps); |
363 | |
364 | - return pinctrl_register_map(map, num_maps, false, true); |
365 | + return pinctrl_register_map(map, num_maps, false); |
366 | } |
367 | |
368 | struct pinctrl_dev *of_pinctrl_get(struct device_node *np) |
369 | diff --git a/drivers/tty/hvc/hvc_xen.c b/drivers/tty/hvc/hvc_xen.c |
370 | index 4fc32c8091e9..ff92155dbc88 100644 |
371 | --- a/drivers/tty/hvc/hvc_xen.c |
372 | +++ b/drivers/tty/hvc/hvc_xen.c |
373 | @@ -299,11 +299,27 @@ static int xen_initial_domain_console_init(void) |
374 | return 0; |
375 | } |
376 | |
377 | +static void xen_console_update_evtchn(struct xencons_info *info) |
378 | +{ |
379 | + if (xen_hvm_domain()) { |
380 | + uint64_t v; |
381 | + int err; |
382 | + |
383 | + err = hvm_get_parameter(HVM_PARAM_CONSOLE_EVTCHN, &v); |
384 | + if (!err && v) |
385 | + info->evtchn = v; |
386 | + } else |
387 | + info->evtchn = xen_start_info->console.domU.evtchn; |
388 | +} |
389 | + |
390 | void xen_console_resume(void) |
391 | { |
392 | struct xencons_info *info = vtermno_to_xencons(HVC_COOKIE); |
393 | - if (info != NULL && info->irq) |
394 | + if (info != NULL && info->irq) { |
395 | + if (!xen_initial_domain()) |
396 | + xen_console_update_evtchn(info); |
397 | rebind_evtchn_irq(info->evtchn, info->irq); |
398 | + } |
399 | } |
400 | |
401 | static void xencons_disconnect_backend(struct xencons_info *info) |
402 | diff --git a/fs/nilfs2/btree.c b/fs/nilfs2/btree.c |
403 | index ecdbae19a766..090d8ce25bd1 100644 |
404 | --- a/fs/nilfs2/btree.c |
405 | +++ b/fs/nilfs2/btree.c |
406 | @@ -388,7 +388,7 @@ static int nilfs_btree_root_broken(const struct nilfs_btree_node *node, |
407 | nchildren = nilfs_btree_node_get_nchildren(node); |
408 | |
409 | if (unlikely(level < NILFS_BTREE_LEVEL_NODE_MIN || |
410 | - level > NILFS_BTREE_LEVEL_MAX || |
411 | + level >= NILFS_BTREE_LEVEL_MAX || |
412 | nchildren < 0 || |
413 | nchildren > NILFS_BTREE_ROOT_NCHILDREN_MAX)) { |
414 | pr_crit("NILFS: bad btree root (inode number=%lu): level = %d, flags = 0x%x, nchildren = %d\n", |
415 | diff --git a/fs/ocfs2/dlm/dlmmaster.c b/fs/ocfs2/dlm/dlmmaster.c |
416 | index 2b941113e423..2c119d5d04c9 100644 |
417 | --- a/fs/ocfs2/dlm/dlmmaster.c |
418 | +++ b/fs/ocfs2/dlm/dlmmaster.c |
419 | @@ -729,6 +729,19 @@ lookup: |
420 | if (tmpres) { |
421 | spin_unlock(&dlm->spinlock); |
422 | spin_lock(&tmpres->spinlock); |
423 | + |
424 | + /* |
425 | + * Right after dlm spinlock was released, dlm_thread could have |
426 | + * purged the lockres. Check if lockres got unhashed. If so |
427 | + * start over. |
428 | + */ |
429 | + if (hlist_unhashed(&tmpres->hash_node)) { |
430 | + spin_unlock(&tmpres->spinlock); |
431 | + dlm_lockres_put(tmpres); |
432 | + tmpres = NULL; |
433 | + goto lookup; |
434 | + } |
435 | + |
436 | /* Wait on the thread that is mastering the resource */ |
437 | if (tmpres->owner == DLM_LOCK_RES_OWNER_UNKNOWN) { |
438 | __dlm_wait_on_lockres(tmpres); |
439 | diff --git a/include/acpi/acpixf.h b/include/acpi/acpixf.h |
440 | index 454881e6450a..fcabb1597d5b 100644 |
441 | --- a/include/acpi/acpixf.h |
442 | +++ b/include/acpi/acpixf.h |
443 | @@ -177,7 +177,7 @@ acpi_status acpi_load_tables(void); |
444 | */ |
445 | acpi_status acpi_reallocate_root_table(void); |
446 | |
447 | -acpi_status acpi_find_root_pointer(acpi_size *rsdp_address); |
448 | +acpi_status acpi_find_root_pointer(acpi_physical_address *rsdp_address); |
449 | |
450 | acpi_status acpi_unload_table_id(acpi_owner_id id); |
451 | |
452 | diff --git a/include/linux/interrupt.h b/include/linux/interrupt.h |
453 | index 6de0f2c14ec0..f05efb1160fb 100644 |
454 | --- a/include/linux/interrupt.h |
455 | +++ b/include/linux/interrupt.h |
456 | @@ -11,8 +11,6 @@ |
457 | #include <linux/irqnr.h> |
458 | #include <linux/hardirq.h> |
459 | #include <linux/irqflags.h> |
460 | -#include <linux/smp.h> |
461 | -#include <linux/percpu.h> |
462 | #include <linux/hrtimer.h> |
463 | #include <linux/kref.h> |
464 | #include <linux/workqueue.h> |
465 | @@ -488,15 +486,6 @@ extern void __raise_softirq_irqoff(unsigned int nr); |
466 | extern void raise_softirq_irqoff(unsigned int nr); |
467 | extern void raise_softirq(unsigned int nr); |
468 | |
469 | -/* This is the worklist that queues up per-cpu softirq work. |
470 | - * |
471 | - * send_remote_sendirq() adds work to these lists, and |
472 | - * the softirq handler itself dequeues from them. The queues |
473 | - * are protected by disabling local cpu interrupts and they must |
474 | - * only be accessed by the local cpu that they are for. |
475 | - */ |
476 | -DECLARE_PER_CPU(struct list_head [NR_SOFTIRQS], softirq_work_list); |
477 | - |
478 | DECLARE_PER_CPU(struct task_struct *, ksoftirqd); |
479 | |
480 | static inline struct task_struct *this_cpu_ksoftirqd(void) |
481 | @@ -504,17 +493,6 @@ static inline struct task_struct *this_cpu_ksoftirqd(void) |
482 | return this_cpu_read(ksoftirqd); |
483 | } |
484 | |
485 | -/* Try to send a softirq to a remote cpu. If this cannot be done, the |
486 | - * work will be queued to the local cpu. |
487 | - */ |
488 | -extern void send_remote_softirq(struct call_single_data *cp, int cpu, int softirq); |
489 | - |
490 | -/* Like send_remote_softirq(), but the caller must disable local cpu interrupts |
491 | - * and compute the current cpu, passed in as 'this_cpu'. |
492 | - */ |
493 | -extern void __send_remote_softirq(struct call_single_data *cp, int cpu, |
494 | - int this_cpu, int softirq); |
495 | - |
496 | /* Tasklets --- multithreaded analogue of BHs. |
497 | |
498 | Main feature differing them of generic softirqs: tasklet |
499 | diff --git a/include/linux/nilfs2_fs.h b/include/linux/nilfs2_fs.h |
500 | index 98755767c7b0..1108acaacfc6 100644 |
501 | --- a/include/linux/nilfs2_fs.h |
502 | +++ b/include/linux/nilfs2_fs.h |
503 | @@ -458,7 +458,7 @@ struct nilfs_btree_node { |
504 | /* level */ |
505 | #define NILFS_BTREE_LEVEL_DATA 0 |
506 | #define NILFS_BTREE_LEVEL_NODE_MIN (NILFS_BTREE_LEVEL_DATA + 1) |
507 | -#define NILFS_BTREE_LEVEL_MAX 14 |
508 | +#define NILFS_BTREE_LEVEL_MAX 14 /* Max level (exclusive) */ |
509 | |
510 | /** |
511 | * struct nilfs_palloc_group_desc - block group descriptor |
512 | diff --git a/kernel/softirq.c b/kernel/softirq.c |
513 | index 21956f00cb51..b538df367de3 100644 |
514 | --- a/kernel/softirq.c |
515 | +++ b/kernel/softirq.c |
516 | @@ -6,8 +6,6 @@ |
517 | * Distribute under GPLv2. |
518 | * |
519 | * Rewritten. Old one was good in 2.2, but in 2.3 it was immoral. --ANK (990903) |
520 | - * |
521 | - * Remote softirq infrastructure is by Jens Axboe. |
522 | */ |
523 | |
524 | #include <linux/export.h> |
525 | @@ -620,146 +618,17 @@ void tasklet_hrtimer_init(struct tasklet_hrtimer *ttimer, |
526 | } |
527 | EXPORT_SYMBOL_GPL(tasklet_hrtimer_init); |
528 | |
529 | -/* |
530 | - * Remote softirq bits |
531 | - */ |
532 | - |
533 | -DEFINE_PER_CPU(struct list_head [NR_SOFTIRQS], softirq_work_list); |
534 | -EXPORT_PER_CPU_SYMBOL(softirq_work_list); |
535 | - |
536 | -static void __local_trigger(struct call_single_data *cp, int softirq) |
537 | -{ |
538 | - struct list_head *head = &__get_cpu_var(softirq_work_list[softirq]); |
539 | - |
540 | - list_add_tail(&cp->list, head); |
541 | - |
542 | - /* Trigger the softirq only if the list was previously empty. */ |
543 | - if (head->next == &cp->list) |
544 | - raise_softirq_irqoff(softirq); |
545 | -} |
546 | - |
547 | -#ifdef CONFIG_USE_GENERIC_SMP_HELPERS |
548 | -static void remote_softirq_receive(void *data) |
549 | -{ |
550 | - struct call_single_data *cp = data; |
551 | - unsigned long flags; |
552 | - int softirq; |
553 | - |
554 | - softirq = *(int *)cp->info; |
555 | - local_irq_save(flags); |
556 | - __local_trigger(cp, softirq); |
557 | - local_irq_restore(flags); |
558 | -} |
559 | - |
560 | -static int __try_remote_softirq(struct call_single_data *cp, int cpu, int softirq) |
561 | -{ |
562 | - if (cpu_online(cpu)) { |
563 | - cp->func = remote_softirq_receive; |
564 | - cp->info = &softirq; |
565 | - cp->flags = 0; |
566 | - |
567 | - __smp_call_function_single(cpu, cp, 0); |
568 | - return 0; |
569 | - } |
570 | - return 1; |
571 | -} |
572 | -#else /* CONFIG_USE_GENERIC_SMP_HELPERS */ |
573 | -static int __try_remote_softirq(struct call_single_data *cp, int cpu, int softirq) |
574 | -{ |
575 | - return 1; |
576 | -} |
577 | -#endif |
578 | - |
579 | -/** |
580 | - * __send_remote_softirq - try to schedule softirq work on a remote cpu |
581 | - * @cp: private SMP call function data area |
582 | - * @cpu: the remote cpu |
583 | - * @this_cpu: the currently executing cpu |
584 | - * @softirq: the softirq for the work |
585 | - * |
586 | - * Attempt to schedule softirq work on a remote cpu. If this cannot be |
587 | - * done, the work is instead queued up on the local cpu. |
588 | - * |
589 | - * Interrupts must be disabled. |
590 | - */ |
591 | -void __send_remote_softirq(struct call_single_data *cp, int cpu, int this_cpu, int softirq) |
592 | -{ |
593 | - if (cpu == this_cpu || __try_remote_softirq(cp, cpu, softirq)) |
594 | - __local_trigger(cp, softirq); |
595 | -} |
596 | -EXPORT_SYMBOL(__send_remote_softirq); |
597 | - |
598 | -/** |
599 | - * send_remote_softirq - try to schedule softirq work on a remote cpu |
600 | - * @cp: private SMP call function data area |
601 | - * @cpu: the remote cpu |
602 | - * @softirq: the softirq for the work |
603 | - * |
604 | - * Like __send_remote_softirq except that disabling interrupts and |
605 | - * computing the current cpu is done for the caller. |
606 | - */ |
607 | -void send_remote_softirq(struct call_single_data *cp, int cpu, int softirq) |
608 | -{ |
609 | - unsigned long flags; |
610 | - int this_cpu; |
611 | - |
612 | - local_irq_save(flags); |
613 | - this_cpu = smp_processor_id(); |
614 | - __send_remote_softirq(cp, cpu, this_cpu, softirq); |
615 | - local_irq_restore(flags); |
616 | -} |
617 | -EXPORT_SYMBOL(send_remote_softirq); |
618 | - |
619 | -static int __cpuinit remote_softirq_cpu_notify(struct notifier_block *self, |
620 | - unsigned long action, void *hcpu) |
621 | -{ |
622 | - /* |
623 | - * If a CPU goes away, splice its entries to the current CPU |
624 | - * and trigger a run of the softirq |
625 | - */ |
626 | - if (action == CPU_DEAD || action == CPU_DEAD_FROZEN) { |
627 | - int cpu = (unsigned long) hcpu; |
628 | - int i; |
629 | - |
630 | - local_irq_disable(); |
631 | - for (i = 0; i < NR_SOFTIRQS; i++) { |
632 | - struct list_head *head = &per_cpu(softirq_work_list[i], cpu); |
633 | - struct list_head *local_head; |
634 | - |
635 | - if (list_empty(head)) |
636 | - continue; |
637 | - |
638 | - local_head = &__get_cpu_var(softirq_work_list[i]); |
639 | - list_splice_init(head, local_head); |
640 | - raise_softirq_irqoff(i); |
641 | - } |
642 | - local_irq_enable(); |
643 | - } |
644 | - |
645 | - return NOTIFY_OK; |
646 | -} |
647 | - |
648 | -static struct notifier_block __cpuinitdata remote_softirq_cpu_notifier = { |
649 | - .notifier_call = remote_softirq_cpu_notify, |
650 | -}; |
651 | - |
652 | void __init softirq_init(void) |
653 | { |
654 | int cpu; |
655 | |
656 | for_each_possible_cpu(cpu) { |
657 | - int i; |
658 | - |
659 | per_cpu(tasklet_vec, cpu).tail = |
660 | &per_cpu(tasklet_vec, cpu).head; |
661 | per_cpu(tasklet_hi_vec, cpu).tail = |
662 | &per_cpu(tasklet_hi_vec, cpu).head; |
663 | - for (i = 0; i < NR_SOFTIRQS; i++) |
664 | - INIT_LIST_HEAD(&per_cpu(softirq_work_list[i], cpu)); |
665 | } |
666 | |
667 | - register_hotcpu_notifier(&remote_softirq_cpu_notifier); |
668 | - |
669 | open_softirq(TASKLET_SOFTIRQ, tasklet_action); |
670 | open_softirq(HI_SOFTIRQ, tasklet_hi_action); |
671 | } |
672 | diff --git a/mm/memory-failure.c b/mm/memory-failure.c |
673 | index 603f1fa1b7a3..ca96f411b034 100644 |
674 | --- a/mm/memory-failure.c |
675 | +++ b/mm/memory-failure.c |
676 | @@ -1117,10 +1117,10 @@ int memory_failure(unsigned long pfn, int trapno, int flags) |
677 | * The check (unnecessarily) ignores LRU pages being isolated and |
678 | * walked by the page reclaim code, however that's not a big loss. |
679 | */ |
680 | - if (!PageHuge(p) && !PageTransTail(p)) { |
681 | - if (!PageLRU(p)) |
682 | - shake_page(p, 0); |
683 | - if (!PageLRU(p)) { |
684 | + if (!PageHuge(p)) { |
685 | + if (!PageLRU(hpage)) |
686 | + shake_page(hpage, 0); |
687 | + if (!PageLRU(hpage)) { |
688 | /* |
689 | * shake_page could have turned it free. |
690 | */ |
691 | diff --git a/sound/oss/sequencer.c b/sound/oss/sequencer.c |
692 | index 4ff60a6427d9..2e67dd590be5 100644 |
693 | --- a/sound/oss/sequencer.c |
694 | +++ b/sound/oss/sequencer.c |
695 | @@ -683,13 +683,8 @@ static int seq_timing_event(unsigned char *event_rec) |
696 | break; |
697 | |
698 | case TMR_ECHO: |
699 | - if (seq_mode == SEQ_2) |
700 | - seq_copy_to_input(event_rec, 8); |
701 | - else |
702 | - { |
703 | - parm = (parm << 8 | SEQ_ECHO); |
704 | - seq_copy_to_input((unsigned char *) &parm, 4); |
705 | - } |
706 | + parm = (parm << 8 | SEQ_ECHO); |
707 | + seq_copy_to_input((unsigned char *) &parm, 4); |
708 | break; |
709 | |
710 | default:; |
711 | @@ -1332,7 +1327,6 @@ int sequencer_ioctl(int dev, struct file *file, unsigned int cmd, void __user *a |
712 | int mode = translate_mode(file); |
713 | struct synth_info inf; |
714 | struct seq_event_rec event_rec; |
715 | - unsigned long flags; |
716 | int __user *p = arg; |
717 | |
718 | orig_dev = dev = dev >> 4; |
719 | @@ -1487,9 +1481,7 @@ int sequencer_ioctl(int dev, struct file *file, unsigned int cmd, void __user *a |
720 | case SNDCTL_SEQ_OUTOFBAND: |
721 | if (copy_from_user(&event_rec, arg, sizeof(event_rec))) |
722 | return -EFAULT; |
723 | - spin_lock_irqsave(&lock,flags); |
724 | play_event(event_rec.arr); |
725 | - spin_unlock_irqrestore(&lock,flags); |
726 | return 0; |
727 | |
728 | case SNDCTL_MIDI_INFO: |