Magellan Linux

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2672 - (hide 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 niro 2672 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: