Magellan Linux

Contents of /trunk/kernel26-alx/patches-3.10/0178-3.10.79-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2672 - (show annotations) (download)
Tue Jul 21 16:46:35 2015 UTC (8 years, 9 months ago) by niro
File size: 23678 byte(s)
-3.10.84-alx-r1
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 = <&reg_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: