Contents of /trunk/kernel-alx/patches-3.10/0110-3.10.11-all-fixes.patch
Parent Directory | Revision Log
Revision 2288 -
(show annotations)
(download)
Wed Sep 25 06:47:47 2013 UTC (11 years, 1 month ago) by niro
File size: 39064 byte(s)
Wed Sep 25 06:47:47 2013 UTC (11 years, 1 month ago) by niro
File size: 39064 byte(s)
-linux-3.10 patches
1 | diff --git a/Documentation/hwmon/k10temp b/Documentation/hwmon/k10temp |
2 | index 90956b6..4dfdc8f 100644 |
3 | --- a/Documentation/hwmon/k10temp |
4 | +++ b/Documentation/hwmon/k10temp |
5 | @@ -12,6 +12,7 @@ Supported chips: |
6 | * AMD Family 12h processors: "Llano" (E2/A4/A6/A8-Series) |
7 | * AMD Family 14h processors: "Brazos" (C/E/G/Z-Series) |
8 | * AMD Family 15h processors: "Bulldozer" (FX-Series), "Trinity" |
9 | +* AMD Family 16h processors: "Kabini" |
10 | |
11 | Prefix: 'k10temp' |
12 | Addresses scanned: PCI space |
13 | diff --git a/Makefile b/Makefile |
14 | index b119684..595076d 100644 |
15 | --- a/Makefile |
16 | +++ b/Makefile |
17 | @@ -1,6 +1,6 @@ |
18 | VERSION = 3 |
19 | PATCHLEVEL = 10 |
20 | -SUBLEVEL = 10 |
21 | +SUBLEVEL = 11 |
22 | EXTRAVERSION = |
23 | NAME = TOSSUG Baby Fish |
24 | |
25 | diff --git a/arch/arm/xen/enlighten.c b/arch/arm/xen/enlighten.c |
26 | index 13609e0..05db95d 100644 |
27 | --- a/arch/arm/xen/enlighten.c |
28 | +++ b/arch/arm/xen/enlighten.c |
29 | @@ -170,6 +170,7 @@ static void __init xen_percpu_init(void *unused) |
30 | per_cpu(xen_vcpu, cpu) = vcpup; |
31 | |
32 | enable_percpu_irq(xen_events_irq, 0); |
33 | + put_cpu(); |
34 | } |
35 | |
36 | static void xen_restart(char str, const char *cmd) |
37 | diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig |
38 | index 74991fe..fe404e7 100644 |
39 | --- a/arch/powerpc/Kconfig |
40 | +++ b/arch/powerpc/Kconfig |
41 | @@ -986,6 +986,7 @@ config RELOCATABLE |
42 | must live at a different physical address than the primary |
43 | kernel. |
44 | |
45 | +# This value must have zeroes in the bottom 60 bits otherwise lots will break |
46 | config PAGE_OFFSET |
47 | hex |
48 | default "0xc000000000000000" |
49 | diff --git a/arch/powerpc/include/asm/page.h b/arch/powerpc/include/asm/page.h |
50 | index 988c812..b9f4262 100644 |
51 | --- a/arch/powerpc/include/asm/page.h |
52 | +++ b/arch/powerpc/include/asm/page.h |
53 | @@ -211,9 +211,19 @@ extern long long virt_phys_offset; |
54 | #define __va(x) ((void *)(unsigned long)((phys_addr_t)(x) + VIRT_PHYS_OFFSET)) |
55 | #define __pa(x) ((unsigned long)(x) - VIRT_PHYS_OFFSET) |
56 | #else |
57 | +#ifdef CONFIG_PPC64 |
58 | +/* |
59 | + * gcc miscompiles (unsigned long)(&static_var) - PAGE_OFFSET |
60 | + * with -mcmodel=medium, so we use & and | instead of - and + on 64-bit. |
61 | + */ |
62 | +#define __va(x) ((void *)(unsigned long)((phys_addr_t)(x) | PAGE_OFFSET)) |
63 | +#define __pa(x) ((unsigned long)(x) & 0x0fffffffffffffffUL) |
64 | + |
65 | +#else /* 32-bit, non book E */ |
66 | #define __va(x) ((void *)(unsigned long)((phys_addr_t)(x) + PAGE_OFFSET - MEMORY_START)) |
67 | #define __pa(x) ((unsigned long)(x) - PAGE_OFFSET + MEMORY_START) |
68 | #endif |
69 | +#endif |
70 | |
71 | /* |
72 | * Unfortunately the PLT is in the BSS in the PPC32 ELF ABI, |
73 | diff --git a/arch/powerpc/kernel/lparcfg.c b/arch/powerpc/kernel/lparcfg.c |
74 | index d92f387..e2a0a16 100644 |
75 | --- a/arch/powerpc/kernel/lparcfg.c |
76 | +++ b/arch/powerpc/kernel/lparcfg.c |
77 | @@ -35,7 +35,13 @@ |
78 | #include <asm/vdso_datapage.h> |
79 | #include <asm/vio.h> |
80 | #include <asm/mmu.h> |
81 | +#include <asm/machdep.h> |
82 | |
83 | + |
84 | +/* |
85 | + * This isn't a module but we expose that to userspace |
86 | + * via /proc so leave the definitions here |
87 | + */ |
88 | #define MODULE_VERS "1.9" |
89 | #define MODULE_NAME "lparcfg" |
90 | |
91 | @@ -418,7 +424,8 @@ static void parse_em_data(struct seq_file *m) |
92 | { |
93 | unsigned long retbuf[PLPAR_HCALL_BUFSIZE]; |
94 | |
95 | - if (plpar_hcall(H_GET_EM_PARMS, retbuf) == H_SUCCESS) |
96 | + if (firmware_has_feature(FW_FEATURE_LPAR) && |
97 | + plpar_hcall(H_GET_EM_PARMS, retbuf) == H_SUCCESS) |
98 | seq_printf(m, "power_mode_data=%016lx\n", retbuf[0]); |
99 | } |
100 | |
101 | @@ -677,7 +684,6 @@ static int lparcfg_open(struct inode *inode, struct file *file) |
102 | } |
103 | |
104 | static const struct file_operations lparcfg_fops = { |
105 | - .owner = THIS_MODULE, |
106 | .read = seq_read, |
107 | .write = lparcfg_write, |
108 | .open = lparcfg_open, |
109 | @@ -699,14 +705,4 @@ static int __init lparcfg_init(void) |
110 | } |
111 | return 0; |
112 | } |
113 | - |
114 | -static void __exit lparcfg_cleanup(void) |
115 | -{ |
116 | - remove_proc_subtree("powerpc/lparcfg", NULL); |
117 | -} |
118 | - |
119 | -module_init(lparcfg_init); |
120 | -module_exit(lparcfg_cleanup); |
121 | -MODULE_DESCRIPTION("Interface for LPAR configuration data"); |
122 | -MODULE_AUTHOR("Dave Engebretsen"); |
123 | -MODULE_LICENSE("GPL"); |
124 | +machine_device_initcall(pseries, lparcfg_init); |
125 | diff --git a/arch/x86/mm/init.c b/arch/x86/mm/init.c |
126 | index 1f34e92..7a5bf1b 100644 |
127 | --- a/arch/x86/mm/init.c |
128 | +++ b/arch/x86/mm/init.c |
129 | @@ -78,8 +78,8 @@ __ref void *alloc_low_pages(unsigned int num) |
130 | return __va(pfn << PAGE_SHIFT); |
131 | } |
132 | |
133 | -/* need 4 4k for initial PMD_SIZE, 4k for 0-ISA_END_ADDRESS */ |
134 | -#define INIT_PGT_BUF_SIZE (5 * PAGE_SIZE) |
135 | +/* need 3 4k for initial PMD_SIZE, 3 4k for 0-ISA_END_ADDRESS */ |
136 | +#define INIT_PGT_BUF_SIZE (6 * PAGE_SIZE) |
137 | RESERVE_BRK(early_pgt_alloc, INIT_PGT_BUF_SIZE); |
138 | void __init early_alloc_pgt_buf(void) |
139 | { |
140 | diff --git a/drivers/acpi/ec.c b/drivers/acpi/ec.c |
141 | index 80403c1..45af90a 100644 |
142 | --- a/drivers/acpi/ec.c |
143 | +++ b/drivers/acpi/ec.c |
144 | @@ -987,6 +987,10 @@ static struct dmi_system_id __initdata ec_dmi_table[] = { |
145 | ec_skip_dsdt_scan, "HP Folio 13", { |
146 | DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"), |
147 | DMI_MATCH(DMI_PRODUCT_NAME, "HP Folio 13"),}, NULL}, |
148 | + { |
149 | + ec_validate_ecdt, "ASUS hardware", { |
150 | + DMI_MATCH(DMI_SYS_VENDOR, "ASUSTek Computer Inc."), |
151 | + DMI_MATCH(DMI_PRODUCT_NAME, "L4R"),}, NULL}, |
152 | {}, |
153 | }; |
154 | |
155 | diff --git a/drivers/base/memory.c b/drivers/base/memory.c |
156 | index 14f8a69..86abbff 100644 |
157 | --- a/drivers/base/memory.c |
158 | +++ b/drivers/base/memory.c |
159 | @@ -152,6 +152,8 @@ static ssize_t show_mem_removable(struct device *dev, |
160 | container_of(dev, struct memory_block, dev); |
161 | |
162 | for (i = 0; i < sections_per_block; i++) { |
163 | + if (!present_section_nr(mem->start_section_nr + i)) |
164 | + continue; |
165 | pfn = section_nr_to_pfn(mem->start_section_nr + i); |
166 | ret &= is_mem_section_removable(pfn, PAGES_PER_SECTION); |
167 | } |
168 | diff --git a/drivers/base/regmap/regcache-rbtree.c b/drivers/base/regmap/regcache-rbtree.c |
169 | index 02f490b..bb8c3bb 100644 |
170 | --- a/drivers/base/regmap/regcache-rbtree.c |
171 | +++ b/drivers/base/regmap/regcache-rbtree.c |
172 | @@ -362,7 +362,7 @@ static int regcache_rbtree_write(struct regmap *map, unsigned int reg, |
173 | rbnode = kzalloc(sizeof *rbnode, GFP_KERNEL); |
174 | if (!rbnode) |
175 | return -ENOMEM; |
176 | - rbnode->blklen = sizeof(*rbnode); |
177 | + rbnode->blklen = 1; |
178 | rbnode->base_reg = reg; |
179 | rbnode->block = kmalloc(rbnode->blklen * map->cache_word_size, |
180 | GFP_KERNEL); |
181 | diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h |
182 | index 01f6c2c..a365780 100644 |
183 | --- a/drivers/gpu/drm/i915/i915_reg.h |
184 | +++ b/drivers/gpu/drm/i915/i915_reg.h |
185 | @@ -4246,7 +4246,7 @@ |
186 | #define EDP_LINK_TRAIN_600MV_0DB_IVB (0x30 <<22) |
187 | #define EDP_LINK_TRAIN_600MV_3_5DB_IVB (0x36 <<22) |
188 | #define EDP_LINK_TRAIN_800MV_0DB_IVB (0x38 <<22) |
189 | -#define EDP_LINK_TRAIN_800MV_3_5DB_IVB (0x33 <<22) |
190 | +#define EDP_LINK_TRAIN_800MV_3_5DB_IVB (0x3e <<22) |
191 | |
192 | /* legacy values */ |
193 | #define EDP_LINK_TRAIN_500MV_0DB_IVB (0x00 <<22) |
194 | diff --git a/drivers/gpu/drm/nouveau/core/include/subdev/mc.h b/drivers/gpu/drm/nouveau/core/include/subdev/mc.h |
195 | index d550226..9d2cd20 100644 |
196 | --- a/drivers/gpu/drm/nouveau/core/include/subdev/mc.h |
197 | +++ b/drivers/gpu/drm/nouveau/core/include/subdev/mc.h |
198 | @@ -20,8 +20,8 @@ nouveau_mc(void *obj) |
199 | return (void *)nv_device(obj)->subdev[NVDEV_SUBDEV_MC]; |
200 | } |
201 | |
202 | -#define nouveau_mc_create(p,e,o,d) \ |
203 | - nouveau_mc_create_((p), (e), (o), sizeof(**d), (void **)d) |
204 | +#define nouveau_mc_create(p,e,o,m,d) \ |
205 | + nouveau_mc_create_((p), (e), (o), (m), sizeof(**d), (void **)d) |
206 | #define nouveau_mc_destroy(p) ({ \ |
207 | struct nouveau_mc *pmc = (p); _nouveau_mc_dtor(nv_object(pmc)); \ |
208 | }) |
209 | @@ -33,7 +33,8 @@ nouveau_mc(void *obj) |
210 | }) |
211 | |
212 | int nouveau_mc_create_(struct nouveau_object *, struct nouveau_object *, |
213 | - struct nouveau_oclass *, int, void **); |
214 | + struct nouveau_oclass *, const struct nouveau_mc_intr *, |
215 | + int, void **); |
216 | void _nouveau_mc_dtor(struct nouveau_object *); |
217 | int _nouveau_mc_init(struct nouveau_object *); |
218 | int _nouveau_mc_fini(struct nouveau_object *, bool); |
219 | diff --git a/drivers/gpu/drm/nouveau/core/subdev/mc/base.c b/drivers/gpu/drm/nouveau/core/subdev/mc/base.c |
220 | index 1c0330b..ec9cd6f 100644 |
221 | --- a/drivers/gpu/drm/nouveau/core/subdev/mc/base.c |
222 | +++ b/drivers/gpu/drm/nouveau/core/subdev/mc/base.c |
223 | @@ -80,7 +80,9 @@ _nouveau_mc_dtor(struct nouveau_object *object) |
224 | |
225 | int |
226 | nouveau_mc_create_(struct nouveau_object *parent, struct nouveau_object *engine, |
227 | - struct nouveau_oclass *oclass, int length, void **pobject) |
228 | + struct nouveau_oclass *oclass, |
229 | + const struct nouveau_mc_intr *intr_map, |
230 | + int length, void **pobject) |
231 | { |
232 | struct nouveau_device *device = nv_device(parent); |
233 | struct nouveau_mc *pmc; |
234 | @@ -92,6 +94,8 @@ nouveau_mc_create_(struct nouveau_object *parent, struct nouveau_object *engine, |
235 | if (ret) |
236 | return ret; |
237 | |
238 | + pmc->intr_map = intr_map; |
239 | + |
240 | ret = request_irq(device->pdev->irq, nouveau_mc_intr, |
241 | IRQF_SHARED, "nouveau", pmc); |
242 | if (ret < 0) |
243 | diff --git a/drivers/gpu/drm/nouveau/core/subdev/mc/nv04.c b/drivers/gpu/drm/nouveau/core/subdev/mc/nv04.c |
244 | index 8c76971..64aa4ed 100644 |
245 | --- a/drivers/gpu/drm/nouveau/core/subdev/mc/nv04.c |
246 | +++ b/drivers/gpu/drm/nouveau/core/subdev/mc/nv04.c |
247 | @@ -50,12 +50,11 @@ nv04_mc_ctor(struct nouveau_object *parent, struct nouveau_object *engine, |
248 | struct nv04_mc_priv *priv; |
249 | int ret; |
250 | |
251 | - ret = nouveau_mc_create(parent, engine, oclass, &priv); |
252 | + ret = nouveau_mc_create(parent, engine, oclass, nv04_mc_intr, &priv); |
253 | *pobject = nv_object(priv); |
254 | if (ret) |
255 | return ret; |
256 | |
257 | - priv->base.intr_map = nv04_mc_intr; |
258 | return 0; |
259 | } |
260 | |
261 | diff --git a/drivers/gpu/drm/nouveau/core/subdev/mc/nv44.c b/drivers/gpu/drm/nouveau/core/subdev/mc/nv44.c |
262 | index 5191937..d989178 100644 |
263 | --- a/drivers/gpu/drm/nouveau/core/subdev/mc/nv44.c |
264 | +++ b/drivers/gpu/drm/nouveau/core/subdev/mc/nv44.c |
265 | @@ -36,12 +36,11 @@ nv44_mc_ctor(struct nouveau_object *parent, struct nouveau_object *engine, |
266 | struct nv44_mc_priv *priv; |
267 | int ret; |
268 | |
269 | - ret = nouveau_mc_create(parent, engine, oclass, &priv); |
270 | + ret = nouveau_mc_create(parent, engine, oclass, nv04_mc_intr, &priv); |
271 | *pobject = nv_object(priv); |
272 | if (ret) |
273 | return ret; |
274 | |
275 | - priv->base.intr_map = nv04_mc_intr; |
276 | return 0; |
277 | } |
278 | |
279 | diff --git a/drivers/gpu/drm/nouveau/core/subdev/mc/nv50.c b/drivers/gpu/drm/nouveau/core/subdev/mc/nv50.c |
280 | index d796924..732d810 100644 |
281 | --- a/drivers/gpu/drm/nouveau/core/subdev/mc/nv50.c |
282 | +++ b/drivers/gpu/drm/nouveau/core/subdev/mc/nv50.c |
283 | @@ -52,12 +52,11 @@ nv50_mc_ctor(struct nouveau_object *parent, struct nouveau_object *engine, |
284 | struct nv50_mc_priv *priv; |
285 | int ret; |
286 | |
287 | - ret = nouveau_mc_create(parent, engine, oclass, &priv); |
288 | + ret = nouveau_mc_create(parent, engine, oclass, nv50_mc_intr, &priv); |
289 | *pobject = nv_object(priv); |
290 | if (ret) |
291 | return ret; |
292 | |
293 | - priv->base.intr_map = nv50_mc_intr; |
294 | return 0; |
295 | } |
296 | |
297 | diff --git a/drivers/gpu/drm/nouveau/core/subdev/mc/nv98.c b/drivers/gpu/drm/nouveau/core/subdev/mc/nv98.c |
298 | index e82fd21..0d57b4d 100644 |
299 | --- a/drivers/gpu/drm/nouveau/core/subdev/mc/nv98.c |
300 | +++ b/drivers/gpu/drm/nouveau/core/subdev/mc/nv98.c |
301 | @@ -54,12 +54,11 @@ nv98_mc_ctor(struct nouveau_object *parent, struct nouveau_object *engine, |
302 | struct nv98_mc_priv *priv; |
303 | int ret; |
304 | |
305 | - ret = nouveau_mc_create(parent, engine, oclass, &priv); |
306 | + ret = nouveau_mc_create(parent, engine, oclass, nv98_mc_intr, &priv); |
307 | *pobject = nv_object(priv); |
308 | if (ret) |
309 | return ret; |
310 | |
311 | - priv->base.intr_map = nv98_mc_intr; |
312 | return 0; |
313 | } |
314 | |
315 | diff --git a/drivers/gpu/drm/nouveau/core/subdev/mc/nvc0.c b/drivers/gpu/drm/nouveau/core/subdev/mc/nvc0.c |
316 | index 737bd4b..4c97cd2 100644 |
317 | --- a/drivers/gpu/drm/nouveau/core/subdev/mc/nvc0.c |
318 | +++ b/drivers/gpu/drm/nouveau/core/subdev/mc/nvc0.c |
319 | @@ -56,12 +56,11 @@ nvc0_mc_ctor(struct nouveau_object *parent, struct nouveau_object *engine, |
320 | struct nvc0_mc_priv *priv; |
321 | int ret; |
322 | |
323 | - ret = nouveau_mc_create(parent, engine, oclass, &priv); |
324 | + ret = nouveau_mc_create(parent, engine, oclass, nvc0_mc_intr, &priv); |
325 | *pobject = nv_object(priv); |
326 | if (ret) |
327 | return ret; |
328 | |
329 | - priv->base.intr_map = nvc0_mc_intr; |
330 | return 0; |
331 | } |
332 | |
333 | diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_gmr.c b/drivers/gpu/drm/vmwgfx/vmwgfx_gmr.c |
334 | index 3751730..1a0bf07 100644 |
335 | --- a/drivers/gpu/drm/vmwgfx/vmwgfx_gmr.c |
336 | +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_gmr.c |
337 | @@ -29,7 +29,9 @@ |
338 | #include <drm/drmP.h> |
339 | #include <drm/ttm/ttm_bo_driver.h> |
340 | |
341 | -#define VMW_PPN_SIZE sizeof(unsigned long) |
342 | +#define VMW_PPN_SIZE (sizeof(unsigned long)) |
343 | +/* A future safe maximum remap size. */ |
344 | +#define VMW_PPN_PER_REMAP ((31 * 1024) / VMW_PPN_SIZE) |
345 | |
346 | static int vmw_gmr2_bind(struct vmw_private *dev_priv, |
347 | struct page *pages[], |
348 | @@ -38,43 +40,61 @@ static int vmw_gmr2_bind(struct vmw_private *dev_priv, |
349 | { |
350 | SVGAFifoCmdDefineGMR2 define_cmd; |
351 | SVGAFifoCmdRemapGMR2 remap_cmd; |
352 | - uint32_t define_size = sizeof(define_cmd) + 4; |
353 | - uint32_t remap_size = VMW_PPN_SIZE * num_pages + sizeof(remap_cmd) + 4; |
354 | uint32_t *cmd; |
355 | uint32_t *cmd_orig; |
356 | + uint32_t define_size = sizeof(define_cmd) + sizeof(*cmd); |
357 | + uint32_t remap_num = num_pages / VMW_PPN_PER_REMAP + ((num_pages % VMW_PPN_PER_REMAP) > 0); |
358 | + uint32_t remap_size = VMW_PPN_SIZE * num_pages + (sizeof(remap_cmd) + sizeof(*cmd)) * remap_num; |
359 | + uint32_t remap_pos = 0; |
360 | + uint32_t cmd_size = define_size + remap_size; |
361 | uint32_t i; |
362 | |
363 | - cmd_orig = cmd = vmw_fifo_reserve(dev_priv, define_size + remap_size); |
364 | + cmd_orig = cmd = vmw_fifo_reserve(dev_priv, cmd_size); |
365 | if (unlikely(cmd == NULL)) |
366 | return -ENOMEM; |
367 | |
368 | define_cmd.gmrId = gmr_id; |
369 | define_cmd.numPages = num_pages; |
370 | |
371 | + *cmd++ = SVGA_CMD_DEFINE_GMR2; |
372 | + memcpy(cmd, &define_cmd, sizeof(define_cmd)); |
373 | + cmd += sizeof(define_cmd) / sizeof(*cmd); |
374 | + |
375 | + /* |
376 | + * Need to split the command if there are too many |
377 | + * pages that goes into the gmr. |
378 | + */ |
379 | + |
380 | remap_cmd.gmrId = gmr_id; |
381 | remap_cmd.flags = (VMW_PPN_SIZE > sizeof(*cmd)) ? |
382 | SVGA_REMAP_GMR2_PPN64 : SVGA_REMAP_GMR2_PPN32; |
383 | - remap_cmd.offsetPages = 0; |
384 | - remap_cmd.numPages = num_pages; |
385 | |
386 | - *cmd++ = SVGA_CMD_DEFINE_GMR2; |
387 | - memcpy(cmd, &define_cmd, sizeof(define_cmd)); |
388 | - cmd += sizeof(define_cmd) / sizeof(uint32); |
389 | + while (num_pages > 0) { |
390 | + unsigned long nr = min(num_pages, (unsigned long)VMW_PPN_PER_REMAP); |
391 | + |
392 | + remap_cmd.offsetPages = remap_pos; |
393 | + remap_cmd.numPages = nr; |
394 | |
395 | - *cmd++ = SVGA_CMD_REMAP_GMR2; |
396 | - memcpy(cmd, &remap_cmd, sizeof(remap_cmd)); |
397 | - cmd += sizeof(remap_cmd) / sizeof(uint32); |
398 | + *cmd++ = SVGA_CMD_REMAP_GMR2; |
399 | + memcpy(cmd, &remap_cmd, sizeof(remap_cmd)); |
400 | + cmd += sizeof(remap_cmd) / sizeof(*cmd); |
401 | |
402 | - for (i = 0; i < num_pages; ++i) { |
403 | - if (VMW_PPN_SIZE <= 4) |
404 | - *cmd = page_to_pfn(*pages++); |
405 | - else |
406 | - *((uint64_t *)cmd) = page_to_pfn(*pages++); |
407 | + for (i = 0; i < nr; ++i) { |
408 | + if (VMW_PPN_SIZE <= 4) |
409 | + *cmd = page_to_pfn(*pages++); |
410 | + else |
411 | + *((uint64_t *)cmd) = page_to_pfn(*pages++); |
412 | |
413 | - cmd += VMW_PPN_SIZE / sizeof(*cmd); |
414 | + cmd += VMW_PPN_SIZE / sizeof(*cmd); |
415 | + } |
416 | + |
417 | + num_pages -= nr; |
418 | + remap_pos += nr; |
419 | } |
420 | |
421 | - vmw_fifo_commit(dev_priv, define_size + remap_size); |
422 | + BUG_ON(cmd != cmd_orig + cmd_size / sizeof(*cmd)); |
423 | + |
424 | + vmw_fifo_commit(dev_priv, cmd_size); |
425 | |
426 | return 0; |
427 | } |
428 | diff --git a/drivers/hwmon/Kconfig b/drivers/hwmon/Kconfig |
429 | index 0428e8a..df064e8 100644 |
430 | --- a/drivers/hwmon/Kconfig |
431 | +++ b/drivers/hwmon/Kconfig |
432 | @@ -296,8 +296,8 @@ config SENSORS_K10TEMP |
433 | If you say yes here you get support for the temperature |
434 | sensor(s) inside your CPU. Supported are later revisions of |
435 | the AMD Family 10h and all revisions of the AMD Family 11h, |
436 | - 12h (Llano), 14h (Brazos) and 15h (Bulldozer/Trinity) |
437 | - microarchitectures. |
438 | + 12h (Llano), 14h (Brazos), 15h (Bulldozer/Trinity) and |
439 | + 16h (Kabini) microarchitectures. |
440 | |
441 | This driver can also be built as a module. If so, the module |
442 | will be called k10temp. |
443 | diff --git a/drivers/hwmon/k10temp.c b/drivers/hwmon/k10temp.c |
444 | index e3b037c..e633856 100644 |
445 | --- a/drivers/hwmon/k10temp.c |
446 | +++ b/drivers/hwmon/k10temp.c |
447 | @@ -1,5 +1,5 @@ |
448 | /* |
449 | - * k10temp.c - AMD Family 10h/11h/12h/14h/15h processor hardware monitoring |
450 | + * k10temp.c - AMD Family 10h/11h/12h/14h/15h/16h processor hardware monitoring |
451 | * |
452 | * Copyright (c) 2009 Clemens Ladisch <clemens@ladisch.de> |
453 | * |
454 | @@ -211,6 +211,7 @@ static DEFINE_PCI_DEVICE_TABLE(k10temp_id_table) = { |
455 | { PCI_VDEVICE(AMD, PCI_DEVICE_ID_AMD_CNB17H_F3) }, |
456 | { PCI_VDEVICE(AMD, PCI_DEVICE_ID_AMD_15H_NB_F3) }, |
457 | { PCI_VDEVICE(AMD, PCI_DEVICE_ID_AMD_15H_M10H_F3) }, |
458 | + { PCI_VDEVICE(AMD, PCI_DEVICE_ID_AMD_16H_NB_F3) }, |
459 | {} |
460 | }; |
461 | MODULE_DEVICE_TABLE(pci, k10temp_id_table); |
462 | diff --git a/drivers/misc/hpilo.c b/drivers/misc/hpilo.c |
463 | index 621c7a3..b83e3ca 100644 |
464 | --- a/drivers/misc/hpilo.c |
465 | +++ b/drivers/misc/hpilo.c |
466 | @@ -759,7 +759,7 @@ static int ilo_probe(struct pci_dev *pdev, |
467 | |
468 | /* Ignore subsystem_device = 0x1979 (set by BIOS) */ |
469 | if (pdev->subsystem_device == 0x1979) |
470 | - goto out; |
471 | + return 0; |
472 | |
473 | if (max_ccb > MAX_CCB) |
474 | max_ccb = MAX_CCB; |
475 | @@ -899,7 +899,7 @@ static void __exit ilo_exit(void) |
476 | class_destroy(ilo_class); |
477 | } |
478 | |
479 | -MODULE_VERSION("1.4"); |
480 | +MODULE_VERSION("1.4.1"); |
481 | MODULE_ALIAS(ILO_NAME); |
482 | MODULE_DESCRIPTION(ILO_NAME); |
483 | MODULE_AUTHOR("David Altobelli <david.altobelli@hp.com>"); |
484 | diff --git a/drivers/misc/mei/hw-me.c b/drivers/misc/mei/hw-me.c |
485 | index 700fe55..1bf3f8b 100644 |
486 | --- a/drivers/misc/mei/hw-me.c |
487 | +++ b/drivers/misc/mei/hw-me.c |
488 | @@ -176,16 +176,14 @@ static void mei_me_hw_reset(struct mei_device *dev, bool intr_enable) |
489 | struct mei_me_hw *hw = to_me_hw(dev); |
490 | u32 hcsr = mei_hcsr_read(hw); |
491 | |
492 | - dev_dbg(&dev->pdev->dev, "before reset HCSR = 0x%08x.\n", hcsr); |
493 | - |
494 | - hcsr |= (H_RST | H_IG); |
495 | + hcsr |= H_RST | H_IG | H_IS; |
496 | |
497 | if (intr_enable) |
498 | hcsr |= H_IE; |
499 | else |
500 | - hcsr |= ~H_IE; |
501 | + hcsr &= ~H_IE; |
502 | |
503 | - mei_hcsr_set(hw, hcsr); |
504 | + mei_me_reg_write(hw, H_CSR, hcsr); |
505 | |
506 | if (dev->dev_state == MEI_DEV_POWER_DOWN) |
507 | mei_me_hw_reset_release(dev); |
508 | diff --git a/drivers/net/wireless/ath/ath9k/htc_drv_txrx.c b/drivers/net/wireless/ath/ath9k/htc_drv_txrx.c |
509 | index 6bd0e92..417a089 100644 |
510 | --- a/drivers/net/wireless/ath/ath9k/htc_drv_txrx.c |
511 | +++ b/drivers/net/wireless/ath/ath9k/htc_drv_txrx.c |
512 | @@ -448,6 +448,7 @@ static void ath9k_htc_tx_process(struct ath9k_htc_priv *priv, |
513 | struct ieee80211_conf *cur_conf = &priv->hw->conf; |
514 | bool txok; |
515 | int slot; |
516 | + int hdrlen, padsize; |
517 | |
518 | slot = strip_drv_header(priv, skb); |
519 | if (slot < 0) { |
520 | @@ -504,6 +505,15 @@ send_mac80211: |
521 | |
522 | ath9k_htc_tx_clear_slot(priv, slot); |
523 | |
524 | + /* Remove padding before handing frame back to mac80211 */ |
525 | + hdrlen = ieee80211_get_hdrlen_from_skb(skb); |
526 | + |
527 | + padsize = hdrlen & 3; |
528 | + if (padsize && skb->len > hdrlen + padsize) { |
529 | + memmove(skb->data + padsize, skb->data, hdrlen); |
530 | + skb_pull(skb, padsize); |
531 | + } |
532 | + |
533 | /* Send status to mac80211 */ |
534 | ieee80211_tx_status(priv->hw, skb); |
535 | } |
536 | diff --git a/drivers/net/wireless/ath/ath9k/init.c b/drivers/net/wireless/ath/ath9k/init.c |
537 | index 2ba4945..bd126c2 100644 |
538 | --- a/drivers/net/wireless/ath/ath9k/init.c |
539 | +++ b/drivers/net/wireless/ath/ath9k/init.c |
540 | @@ -767,7 +767,8 @@ void ath9k_set_hw_capab(struct ath_softc *sc, struct ieee80211_hw *hw) |
541 | IEEE80211_HW_PS_NULLFUNC_STACK | |
542 | IEEE80211_HW_SPECTRUM_MGMT | |
543 | IEEE80211_HW_REPORTS_TX_ACK_STATUS | |
544 | - IEEE80211_HW_SUPPORTS_RC_TABLE; |
545 | + IEEE80211_HW_SUPPORTS_RC_TABLE | |
546 | + IEEE80211_HW_SUPPORTS_HT_CCK_RATES; |
547 | |
548 | if (sc->sc_ah->caps.hw_caps & ATH9K_HW_CAP_HT) |
549 | hw->flags |= IEEE80211_HW_AMPDU_AGGREGATION; |
550 | diff --git a/drivers/net/wireless/ath/ath9k/main.c b/drivers/net/wireless/ath/ath9k/main.c |
551 | index 35ced10..e33a659 100644 |
552 | --- a/drivers/net/wireless/ath/ath9k/main.c |
553 | +++ b/drivers/net/wireless/ath/ath9k/main.c |
554 | @@ -173,8 +173,7 @@ static void ath_restart_work(struct ath_softc *sc) |
555 | { |
556 | ieee80211_queue_delayed_work(sc->hw, &sc->tx_complete_work, 0); |
557 | |
558 | - if (AR_SREV_9340(sc->sc_ah) || AR_SREV_9485(sc->sc_ah) || |
559 | - AR_SREV_9550(sc->sc_ah)) |
560 | + if (AR_SREV_9340(sc->sc_ah) || AR_SREV_9330(sc->sc_ah)) |
561 | ieee80211_queue_delayed_work(sc->hw, &sc->hw_pll_work, |
562 | msecs_to_jiffies(ATH_PLL_WORK_INTERVAL)); |
563 | |
564 | diff --git a/drivers/net/wireless/ath/carl9170/main.c b/drivers/net/wireless/ath/carl9170/main.c |
565 | index e9010a4..0686375 100644 |
566 | --- a/drivers/net/wireless/ath/carl9170/main.c |
567 | +++ b/drivers/net/wireless/ath/carl9170/main.c |
568 | @@ -1857,7 +1857,8 @@ void *carl9170_alloc(size_t priv_size) |
569 | IEEE80211_HW_SUPPORTS_PS | |
570 | IEEE80211_HW_PS_NULLFUNC_STACK | |
571 | IEEE80211_HW_NEED_DTIM_BEFORE_ASSOC | |
572 | - IEEE80211_HW_SIGNAL_DBM; |
573 | + IEEE80211_HW_SIGNAL_DBM | |
574 | + IEEE80211_HW_SUPPORTS_HT_CCK_RATES; |
575 | |
576 | if (!modparam_noht) { |
577 | /* |
578 | diff --git a/drivers/net/wireless/iwlegacy/4965-mac.c b/drivers/net/wireless/iwlegacy/4965-mac.c |
579 | index 900f5f8..a8eff95 100644 |
580 | --- a/drivers/net/wireless/iwlegacy/4965-mac.c |
581 | +++ b/drivers/net/wireless/iwlegacy/4965-mac.c |
582 | @@ -4446,9 +4446,9 @@ il4965_irq_tasklet(struct il_priv *il) |
583 | set_bit(S_RFKILL, &il->status); |
584 | } else { |
585 | clear_bit(S_RFKILL, &il->status); |
586 | - wiphy_rfkill_set_hw_state(il->hw->wiphy, hw_rf_kill); |
587 | il_force_reset(il, true); |
588 | } |
589 | + wiphy_rfkill_set_hw_state(il->hw->wiphy, hw_rf_kill); |
590 | |
591 | handled |= CSR_INT_BIT_RF_KILL; |
592 | } |
593 | diff --git a/drivers/net/wireless/rt2x00/rt2800lib.c b/drivers/net/wireless/rt2x00/rt2800lib.c |
594 | index 705aa33..7e66a90 100644 |
595 | --- a/drivers/net/wireless/rt2x00/rt2800lib.c |
596 | +++ b/drivers/net/wireless/rt2x00/rt2800lib.c |
597 | @@ -5912,7 +5912,8 @@ static int rt2800_probe_hw_mode(struct rt2x00_dev *rt2x00dev) |
598 | IEEE80211_HW_SUPPORTS_PS | |
599 | IEEE80211_HW_PS_NULLFUNC_STACK | |
600 | IEEE80211_HW_AMPDU_AGGREGATION | |
601 | - IEEE80211_HW_REPORTS_TX_ACK_STATUS; |
602 | + IEEE80211_HW_REPORTS_TX_ACK_STATUS | |
603 | + IEEE80211_HW_SUPPORTS_HT_CCK_RATES; |
604 | |
605 | /* |
606 | * Don't set IEEE80211_HW_HOST_BROADCAST_PS_BUFFERING for USB devices |
607 | diff --git a/drivers/scsi/pm8001/pm8001_hwi.c b/drivers/scsi/pm8001/pm8001_hwi.c |
608 | index 69dd49c..ce3f129d 100644 |
609 | --- a/drivers/scsi/pm8001/pm8001_hwi.c |
610 | +++ b/drivers/scsi/pm8001/pm8001_hwi.c |
611 | @@ -221,7 +221,7 @@ static void init_default_table_values(struct pm8001_hba_info *pm8001_ha) |
612 | pm8001_ha->main_cfg_tbl.pm8001_tbl.fatal_err_interrupt = 0x01; |
613 | for (i = 0; i < PM8001_MAX_INB_NUM; i++) { |
614 | pm8001_ha->inbnd_q_tbl[i].element_pri_size_cnt = |
615 | - PM8001_MPI_QUEUE | (64 << 16) | (0x00<<30); |
616 | + PM8001_MPI_QUEUE | (pm8001_ha->iomb_size << 16) | (0x00<<30); |
617 | pm8001_ha->inbnd_q_tbl[i].upper_base_addr = |
618 | pm8001_ha->memoryMap.region[IB + i].phys_addr_hi; |
619 | pm8001_ha->inbnd_q_tbl[i].lower_base_addr = |
620 | @@ -247,7 +247,7 @@ static void init_default_table_values(struct pm8001_hba_info *pm8001_ha) |
621 | } |
622 | for (i = 0; i < PM8001_MAX_OUTB_NUM; i++) { |
623 | pm8001_ha->outbnd_q_tbl[i].element_size_cnt = |
624 | - PM8001_MPI_QUEUE | (64 << 16) | (0x01<<30); |
625 | + PM8001_MPI_QUEUE | (pm8001_ha->iomb_size << 16) | (0x01<<30); |
626 | pm8001_ha->outbnd_q_tbl[i].upper_base_addr = |
627 | pm8001_ha->memoryMap.region[OB + i].phys_addr_hi; |
628 | pm8001_ha->outbnd_q_tbl[i].lower_base_addr = |
629 | diff --git a/drivers/scsi/pm8001/pm80xx_hwi.c b/drivers/scsi/pm8001/pm80xx_hwi.c |
630 | index 302514d..e1c4896 100644 |
631 | --- a/drivers/scsi/pm8001/pm80xx_hwi.c |
632 | +++ b/drivers/scsi/pm8001/pm80xx_hwi.c |
633 | @@ -275,7 +275,7 @@ static void init_default_table_values(struct pm8001_hba_info *pm8001_ha) |
634 | |
635 | for (i = 0; i < PM8001_MAX_SPCV_INB_NUM; i++) { |
636 | pm8001_ha->inbnd_q_tbl[i].element_pri_size_cnt = |
637 | - PM8001_MPI_QUEUE | (64 << 16) | (0x00<<30); |
638 | + PM8001_MPI_QUEUE | (pm8001_ha->iomb_size << 16) | (0x00<<30); |
639 | pm8001_ha->inbnd_q_tbl[i].upper_base_addr = |
640 | pm8001_ha->memoryMap.region[IB + i].phys_addr_hi; |
641 | pm8001_ha->inbnd_q_tbl[i].lower_base_addr = |
642 | @@ -301,7 +301,7 @@ static void init_default_table_values(struct pm8001_hba_info *pm8001_ha) |
643 | } |
644 | for (i = 0; i < PM8001_MAX_SPCV_OUTB_NUM; i++) { |
645 | pm8001_ha->outbnd_q_tbl[i].element_size_cnt = |
646 | - PM8001_MPI_QUEUE | (64 << 16) | (0x01<<30); |
647 | + PM8001_MPI_QUEUE | (pm8001_ha->iomb_size << 16) | (0x01<<30); |
648 | pm8001_ha->outbnd_q_tbl[i].upper_base_addr = |
649 | pm8001_ha->memoryMap.region[OB + i].phys_addr_hi; |
650 | pm8001_ha->outbnd_q_tbl[i].lower_base_addr = |
651 | diff --git a/drivers/staging/imx-drm/imx-drm-core.c b/drivers/staging/imx-drm/imx-drm-core.c |
652 | index 6455305..a532ca5 100644 |
653 | --- a/drivers/staging/imx-drm/imx-drm-core.c |
654 | +++ b/drivers/staging/imx-drm/imx-drm-core.c |
655 | @@ -681,6 +681,7 @@ found: |
656 | |
657 | return i; |
658 | } |
659 | +EXPORT_SYMBOL_GPL(imx_drm_encoder_get_mux_id); |
660 | |
661 | /* |
662 | * imx_drm_remove_encoder - remove an encoder |
663 | diff --git a/drivers/target/iscsi/iscsi_target.c b/drivers/target/iscsi/iscsi_target.c |
664 | index 012ff8b..4c1b8db 100644 |
665 | --- a/drivers/target/iscsi/iscsi_target.c |
666 | +++ b/drivers/target/iscsi/iscsi_target.c |
667 | @@ -1086,7 +1086,6 @@ int iscsit_process_scsi_cmd(struct iscsi_conn *conn, struct iscsi_cmd *cmd, |
668 | if (cmd->reject_reason) |
669 | return 0; |
670 | |
671 | - target_put_sess_cmd(conn->sess->se_sess, &cmd->se_cmd); |
672 | return 1; |
673 | } |
674 | /* |
675 | @@ -1124,14 +1123,10 @@ after_immediate_data: |
676 | */ |
677 | cmdsn_ret = iscsit_sequence_cmd(cmd->conn, cmd, |
678 | (unsigned char *)hdr, hdr->cmdsn); |
679 | - if (cmdsn_ret == CMDSN_ERROR_CANNOT_RECOVER) { |
680 | + if (cmdsn_ret == CMDSN_ERROR_CANNOT_RECOVER) |
681 | return -1; |
682 | - } else if (cmdsn_ret == CMDSN_LOWER_THAN_EXP) { |
683 | - target_put_sess_cmd(conn->sess->se_sess, &cmd->se_cmd); |
684 | - return 0; |
685 | - } |
686 | |
687 | - if (cmd->sense_reason) { |
688 | + if (cmd->sense_reason || cmdsn_ret == CMDSN_LOWER_THAN_EXP) { |
689 | int rc; |
690 | |
691 | rc = iscsit_dump_data_payload(cmd->conn, |
692 | @@ -1541,6 +1536,10 @@ int iscsit_handle_nop_out(struct iscsi_conn *conn, struct iscsi_cmd *cmd, |
693 | if (hdr->itt == RESERVED_ITT && !(hdr->opcode & ISCSI_OP_IMMEDIATE)) { |
694 | pr_err("NOPOUT ITT is reserved, but Immediate Bit is" |
695 | " not set, protocol error.\n"); |
696 | + if (!cmd) |
697 | + return iscsit_add_reject(conn, ISCSI_REASON_PROTOCOL_ERROR, |
698 | + (unsigned char *)hdr); |
699 | + |
700 | return iscsit_reject_cmd(cmd, ISCSI_REASON_PROTOCOL_ERROR, |
701 | (unsigned char *)hdr); |
702 | } |
703 | @@ -1550,6 +1549,10 @@ int iscsit_handle_nop_out(struct iscsi_conn *conn, struct iscsi_cmd *cmd, |
704 | " greater than MaxXmitDataSegmentLength: %u, protocol" |
705 | " error.\n", payload_length, |
706 | conn->conn_ops->MaxXmitDataSegmentLength); |
707 | + if (!cmd) |
708 | + return iscsit_add_reject(conn, ISCSI_REASON_PROTOCOL_ERROR, |
709 | + (unsigned char *)hdr); |
710 | + |
711 | return iscsit_reject_cmd(cmd, ISCSI_REASON_PROTOCOL_ERROR, |
712 | (unsigned char *)hdr); |
713 | } |
714 | diff --git a/drivers/target/iscsi/iscsi_target_login.c b/drivers/target/iscsi/iscsi_target_login.c |
715 | index 3402241..bc788c5 100644 |
716 | --- a/drivers/target/iscsi/iscsi_target_login.c |
717 | +++ b/drivers/target/iscsi/iscsi_target_login.c |
718 | @@ -1163,12 +1163,11 @@ static int __iscsi_target_login_thread(struct iscsi_np *np) |
719 | if (np->np_thread_state == ISCSI_NP_THREAD_RESET) { |
720 | spin_unlock_bh(&np->np_thread_lock); |
721 | complete(&np->np_restart_comp); |
722 | - if (ret == -ENODEV) { |
723 | - iscsit_put_transport(conn->conn_transport); |
724 | - kfree(conn); |
725 | - conn = NULL; |
726 | + iscsit_put_transport(conn->conn_transport); |
727 | + kfree(conn); |
728 | + conn = NULL; |
729 | + if (ret == -ENODEV) |
730 | goto out; |
731 | - } |
732 | /* Get another socket */ |
733 | return 1; |
734 | } |
735 | diff --git a/drivers/target/target_core_spc.c b/drivers/target/target_core_spc.c |
736 | index 4cb667d..9fabbf7 100644 |
737 | --- a/drivers/target/target_core_spc.c |
738 | +++ b/drivers/target/target_core_spc.c |
739 | @@ -97,9 +97,12 @@ spc_emulate_inquiry_std(struct se_cmd *cmd, unsigned char *buf) |
740 | |
741 | buf[7] = 0x2; /* CmdQue=1 */ |
742 | |
743 | - snprintf(&buf[8], 8, "LIO-ORG"); |
744 | - snprintf(&buf[16], 16, "%s", dev->t10_wwn.model); |
745 | - snprintf(&buf[32], 4, "%s", dev->t10_wwn.revision); |
746 | + memcpy(&buf[8], "LIO-ORG ", 8); |
747 | + memset(&buf[16], 0x20, 16); |
748 | + memcpy(&buf[16], dev->t10_wwn.model, |
749 | + min_t(size_t, strlen(dev->t10_wwn.model), 16)); |
750 | + memcpy(&buf[32], dev->t10_wwn.revision, |
751 | + min_t(size_t, strlen(dev->t10_wwn.revision), 4)); |
752 | buf[4] = 31; /* Set additional length to 31 */ |
753 | |
754 | return 0; |
755 | diff --git a/drivers/tty/hvc/hvsi_lib.c b/drivers/tty/hvc/hvsi_lib.c |
756 | index 3396eb9..ac27671 100644 |
757 | --- a/drivers/tty/hvc/hvsi_lib.c |
758 | +++ b/drivers/tty/hvc/hvsi_lib.c |
759 | @@ -341,8 +341,8 @@ void hvsilib_establish(struct hvsi_priv *pv) |
760 | |
761 | pr_devel("HVSI@%x: ... waiting handshake\n", pv->termno); |
762 | |
763 | - /* Try for up to 200s */ |
764 | - for (timeout = 0; timeout < 20; timeout++) { |
765 | + /* Try for up to 400ms */ |
766 | + for (timeout = 0; timeout < 40; timeout++) { |
767 | if (pv->established) |
768 | goto established; |
769 | if (!hvsi_get_packet(pv)) |
770 | diff --git a/drivers/usb/gadget/f_acm.c b/drivers/usb/gadget/f_acm.c |
771 | index 4b7e33e..ab1065a 100644 |
772 | --- a/drivers/usb/gadget/f_acm.c |
773 | +++ b/drivers/usb/gadget/f_acm.c |
774 | @@ -285,6 +285,7 @@ static struct usb_string acm_string_defs[] = { |
775 | [ACM_CTRL_IDX].s = "CDC Abstract Control Model (ACM)", |
776 | [ACM_DATA_IDX].s = "CDC ACM Data", |
777 | [ACM_IAD_IDX ].s = "CDC Serial", |
778 | + { } /* end of list */ |
779 | }; |
780 | |
781 | static struct usb_gadget_strings acm_string_table = { |
782 | diff --git a/fs/jfs/jfs_dtree.c b/fs/jfs/jfs_dtree.c |
783 | index 0ddbece..c450fdb 100644 |
784 | --- a/fs/jfs/jfs_dtree.c |
785 | +++ b/fs/jfs/jfs_dtree.c |
786 | @@ -3047,6 +3047,14 @@ int jfs_readdir(struct file *filp, void *dirent, filldir_t filldir) |
787 | |
788 | dir_index = (u32) filp->f_pos; |
789 | |
790 | + /* |
791 | + * NFSv4 reserves cookies 1 and 2 for . and .. so we add |
792 | + * the value we return to the vfs is one greater than the |
793 | + * one we use internally. |
794 | + */ |
795 | + if (dir_index) |
796 | + dir_index--; |
797 | + |
798 | if (dir_index > 1) { |
799 | struct dir_table_slot dirtab_slot; |
800 | |
801 | @@ -3086,7 +3094,7 @@ int jfs_readdir(struct file *filp, void *dirent, filldir_t filldir) |
802 | if (p->header.flag & BT_INTERNAL) { |
803 | jfs_err("jfs_readdir: bad index table"); |
804 | DT_PUTPAGE(mp); |
805 | - filp->f_pos = -1; |
806 | + filp->f_pos = DIREND; |
807 | return 0; |
808 | } |
809 | } else { |
810 | @@ -3094,7 +3102,7 @@ int jfs_readdir(struct file *filp, void *dirent, filldir_t filldir) |
811 | /* |
812 | * self "." |
813 | */ |
814 | - filp->f_pos = 0; |
815 | + filp->f_pos = 1; |
816 | if (filldir(dirent, ".", 1, 0, ip->i_ino, |
817 | DT_DIR)) |
818 | return 0; |
819 | @@ -3102,7 +3110,7 @@ int jfs_readdir(struct file *filp, void *dirent, filldir_t filldir) |
820 | /* |
821 | * parent ".." |
822 | */ |
823 | - filp->f_pos = 1; |
824 | + filp->f_pos = 2; |
825 | if (filldir(dirent, "..", 2, 1, PARENT(ip), DT_DIR)) |
826 | return 0; |
827 | |
828 | @@ -3123,24 +3131,25 @@ int jfs_readdir(struct file *filp, void *dirent, filldir_t filldir) |
829 | /* |
830 | * Legacy filesystem - OS/2 & Linux JFS < 0.3.6 |
831 | * |
832 | - * pn = index = 0: First entry "." |
833 | - * pn = 0; index = 1: Second entry ".." |
834 | + * pn = 0; index = 1: First entry "." |
835 | + * pn = 0; index = 2: Second entry ".." |
836 | * pn > 0: Real entries, pn=1 -> leftmost page |
837 | * pn = index = -1: No more entries |
838 | */ |
839 | dtpos = filp->f_pos; |
840 | - if (dtpos == 0) { |
841 | + if (dtpos < 2) { |
842 | /* build "." entry */ |
843 | |
844 | + filp->f_pos = 1; |
845 | if (filldir(dirent, ".", 1, filp->f_pos, ip->i_ino, |
846 | DT_DIR)) |
847 | return 0; |
848 | - dtoffset->index = 1; |
849 | + dtoffset->index = 2; |
850 | filp->f_pos = dtpos; |
851 | } |
852 | |
853 | if (dtoffset->pn == 0) { |
854 | - if (dtoffset->index == 1) { |
855 | + if (dtoffset->index == 2) { |
856 | /* build ".." entry */ |
857 | |
858 | if (filldir(dirent, "..", 2, filp->f_pos, |
859 | @@ -3233,6 +3242,12 @@ int jfs_readdir(struct file *filp, void *dirent, filldir_t filldir) |
860 | } |
861 | jfs_dirent->position = unique_pos++; |
862 | } |
863 | + /* |
864 | + * We add 1 to the index because we may |
865 | + * use a value of 2 internally, and NFSv4 |
866 | + * doesn't like that. |
867 | + */ |
868 | + jfs_dirent->position++; |
869 | } else { |
870 | jfs_dirent->position = dtpos; |
871 | len = min(d_namleft, DTLHDRDATALEN_LEGACY); |
872 | diff --git a/include/linux/regmap.h b/include/linux/regmap.h |
873 | index f91bb41..98c470ce 100644 |
874 | --- a/include/linux/regmap.h |
875 | +++ b/include/linux/regmap.h |
876 | @@ -16,6 +16,7 @@ |
877 | #include <linux/list.h> |
878 | #include <linux/rbtree.h> |
879 | #include <linux/err.h> |
880 | +#include <linux/bug.h> |
881 | |
882 | struct module; |
883 | struct device; |
884 | diff --git a/include/net/mac80211.h b/include/net/mac80211.h |
885 | index 885898a..4e50d36 100644 |
886 | --- a/include/net/mac80211.h |
887 | +++ b/include/net/mac80211.h |
888 | @@ -1484,6 +1484,7 @@ enum ieee80211_hw_flags { |
889 | IEEE80211_HW_SUPPORTS_RC_TABLE = 1<<24, |
890 | IEEE80211_HW_P2P_DEV_ADDR_FOR_INTF = 1<<25, |
891 | IEEE80211_HW_TIMING_BEACON_ONLY = 1<<26, |
892 | + IEEE80211_HW_SUPPORTS_HT_CCK_RATES = 1<<27, |
893 | }; |
894 | |
895 | /** |
896 | diff --git a/ipc/msg.c b/ipc/msg.c |
897 | index d0c6d96..f8fbe2c 100644 |
898 | --- a/ipc/msg.c |
899 | +++ b/ipc/msg.c |
900 | @@ -795,7 +795,7 @@ static inline void free_copy(struct msg_msg *copy) |
901 | |
902 | static struct msg_msg *find_msg(struct msg_queue *msq, long *msgtyp, int mode) |
903 | { |
904 | - struct msg_msg *msg; |
905 | + struct msg_msg *msg, *found = NULL; |
906 | long count = 0; |
907 | |
908 | list_for_each_entry(msg, &msq->q_messages, m_list) { |
909 | @@ -804,6 +804,7 @@ static struct msg_msg *find_msg(struct msg_queue *msq, long *msgtyp, int mode) |
910 | *msgtyp, mode)) { |
911 | if (mode == SEARCH_LESSEQUAL && msg->m_type != 1) { |
912 | *msgtyp = msg->m_type - 1; |
913 | + found = msg; |
914 | } else if (mode == SEARCH_NUMBER) { |
915 | if (*msgtyp == count) |
916 | return msg; |
917 | @@ -813,7 +814,7 @@ static struct msg_msg *find_msg(struct msg_queue *msq, long *msgtyp, int mode) |
918 | } |
919 | } |
920 | |
921 | - return ERR_PTR(-EAGAIN); |
922 | + return found ?: ERR_PTR(-EAGAIN); |
923 | } |
924 | |
925 | |
926 | diff --git a/kernel/time/timer_list.c b/kernel/time/timer_list.c |
927 | index 3bdf283..61ed862 100644 |
928 | --- a/kernel/time/timer_list.c |
929 | +++ b/kernel/time/timer_list.c |
930 | @@ -265,10 +265,9 @@ static inline void timer_list_header(struct seq_file *m, u64 now) |
931 | static int timer_list_show(struct seq_file *m, void *v) |
932 | { |
933 | struct timer_list_iter *iter = v; |
934 | - u64 now = ktime_to_ns(ktime_get()); |
935 | |
936 | if (iter->cpu == -1 && !iter->second_pass) |
937 | - timer_list_header(m, now); |
938 | + timer_list_header(m, iter->now); |
939 | else if (!iter->second_pass) |
940 | print_cpu(m, iter->cpu, iter->now); |
941 | #ifdef CONFIG_GENERIC_CLOCKEVENTS |
942 | @@ -298,33 +297,41 @@ void sysrq_timer_list_show(void) |
943 | return; |
944 | } |
945 | |
946 | -static void *timer_list_start(struct seq_file *file, loff_t *offset) |
947 | +static void *move_iter(struct timer_list_iter *iter, loff_t offset) |
948 | { |
949 | - struct timer_list_iter *iter = file->private; |
950 | - |
951 | - if (!*offset) { |
952 | - iter->cpu = -1; |
953 | - iter->now = ktime_to_ns(ktime_get()); |
954 | - } else if (iter->cpu >= nr_cpu_ids) { |
955 | + for (; offset; offset--) { |
956 | + iter->cpu = cpumask_next(iter->cpu, cpu_online_mask); |
957 | + if (iter->cpu >= nr_cpu_ids) { |
958 | #ifdef CONFIG_GENERIC_CLOCKEVENTS |
959 | - if (!iter->second_pass) { |
960 | - iter->cpu = -1; |
961 | - iter->second_pass = true; |
962 | - } else |
963 | - return NULL; |
964 | + if (!iter->second_pass) { |
965 | + iter->cpu = -1; |
966 | + iter->second_pass = true; |
967 | + } else |
968 | + return NULL; |
969 | #else |
970 | - return NULL; |
971 | + return NULL; |
972 | #endif |
973 | + } |
974 | } |
975 | return iter; |
976 | } |
977 | |
978 | +static void *timer_list_start(struct seq_file *file, loff_t *offset) |
979 | +{ |
980 | + struct timer_list_iter *iter = file->private; |
981 | + |
982 | + if (!*offset) |
983 | + iter->now = ktime_to_ns(ktime_get()); |
984 | + iter->cpu = -1; |
985 | + iter->second_pass = false; |
986 | + return move_iter(iter, *offset); |
987 | +} |
988 | + |
989 | static void *timer_list_next(struct seq_file *file, void *v, loff_t *offset) |
990 | { |
991 | struct timer_list_iter *iter = file->private; |
992 | - iter->cpu = cpumask_next(iter->cpu, cpu_online_mask); |
993 | ++*offset; |
994 | - return timer_list_start(file, offset); |
995 | + return move_iter(iter, 1); |
996 | } |
997 | |
998 | static void timer_list_stop(struct seq_file *seq, void *v) |
999 | diff --git a/kernel/workqueue.c b/kernel/workqueue.c |
1000 | index 6f01921..e52d002 100644 |
1001 | --- a/kernel/workqueue.c |
1002 | +++ b/kernel/workqueue.c |
1003 | @@ -2188,6 +2188,15 @@ __acquires(&pool->lock) |
1004 | dump_stack(); |
1005 | } |
1006 | |
1007 | + /* |
1008 | + * The following prevents a kworker from hogging CPU on !PREEMPT |
1009 | + * kernels, where a requeueing work item waiting for something to |
1010 | + * happen could deadlock with stop_machine as such work item could |
1011 | + * indefinitely requeue itself while all other CPUs are trapped in |
1012 | + * stop_machine. |
1013 | + */ |
1014 | + cond_resched(); |
1015 | + |
1016 | spin_lock_irq(&pool->lock); |
1017 | |
1018 | /* clear cpu intensive status */ |
1019 | diff --git a/mm/slab.h b/mm/slab.h |
1020 | index f96b49e..4d6d836 100644 |
1021 | --- a/mm/slab.h |
1022 | +++ b/mm/slab.h |
1023 | @@ -162,6 +162,8 @@ static inline const char *cache_name(struct kmem_cache *s) |
1024 | |
1025 | static inline struct kmem_cache *cache_from_memcg(struct kmem_cache *s, int idx) |
1026 | { |
1027 | + if (!s->memcg_params) |
1028 | + return NULL; |
1029 | return s->memcg_params->memcg_caches[idx]; |
1030 | } |
1031 | |
1032 | diff --git a/net/mac80211/ibss.c b/net/mac80211/ibss.c |
1033 | index 170f9a7..3052672 100644 |
1034 | --- a/net/mac80211/ibss.c |
1035 | +++ b/net/mac80211/ibss.c |
1036 | @@ -1166,6 +1166,7 @@ int ieee80211_ibss_leave(struct ieee80211_sub_if_data *sdata) |
1037 | clear_bit(SDATA_STATE_OFFCHANNEL_BEACON_STOPPED, &sdata->state); |
1038 | ieee80211_bss_info_change_notify(sdata, BSS_CHANGED_BEACON_ENABLED | |
1039 | BSS_CHANGED_IBSS); |
1040 | + ieee80211_vif_release_channel(sdata); |
1041 | synchronize_rcu(); |
1042 | kfree(presp); |
1043 | |
1044 | diff --git a/net/mac80211/rc80211_minstrel_ht.c b/net/mac80211/rc80211_minstrel_ht.c |
1045 | index f5aed96..f3bbea1 100644 |
1046 | --- a/net/mac80211/rc80211_minstrel_ht.c |
1047 | +++ b/net/mac80211/rc80211_minstrel_ht.c |
1048 | @@ -828,6 +828,9 @@ minstrel_ht_update_cck(struct minstrel_priv *mp, struct minstrel_ht_sta *mi, |
1049 | if (sband->band != IEEE80211_BAND_2GHZ) |
1050 | return; |
1051 | |
1052 | + if (!(mp->hw->flags & IEEE80211_HW_SUPPORTS_HT_CCK_RATES)) |
1053 | + return; |
1054 | + |
1055 | mi->cck_supported = 0; |
1056 | mi->cck_supported_short = 0; |
1057 | for (i = 0; i < 4; i++) { |
1058 | diff --git a/net/sunrpc/xdr.c b/net/sunrpc/xdr.c |
1059 | index 75edcfa..1504bb1 100644 |
1060 | --- a/net/sunrpc/xdr.c |
1061 | +++ b/net/sunrpc/xdr.c |
1062 | @@ -207,10 +207,13 @@ _shift_data_right_pages(struct page **pages, size_t pgto_base, |
1063 | pgfrom_base -= copy; |
1064 | |
1065 | vto = kmap_atomic(*pgto); |
1066 | - vfrom = kmap_atomic(*pgfrom); |
1067 | - memmove(vto + pgto_base, vfrom + pgfrom_base, copy); |
1068 | + if (*pgto != *pgfrom) { |
1069 | + vfrom = kmap_atomic(*pgfrom); |
1070 | + memcpy(vto + pgto_base, vfrom + pgfrom_base, copy); |
1071 | + kunmap_atomic(vfrom); |
1072 | + } else |
1073 | + memmove(vto + pgto_base, vto + pgfrom_base, copy); |
1074 | flush_dcache_page(*pgto); |
1075 | - kunmap_atomic(vfrom); |
1076 | kunmap_atomic(vto); |
1077 | |
1078 | } while ((len -= copy) != 0); |
1079 | diff --git a/sound/isa/opti9xx/opti92x-ad1848.c b/sound/isa/opti9xx/opti92x-ad1848.c |
1080 | index b41ed86..e427dbf 100644 |
1081 | --- a/sound/isa/opti9xx/opti92x-ad1848.c |
1082 | +++ b/sound/isa/opti9xx/opti92x-ad1848.c |
1083 | @@ -173,11 +173,7 @@ MODULE_DEVICE_TABLE(pnp_card, snd_opti9xx_pnpids); |
1084 | |
1085 | #endif /* CONFIG_PNP */ |
1086 | |
1087 | -#ifdef OPTi93X |
1088 | -#define DEV_NAME "opti93x" |
1089 | -#else |
1090 | -#define DEV_NAME "opti92x" |
1091 | -#endif |
1092 | +#define DEV_NAME KBUILD_MODNAME |
1093 | |
1094 | static char * snd_opti9xx_names[] = { |
1095 | "unknown", |
1096 | @@ -1168,7 +1164,7 @@ static int snd_opti9xx_pnp_resume(struct pnp_card_link *pcard) |
1097 | |
1098 | static struct pnp_card_driver opti9xx_pnpc_driver = { |
1099 | .flags = PNP_DRIVER_RES_DISABLE, |
1100 | - .name = "opti9xx", |
1101 | + .name = DEV_NAME, |
1102 | .id_table = snd_opti9xx_pnpids, |
1103 | .probe = snd_opti9xx_pnp_probe, |
1104 | .remove = snd_opti9xx_pnp_remove, |
1105 | diff --git a/sound/pci/hda/patch_hdmi.c b/sound/pci/hda/patch_hdmi.c |
1106 | index 496d7f2..5bc4194 100644 |
1107 | --- a/sound/pci/hda/patch_hdmi.c |
1108 | +++ b/sound/pci/hda/patch_hdmi.c |
1109 | @@ -1715,6 +1715,9 @@ static int generic_hdmi_build_controls(struct hda_codec *codec) |
1110 | struct snd_pcm_chmap *chmap; |
1111 | struct snd_kcontrol *kctl; |
1112 | int i; |
1113 | + |
1114 | + if (!codec->pcm_info[pin_idx].pcm) |
1115 | + break; |
1116 | err = snd_pcm_add_chmap_ctls(codec->pcm_info[pin_idx].pcm, |
1117 | SNDRV_PCM_STREAM_PLAYBACK, |
1118 | NULL, 0, pin_idx, &chmap); |
1119 | diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c |
1120 | index 57f9f2a..458cf89 100644 |
1121 | --- a/sound/pci/hda/patch_realtek.c |
1122 | +++ b/sound/pci/hda/patch_realtek.c |
1123 | @@ -4207,6 +4207,7 @@ static const struct hda_fixup alc662_fixups[] = { |
1124 | |
1125 | static const struct snd_pci_quirk alc662_fixup_tbl[] = { |
1126 | SND_PCI_QUIRK(0x1019, 0x9087, "ECS", ALC662_FIXUP_ASUS_MODE2), |
1127 | + SND_PCI_QUIRK(0x1025, 0x022f, "Acer Aspire One", ALC662_FIXUP_INV_DMIC), |
1128 | SND_PCI_QUIRK(0x1025, 0x0308, "Acer Aspire 8942G", ALC662_FIXUP_ASPIRE), |
1129 | SND_PCI_QUIRK(0x1025, 0x031c, "Gateway NV79", ALC662_FIXUP_SKU_IGNORE), |
1130 | SND_PCI_QUIRK(0x1025, 0x0349, "eMachines eM250", ALC662_FIXUP_INV_DMIC), |