Annotation of /trunk/kernel26-alx/patches-3.10/0178-3.10.79-all-fixes.patch
Parent Directory | Revision Log
Revision 2672 -
(hide annotations)
(download)
Tue Jul 21 16:46:35 2015 UTC (9 years, 2 months ago) by niro
File size: 23678 byte(s)
Tue Jul 21 16:46:35 2015 UTC (9 years, 2 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 = <®_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: |