Magellan Linux

Annotation of /trunk/kernel-magellan/patches-3.1/0105-3.1.6-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1606 - (hide annotations) (download)
Tue Jan 10 13:37:55 2012 UTC (12 years, 4 months ago) by niro
File size: 77501 byte(s)
-consolidated patches dir and added patches up to linux-3.1.8
1 niro 1606 diff --git a/arch/arm/kernel/setup.c b/arch/arm/kernel/setup.c
2     index e514c76..3e42faf 100644
3     --- a/arch/arm/kernel/setup.c
4     +++ b/arch/arm/kernel/setup.c
5     @@ -890,6 +890,12 @@ void __init setup_arch(char **cmdline_p)
6     machine_desc = mdesc;
7     machine_name = mdesc->name;
8    
9     +#ifdef CONFIG_ZONE_DMA
10     + if (mdesc->dma_zone_size) {
11     + extern unsigned long arm_dma_zone_size;
12     + arm_dma_zone_size = mdesc->dma_zone_size;
13     + }
14     +#endif
15     if (mdesc->soft_reboot)
16     reboot_setup("s");
17    
18     @@ -920,12 +926,6 @@ void __init setup_arch(char **cmdline_p)
19    
20     tcm_init();
21    
22     -#ifdef CONFIG_ZONE_DMA
23     - if (mdesc->dma_zone_size) {
24     - extern unsigned long arm_dma_zone_size;
25     - arm_dma_zone_size = mdesc->dma_zone_size;
26     - }
27     -#endif
28     #ifdef CONFIG_MULTI_IRQ_HANDLER
29     handle_arch_irq = mdesc->handle_irq;
30     #endif
31     diff --git a/arch/arm/mach-at91/at91rm9200_devices.c b/arch/arm/mach-at91/at91rm9200_devices.c
32     index 7227755..e596f45 100644
33     --- a/arch/arm/mach-at91/at91rm9200_devices.c
34     +++ b/arch/arm/mach-at91/at91rm9200_devices.c
35     @@ -75,7 +75,7 @@ void __init at91_add_device_usbh(struct at91_usbh_data *data) {}
36     * USB Device (Gadget)
37     * -------------------------------------------------------------------- */
38    
39     -#ifdef CONFIG_USB_GADGET_AT91
40     +#ifdef CONFIG_USB_AT91
41     static struct at91_udc_data udc_data;
42    
43     static struct resource udc_resources[] = {
44     diff --git a/arch/arm/mach-at91/at91sam9260.c b/arch/arm/mach-at91/at91sam9260.c
45     index cb397be..de4036f 100644
46     --- a/arch/arm/mach-at91/at91sam9260.c
47     +++ b/arch/arm/mach-at91/at91sam9260.c
48     @@ -195,9 +195,9 @@ static struct clk_lookup periph_clocks_lookups[] = {
49     CLKDEV_CON_DEV_ID("t0_clk", "atmel_tcb.0", &tc0_clk),
50     CLKDEV_CON_DEV_ID("t1_clk", "atmel_tcb.0", &tc1_clk),
51     CLKDEV_CON_DEV_ID("t2_clk", "atmel_tcb.0", &tc2_clk),
52     - CLKDEV_CON_DEV_ID("t3_clk", "atmel_tcb.1", &tc3_clk),
53     - CLKDEV_CON_DEV_ID("t4_clk", "atmel_tcb.1", &tc4_clk),
54     - CLKDEV_CON_DEV_ID("t5_clk", "atmel_tcb.1", &tc5_clk),
55     + CLKDEV_CON_DEV_ID("t0_clk", "atmel_tcb.1", &tc3_clk),
56     + CLKDEV_CON_DEV_ID("t1_clk", "atmel_tcb.1", &tc4_clk),
57     + CLKDEV_CON_DEV_ID("t2_clk", "atmel_tcb.1", &tc5_clk),
58     CLKDEV_CON_DEV_ID("pclk", "ssc.0", &ssc_clk),
59     };
60    
61     diff --git a/arch/arm/mach-at91/at91sam9260_devices.c b/arch/arm/mach-at91/at91sam9260_devices.c
62     index 39f81f4..ec257265 100644
63     --- a/arch/arm/mach-at91/at91sam9260_devices.c
64     +++ b/arch/arm/mach-at91/at91sam9260_devices.c
65     @@ -76,7 +76,7 @@ void __init at91_add_device_usbh(struct at91_usbh_data *data) {}
66     * USB Device (Gadget)
67     * -------------------------------------------------------------------- */
68    
69     -#ifdef CONFIG_USB_GADGET_AT91
70     +#ifdef CONFIG_USB_AT91
71     static struct at91_udc_data udc_data;
72    
73     static struct resource udc_resources[] = {
74     diff --git a/arch/arm/mach-at91/at91sam9261_devices.c b/arch/arm/mach-at91/at91sam9261_devices.c
75     index 0f91792..9e113f6 100644
76     --- a/arch/arm/mach-at91/at91sam9261_devices.c
77     +++ b/arch/arm/mach-at91/at91sam9261_devices.c
78     @@ -79,7 +79,7 @@ void __init at91_add_device_usbh(struct at91_usbh_data *data) {}
79     * USB Device (Gadget)
80     * -------------------------------------------------------------------- */
81    
82     -#ifdef CONFIG_USB_GADGET_AT91
83     +#ifdef CONFIG_USB_AT91
84     static struct at91_udc_data udc_data;
85    
86     static struct resource udc_resources[] = {
87     diff --git a/arch/arm/mach-at91/at91sam9263_devices.c b/arch/arm/mach-at91/at91sam9263_devices.c
88     index a050f41..863e466 100644
89     --- a/arch/arm/mach-at91/at91sam9263_devices.c
90     +++ b/arch/arm/mach-at91/at91sam9263_devices.c
91     @@ -86,7 +86,7 @@ void __init at91_add_device_usbh(struct at91_usbh_data *data) {}
92     * USB Device (Gadget)
93     * -------------------------------------------------------------------- */
94    
95     -#ifdef CONFIG_USB_GADGET_AT91
96     +#ifdef CONFIG_USB_AT91
97     static struct at91_udc_data udc_data;
98    
99     static struct resource udc_resources[] = {
100     diff --git a/arch/arm/mach-davinci/board-da850-evm.c b/arch/arm/mach-davinci/board-da850-evm.c
101     index 008d514..d5ec333 100644
102     --- a/arch/arm/mach-davinci/board-da850-evm.c
103     +++ b/arch/arm/mach-davinci/board-da850-evm.c
104     @@ -748,7 +748,7 @@ static struct snd_platform_data da850_evm_snd_data = {
105     .num_serializer = ARRAY_SIZE(da850_iis_serializer_direction),
106     .tdm_slots = 2,
107     .serial_dir = da850_iis_serializer_direction,
108     - .asp_chan_q = EVENTQ_1,
109     + .asp_chan_q = EVENTQ_0,
110     .version = MCASP_VERSION_2,
111     .txnumevt = 1,
112     .rxnumevt = 1,
113     diff --git a/arch/arm/mach-davinci/board-dm646x-evm.c b/arch/arm/mach-davinci/board-dm646x-evm.c
114     index 993a314..1cc11d8 100644
115     --- a/arch/arm/mach-davinci/board-dm646x-evm.c
116     +++ b/arch/arm/mach-davinci/board-dm646x-evm.c
117     @@ -563,7 +563,7 @@ static int setup_vpif_input_channel_mode(int mux_mode)
118     int val;
119     u32 value;
120    
121     - if (!vpif_vsclkdis_reg || !cpld_client)
122     + if (!vpif_vidclkctl_reg || !cpld_client)
123     return -ENXIO;
124    
125     val = i2c_smbus_read_byte(cpld_client);
126     @@ -571,7 +571,7 @@ static int setup_vpif_input_channel_mode(int mux_mode)
127     return val;
128    
129     spin_lock_irqsave(&vpif_reg_lock, flags);
130     - value = __raw_readl(vpif_vsclkdis_reg);
131     + value = __raw_readl(vpif_vidclkctl_reg);
132     if (mux_mode) {
133     val &= VPIF_INPUT_TWO_CHANNEL;
134     value |= VIDCH1CLK;
135     @@ -579,7 +579,7 @@ static int setup_vpif_input_channel_mode(int mux_mode)
136     val |= VPIF_INPUT_ONE_CHANNEL;
137     value &= ~VIDCH1CLK;
138     }
139     - __raw_writel(value, vpif_vsclkdis_reg);
140     + __raw_writel(value, vpif_vidclkctl_reg);
141     spin_unlock_irqrestore(&vpif_reg_lock, flags);
142    
143     err = i2c_smbus_write_byte(cpld_client, val);
144     diff --git a/arch/arm/mach-mxs/include/mach/mxs.h b/arch/arm/mach-mxs/include/mach/mxs.h
145     index 35a89dd..1332f73 100644
146     --- a/arch/arm/mach-mxs/include/mach/mxs.h
147     +++ b/arch/arm/mach-mxs/include/mach/mxs.h
148     @@ -30,6 +30,7 @@
149     */
150     #define cpu_is_mx23() ( \
151     machine_is_mx23evk() || \
152     + machine_is_stmp378x() || \
153     0)
154     #define cpu_is_mx28() ( \
155     machine_is_mx28evk() || \
156     diff --git a/arch/x86/include/asm/system.h b/arch/x86/include/asm/system.h
157     index c2ff2a1..2d2f01c 100644
158     --- a/arch/x86/include/asm/system.h
159     +++ b/arch/x86/include/asm/system.h
160     @@ -401,6 +401,7 @@ extern unsigned long arch_align_stack(unsigned long sp);
161     extern void free_init_pages(char *what, unsigned long begin, unsigned long end);
162    
163     void default_idle(void);
164     +bool set_pm_idle_to_default(void);
165    
166     void stop_this_cpu(void *dummy);
167    
168     diff --git a/arch/x86/kernel/hpet.c b/arch/x86/kernel/hpet.c
169     index 4aecc54..4d5a100 100644
170     --- a/arch/x86/kernel/hpet.c
171     +++ b/arch/x86/kernel/hpet.c
172     @@ -1048,6 +1048,14 @@ int hpet_rtc_timer_init(void)
173     }
174     EXPORT_SYMBOL_GPL(hpet_rtc_timer_init);
175    
176     +static void hpet_disable_rtc_channel(void)
177     +{
178     + unsigned long cfg;
179     + cfg = hpet_readl(HPET_T1_CFG);
180     + cfg &= ~HPET_TN_ENABLE;
181     + hpet_writel(cfg, HPET_T1_CFG);
182     +}
183     +
184     /*
185     * The functions below are called from rtc driver.
186     * Return 0 if HPET is not being used.
187     @@ -1059,6 +1067,9 @@ int hpet_mask_rtc_irq_bit(unsigned long bit_mask)
188     return 0;
189    
190     hpet_rtc_flags &= ~bit_mask;
191     + if (unlikely(!hpet_rtc_flags))
192     + hpet_disable_rtc_channel();
193     +
194     return 1;
195     }
196     EXPORT_SYMBOL_GPL(hpet_mask_rtc_irq_bit);
197     @@ -1124,15 +1135,11 @@ EXPORT_SYMBOL_GPL(hpet_rtc_dropped_irq);
198    
199     static void hpet_rtc_timer_reinit(void)
200     {
201     - unsigned int cfg, delta;
202     + unsigned int delta;
203     int lost_ints = -1;
204    
205     - if (unlikely(!hpet_rtc_flags)) {
206     - cfg = hpet_readl(HPET_T1_CFG);
207     - cfg &= ~HPET_TN_ENABLE;
208     - hpet_writel(cfg, HPET_T1_CFG);
209     - return;
210     - }
211     + if (unlikely(!hpet_rtc_flags))
212     + hpet_disable_rtc_channel();
213    
214     if (!(hpet_rtc_flags & RTC_PIE) || hpet_pie_limit)
215     delta = hpet_default_delta;
216     diff --git a/arch/x86/kernel/process.c b/arch/x86/kernel/process.c
217     index e7e3b01..30eb651 100644
218     --- a/arch/x86/kernel/process.c
219     +++ b/arch/x86/kernel/process.c
220     @@ -403,6 +403,14 @@ void default_idle(void)
221     EXPORT_SYMBOL(default_idle);
222     #endif
223    
224     +bool set_pm_idle_to_default(void)
225     +{
226     + bool ret = !!pm_idle;
227     +
228     + pm_idle = default_idle;
229     +
230     + return ret;
231     +}
232     void stop_this_cpu(void *dummy)
233     {
234     local_irq_disable();
235     diff --git a/arch/x86/mm/gup.c b/arch/x86/mm/gup.c
236     index ea30585..dd74e46 100644
237     --- a/arch/x86/mm/gup.c
238     +++ b/arch/x86/mm/gup.c
239     @@ -201,6 +201,8 @@ static noinline int gup_huge_pud(pud_t pud, unsigned long addr,
240     do {
241     VM_BUG_ON(compound_head(page) != head);
242     pages[*nr] = page;
243     + if (PageTail(page))
244     + get_huge_page_tail(page);
245     (*nr)++;
246     page++;
247     refs++;
248     diff --git a/arch/x86/xen/setup.c b/arch/x86/xen/setup.c
249     index 46d6d21..e191302 100644
250     --- a/arch/x86/xen/setup.c
251     +++ b/arch/x86/xen/setup.c
252     @@ -191,9 +191,21 @@ static unsigned long __init xen_get_max_pages(void)
253     domid_t domid = DOMID_SELF;
254     int ret;
255    
256     - ret = HYPERVISOR_memory_op(XENMEM_maximum_reservation, &domid);
257     - if (ret > 0)
258     - max_pages = ret;
259     + /*
260     + * For the initial domain we use the maximum reservation as
261     + * the maximum page.
262     + *
263     + * For guest domains the current maximum reservation reflects
264     + * the current maximum rather than the static maximum. In this
265     + * case the e820 map provided to us will cover the static
266     + * maximum region.
267     + */
268     + if (xen_initial_domain()) {
269     + ret = HYPERVISOR_memory_op(XENMEM_maximum_reservation, &domid);
270     + if (ret > 0)
271     + max_pages = ret;
272     + }
273     +
274     return min(max_pages, MAX_DOMAIN_PAGES);
275     }
276    
277     @@ -448,6 +460,6 @@ void __init xen_arch_setup(void)
278     #endif
279     disable_cpuidle();
280     boot_option_idle_override = IDLE_HALT;
281     -
282     + WARN_ON(set_pm_idle_to_default());
283     fiddle_vdso();
284     }
285     diff --git a/drivers/firmware/iscsi_ibft.c b/drivers/firmware/iscsi_ibft.c
286     index c811cb1..2cce44a 100644
287     --- a/drivers/firmware/iscsi_ibft.c
288     +++ b/drivers/firmware/iscsi_ibft.c
289     @@ -746,6 +746,37 @@ static void __exit ibft_exit(void)
290     ibft_cleanup();
291     }
292    
293     +#ifdef CONFIG_ACPI
294     +static const struct {
295     + char *sign;
296     +} ibft_signs[] = {
297     + /*
298     + * One spec says "IBFT", the other says "iBFT". We have to check
299     + * for both.
300     + */
301     + { ACPI_SIG_IBFT },
302     + { "iBFT" },
303     +};
304     +
305     +static void __init acpi_find_ibft_region(void)
306     +{
307     + int i;
308     + struct acpi_table_header *table = NULL;
309     +
310     + if (acpi_disabled)
311     + return;
312     +
313     + for (i = 0; i < ARRAY_SIZE(ibft_signs) && !ibft_addr; i++) {
314     + acpi_get_table(ibft_signs[i].sign, 0, &table);
315     + ibft_addr = (struct acpi_table_ibft *)table;
316     + }
317     +}
318     +#else
319     +static void __init acpi_find_ibft_region(void)
320     +{
321     +}
322     +#endif
323     +
324     /*
325     * ibft_init() - creates sysfs tree entries for the iBFT data.
326     */
327     @@ -753,9 +784,16 @@ static int __init ibft_init(void)
328     {
329     int rc = 0;
330    
331     + /*
332     + As on UEFI systems the setup_arch()/find_ibft_region()
333     + is called before ACPI tables are parsed and it only does
334     + legacy finding.
335     + */
336     + if (!ibft_addr)
337     + acpi_find_ibft_region();
338     +
339     if (ibft_addr) {
340     - printk(KERN_INFO "iBFT detected at 0x%llx.\n",
341     - (u64)isa_virt_to_bus(ibft_addr));
342     + pr_info("iBFT detected.\n");
343    
344     rc = ibft_check_device();
345     if (rc)
346     diff --git a/drivers/firmware/iscsi_ibft_find.c b/drivers/firmware/iscsi_ibft_find.c
347     index bfe7232..4da4eb9 100644
348     --- a/drivers/firmware/iscsi_ibft_find.c
349     +++ b/drivers/firmware/iscsi_ibft_find.c
350     @@ -45,13 +45,6 @@ EXPORT_SYMBOL_GPL(ibft_addr);
351     static const struct {
352     char *sign;
353     } ibft_signs[] = {
354     -#ifdef CONFIG_ACPI
355     - /*
356     - * One spec says "IBFT", the other says "iBFT". We have to check
357     - * for both.
358     - */
359     - { ACPI_SIG_IBFT },
360     -#endif
361     { "iBFT" },
362     { "BIFT" }, /* Broadcom iSCSI Offload */
363     };
364     @@ -62,14 +55,6 @@ static const struct {
365     #define VGA_MEM 0xA0000 /* VGA buffer */
366     #define VGA_SIZE 0x20000 /* 128kB */
367    
368     -#ifdef CONFIG_ACPI
369     -static int __init acpi_find_ibft(struct acpi_table_header *header)
370     -{
371     - ibft_addr = (struct acpi_table_ibft *)header;
372     - return 0;
373     -}
374     -#endif /* CONFIG_ACPI */
375     -
376     static int __init find_ibft_in_mem(void)
377     {
378     unsigned long pos;
379     @@ -94,6 +79,7 @@ static int __init find_ibft_in_mem(void)
380     * the table cannot be valid. */
381     if (pos + len <= (IBFT_END-1)) {
382     ibft_addr = (struct acpi_table_ibft *)virt;
383     + pr_info("iBFT found at 0x%lx.\n", pos);
384     goto done;
385     }
386     }
387     @@ -108,20 +94,12 @@ done:
388     */
389     unsigned long __init find_ibft_region(unsigned long *sizep)
390     {
391     -#ifdef CONFIG_ACPI
392     - int i;
393     -#endif
394     ibft_addr = NULL;
395    
396     -#ifdef CONFIG_ACPI
397     - for (i = 0; i < ARRAY_SIZE(ibft_signs) && !ibft_addr; i++)
398     - acpi_table_parse(ibft_signs[i].sign, acpi_find_ibft);
399     -#endif /* CONFIG_ACPI */
400     -
401     /* iBFT 1.03 section 1.4.3.1 mandates that UEFI machines will
402     * only use ACPI for this */
403    
404     - if (!ibft_addr && !efi_enabled)
405     + if (!efi_enabled)
406     find_ibft_in_mem();
407    
408     if (ibft_addr) {
409     diff --git a/drivers/gpu/drm/radeon/atombios_crtc.c b/drivers/gpu/drm/radeon/atombios_crtc.c
410     index a515b2a..9bb3d6f 100644
411     --- a/drivers/gpu/drm/radeon/atombios_crtc.c
412     +++ b/drivers/gpu/drm/radeon/atombios_crtc.c
413     @@ -558,7 +558,7 @@ static u32 atombios_adjust_pll(struct drm_crtc *crtc,
414     bpc = connector->display_info.bpc;
415     encoder_mode = atombios_get_encoder_mode(encoder);
416     if ((radeon_encoder->devices & (ATOM_DEVICE_LCD_SUPPORT | ATOM_DEVICE_DFP_SUPPORT)) ||
417     - radeon_encoder_is_dp_bridge(encoder)) {
418     + (radeon_encoder_get_dp_bridge_encoder_id(encoder) != ENCODER_OBJECT_ID_NONE)) {
419     if (connector) {
420     struct radeon_connector *radeon_connector = to_radeon_connector(connector);
421     struct radeon_connector_atom_dig *dig_connector =
422     @@ -638,44 +638,29 @@ static u32 atombios_adjust_pll(struct drm_crtc *crtc,
423     if (ss_enabled && ss->percentage)
424     args.v3.sInput.ucDispPllConfig |=
425     DISPPLL_CONFIG_SS_ENABLE;
426     - if (radeon_encoder->devices & (ATOM_DEVICE_DFP_SUPPORT) ||
427     - radeon_encoder_is_dp_bridge(encoder)) {
428     + if (encoder_mode == ATOM_ENCODER_MODE_DP) {
429     + args.v3.sInput.ucDispPllConfig |=
430     + DISPPLL_CONFIG_COHERENT_MODE;
431     + /* 16200 or 27000 */
432     + args.v3.sInput.usPixelClock = cpu_to_le16(dp_clock / 10);
433     + } else if (radeon_encoder->devices & (ATOM_DEVICE_DFP_SUPPORT)) {
434     struct radeon_encoder_atom_dig *dig = radeon_encoder->enc_priv;
435     - if (encoder_mode == ATOM_ENCODER_MODE_DP) {
436     + if (encoder_mode == ATOM_ENCODER_MODE_HDMI)
437     + /* deep color support */
438     + args.v3.sInput.usPixelClock =
439     + cpu_to_le16((mode->clock * bpc / 8) / 10);
440     + if (dig->coherent_mode)
441     args.v3.sInput.ucDispPllConfig |=
442     DISPPLL_CONFIG_COHERENT_MODE;
443     - /* 16200 or 27000 */
444     - args.v3.sInput.usPixelClock = cpu_to_le16(dp_clock / 10);
445     - } else {
446     - if (encoder_mode == ATOM_ENCODER_MODE_HDMI) {
447     - /* deep color support */
448     - args.v3.sInput.usPixelClock =
449     - cpu_to_le16((mode->clock * bpc / 8) / 10);
450     - }
451     - if (dig->coherent_mode)
452     - args.v3.sInput.ucDispPllConfig |=
453     - DISPPLL_CONFIG_COHERENT_MODE;
454     - if (mode->clock > 165000)
455     - args.v3.sInput.ucDispPllConfig |=
456     - DISPPLL_CONFIG_DUAL_LINK;
457     - }
458     - } else if (radeon_encoder->devices & (ATOM_DEVICE_LCD_SUPPORT)) {
459     - if (encoder_mode == ATOM_ENCODER_MODE_DP) {
460     + if (mode->clock > 165000)
461     args.v3.sInput.ucDispPllConfig |=
462     - DISPPLL_CONFIG_COHERENT_MODE;
463     - /* 16200 or 27000 */
464     - args.v3.sInput.usPixelClock = cpu_to_le16(dp_clock / 10);
465     - } else if (encoder_mode != ATOM_ENCODER_MODE_LVDS) {
466     - if (mode->clock > 165000)
467     - args.v3.sInput.ucDispPllConfig |=
468     - DISPPLL_CONFIG_DUAL_LINK;
469     - }
470     + DISPPLL_CONFIG_DUAL_LINK;
471     }
472     - if (radeon_encoder_is_dp_bridge(encoder)) {
473     - struct drm_encoder *ext_encoder = radeon_atom_get_external_encoder(encoder);
474     - struct radeon_encoder *ext_radeon_encoder = to_radeon_encoder(ext_encoder);
475     - args.v3.sInput.ucExtTransmitterID = ext_radeon_encoder->encoder_id;
476     - } else
477     + if (radeon_encoder_get_dp_bridge_encoder_id(encoder) !=
478     + ENCODER_OBJECT_ID_NONE)
479     + args.v3.sInput.ucExtTransmitterID =
480     + radeon_encoder_get_dp_bridge_encoder_id(encoder);
481     + else
482     args.v3.sInput.ucExtTransmitterID = 0;
483    
484     atom_execute_table(rdev->mode_info.atom_context,
485     diff --git a/drivers/gpu/drm/radeon/atombios_dp.c b/drivers/gpu/drm/radeon/atombios_dp.c
486     index 3b77ad6..03a347a 100644
487     --- a/drivers/gpu/drm/radeon/atombios_dp.c
488     +++ b/drivers/gpu/drm/radeon/atombios_dp.c
489     @@ -482,7 +482,8 @@ static int radeon_dp_get_dp_link_clock(struct drm_connector *connector,
490     int bpp = convert_bpc_to_bpp(connector->display_info.bpc);
491     int lane_num, max_pix_clock;
492    
493     - if (radeon_connector_encoder_is_dp_bridge(connector))
494     + if (radeon_connector_encoder_get_dp_bridge_encoder_id(connector) !=
495     + ENCODER_OBJECT_ID_NONE)
496     return 270000;
497    
498     lane_num = radeon_dp_get_dp_lane_number(connector, dpcd, pix_clock);
499     @@ -559,8 +560,12 @@ static void radeon_dp_set_panel_mode(struct drm_encoder *encoder,
500     if (!ASIC_IS_DCE4(rdev))
501     return;
502    
503     - if (radeon_connector_encoder_is_dp_bridge(connector))
504     + if (radeon_connector_encoder_get_dp_bridge_encoder_id(connector) ==
505     + ENCODER_OBJECT_ID_NUTMEG)
506     panel_mode = DP_PANEL_MODE_INTERNAL_DP1_MODE;
507     + else if (radeon_connector_encoder_get_dp_bridge_encoder_id(connector) ==
508     + ENCODER_OBJECT_ID_TRAVIS)
509     + panel_mode = DP_PANEL_MODE_INTERNAL_DP2_MODE;
510     else if (connector->connector_type == DRM_MODE_CONNECTOR_eDP) {
511     u8 tmp = radeon_read_dpcd_reg(radeon_connector, DP_EDP_CONFIGURATION_CAP);
512     if (tmp & 1)
513     diff --git a/drivers/gpu/drm/radeon/radeon_connectors.c b/drivers/gpu/drm/radeon/radeon_connectors.c
514     index ff6a2e0..a58b452 100644
515     --- a/drivers/gpu/drm/radeon/radeon_connectors.c
516     +++ b/drivers/gpu/drm/radeon/radeon_connectors.c
517     @@ -44,8 +44,6 @@ extern void
518     radeon_legacy_backlight_init(struct radeon_encoder *radeon_encoder,
519     struct drm_connector *drm_connector);
520    
521     -bool radeon_connector_encoder_is_dp_bridge(struct drm_connector *connector);
522     -
523     void radeon_connector_hotplug(struct drm_connector *connector)
524     {
525     struct drm_device *dev = connector->dev;
526     @@ -1204,7 +1202,8 @@ static int radeon_dp_get_modes(struct drm_connector *connector)
527     }
528     } else {
529     /* need to setup ddc on the bridge */
530     - if (radeon_connector_encoder_is_dp_bridge(connector)) {
531     + if (radeon_connector_encoder_get_dp_bridge_encoder_id(connector) !=
532     + ENCODER_OBJECT_ID_NONE) {
533     if (encoder)
534     radeon_atom_ext_encoder_setup_ddc(encoder);
535     }
536     @@ -1214,13 +1213,12 @@ static int radeon_dp_get_modes(struct drm_connector *connector)
537     return ret;
538     }
539    
540     -bool radeon_connector_encoder_is_dp_bridge(struct drm_connector *connector)
541     +u16 radeon_connector_encoder_get_dp_bridge_encoder_id(struct drm_connector *connector)
542     {
543     struct drm_mode_object *obj;
544     struct drm_encoder *encoder;
545     struct radeon_encoder *radeon_encoder;
546     int i;
547     - bool found = false;
548    
549     for (i = 0; i < DRM_CONNECTOR_MAX_ENCODER; i++) {
550     if (connector->encoder_ids[i] == 0)
551     @@ -1236,14 +1234,13 @@ bool radeon_connector_encoder_is_dp_bridge(struct drm_connector *connector)
552     switch (radeon_encoder->encoder_id) {
553     case ENCODER_OBJECT_ID_TRAVIS:
554     case ENCODER_OBJECT_ID_NUTMEG:
555     - found = true;
556     - break;
557     + return radeon_encoder->encoder_id;
558     default:
559     break;
560     }
561     }
562    
563     - return found;
564     + return ENCODER_OBJECT_ID_NONE;
565     }
566    
567     bool radeon_connector_encoder_is_hbr2(struct drm_connector *connector)
568     @@ -1320,7 +1317,8 @@ radeon_dp_detect(struct drm_connector *connector, bool force)
569     if (!radeon_dig_connector->edp_on)
570     atombios_set_edp_panel_power(connector,
571     ATOM_TRANSMITTER_ACTION_POWER_OFF);
572     - } else if (radeon_connector_encoder_is_dp_bridge(connector)) {
573     + } else if (radeon_connector_encoder_get_dp_bridge_encoder_id(connector) !=
574     + ENCODER_OBJECT_ID_NONE) {
575     /* DP bridges are always DP */
576     radeon_dig_connector->dp_sink_type = CONNECTOR_OBJECT_ID_DISPLAYPORT;
577     /* get the DPCD from the bridge */
578     diff --git a/drivers/gpu/drm/radeon/radeon_display.c b/drivers/gpu/drm/radeon/radeon_display.c
579     index 6adb3e5..07ac481 100644
580     --- a/drivers/gpu/drm/radeon/radeon_display.c
581     +++ b/drivers/gpu/drm/radeon/radeon_display.c
582     @@ -708,7 +708,8 @@ int radeon_ddc_get_modes(struct radeon_connector *radeon_connector)
583    
584     if ((radeon_connector->base.connector_type == DRM_MODE_CONNECTOR_DisplayPort) ||
585     (radeon_connector->base.connector_type == DRM_MODE_CONNECTOR_eDP) ||
586     - radeon_connector_encoder_is_dp_bridge(&radeon_connector->base)) {
587     + (radeon_connector_encoder_get_dp_bridge_encoder_id(&radeon_connector->base) !=
588     + ENCODER_OBJECT_ID_NONE)) {
589     struct radeon_connector_atom_dig *dig = radeon_connector->con_priv;
590    
591     if ((dig->dp_sink_type == CONNECTOR_OBJECT_ID_DISPLAYPORT ||
592     diff --git a/drivers/gpu/drm/radeon/radeon_encoders.c b/drivers/gpu/drm/radeon/radeon_encoders.c
593     index eb3f6dc..9838865 100644
594     --- a/drivers/gpu/drm/radeon/radeon_encoders.c
595     +++ b/drivers/gpu/drm/radeon/radeon_encoders.c
596     @@ -266,7 +266,7 @@ struct drm_encoder *radeon_atom_get_external_encoder(struct drm_encoder *encoder
597     return NULL;
598     }
599    
600     -bool radeon_encoder_is_dp_bridge(struct drm_encoder *encoder)
601     +u16 radeon_encoder_get_dp_bridge_encoder_id(struct drm_encoder *encoder)
602     {
603     struct drm_encoder *other_encoder = radeon_atom_get_external_encoder(encoder);
604    
605     @@ -368,7 +368,7 @@ static bool radeon_atom_mode_fixup(struct drm_encoder *encoder,
606    
607     if (ASIC_IS_DCE3(rdev) &&
608     ((radeon_encoder->active_device & (ATOM_DEVICE_DFP_SUPPORT | ATOM_DEVICE_LCD_SUPPORT)) ||
609     - radeon_encoder_is_dp_bridge(encoder))) {
610     + (radeon_encoder_get_dp_bridge_encoder_id(encoder) != ENCODER_OBJECT_ID_NONE))) {
611     struct drm_connector *connector = radeon_get_connector_for_encoder(encoder);
612     radeon_dp_set_link_config(connector, mode);
613     }
614     @@ -658,7 +658,7 @@ atombios_get_encoder_mode(struct drm_encoder *encoder)
615     struct radeon_connector_atom_dig *dig_connector;
616    
617     /* dp bridges are always DP */
618     - if (radeon_encoder_is_dp_bridge(encoder))
619     + if (radeon_encoder_get_dp_bridge_encoder_id(encoder) != ENCODER_OBJECT_ID_NONE)
620     return ATOM_ENCODER_MODE_DP;
621    
622     /* DVO is always DVO */
623     @@ -1638,7 +1638,7 @@ atombios_set_encoder_crtc_source(struct drm_encoder *encoder)
624     break;
625     case 2:
626     args.v2.ucCRTC = radeon_crtc->crtc_id;
627     - if (radeon_encoder_is_dp_bridge(encoder)) {
628     + if (radeon_encoder_get_dp_bridge_encoder_id(encoder) != ENCODER_OBJECT_ID_NONE) {
629     struct drm_connector *connector = radeon_get_connector_for_encoder(encoder);
630    
631     if (connector->connector_type == DRM_MODE_CONNECTOR_LVDS)
632     @@ -2099,7 +2099,8 @@ static void radeon_atom_encoder_prepare(struct drm_encoder *encoder)
633    
634     if ((radeon_encoder->active_device &
635     (ATOM_DEVICE_DFP_SUPPORT | ATOM_DEVICE_LCD_SUPPORT)) ||
636     - radeon_encoder_is_dp_bridge(encoder)) {
637     + (radeon_encoder_get_dp_bridge_encoder_id(encoder) !=
638     + ENCODER_OBJECT_ID_NONE)) {
639     struct radeon_encoder_atom_dig *dig = radeon_encoder->enc_priv;
640     if (dig)
641     dig->dig_encoder = radeon_atom_pick_dig_encoder(encoder);
642     diff --git a/drivers/gpu/drm/radeon/radeon_mode.h b/drivers/gpu/drm/radeon/radeon_mode.h
643     index ed0178f..cbf80de 100644
644     --- a/drivers/gpu/drm/radeon/radeon_mode.h
645     +++ b/drivers/gpu/drm/radeon/radeon_mode.h
646     @@ -468,8 +468,8 @@ radeon_atombios_get_tv_info(struct radeon_device *rdev);
647     extern struct drm_connector *
648     radeon_get_connector_for_encoder(struct drm_encoder *encoder);
649    
650     -extern bool radeon_encoder_is_dp_bridge(struct drm_encoder *encoder);
651     -extern bool radeon_connector_encoder_is_dp_bridge(struct drm_connector *connector);
652     +extern u16 radeon_encoder_get_dp_bridge_encoder_id(struct drm_encoder *encoder);
653     +extern u16 radeon_connector_encoder_get_dp_bridge_encoder_id(struct drm_connector *connector);
654     extern bool radeon_connector_encoder_is_hbr2(struct drm_connector *connector);
655     extern bool radeon_connector_is_dp12_capable(struct drm_connector *connector);
656    
657     diff --git a/drivers/hwmon/jz4740-hwmon.c b/drivers/hwmon/jz4740-hwmon.c
658     index fea292d..b65a4da 100644
659     --- a/drivers/hwmon/jz4740-hwmon.c
660     +++ b/drivers/hwmon/jz4740-hwmon.c
661     @@ -59,7 +59,7 @@ static ssize_t jz4740_hwmon_read_adcin(struct device *dev,
662     {
663     struct jz4740_hwmon *hwmon = dev_get_drvdata(dev);
664     struct completion *completion = &hwmon->read_completion;
665     - unsigned long t;
666     + long t;
667     unsigned long val;
668     int ret;
669    
670     diff --git a/drivers/mmc/host/mxcmmc.c b/drivers/mmc/host/mxcmmc.c
671     index 14aa213..b87143d 100644
672     --- a/drivers/mmc/host/mxcmmc.c
673     +++ b/drivers/mmc/host/mxcmmc.c
674     @@ -731,6 +731,7 @@ static void mxcmci_set_ios(struct mmc_host *mmc, struct mmc_ios *ios)
675     "failed to config DMA channel. Falling back to PIO\n");
676     dma_release_channel(host->dma);
677     host->do_dma = 0;
678     + host->dma = NULL;
679     }
680     }
681    
682     diff --git a/drivers/ptp/ptp_clock.c b/drivers/ptp/ptp_clock.c
683     index cf3f999..10451a1 100644
684     --- a/drivers/ptp/ptp_clock.c
685     +++ b/drivers/ptp/ptp_clock.c
686     @@ -101,7 +101,9 @@ static s32 scaled_ppm_to_ppb(long ppm)
687    
688     static int ptp_clock_getres(struct posix_clock *pc, struct timespec *tp)
689     {
690     - return 1; /* always round timer functions to one nanosecond */
691     + tp->tv_sec = 0;
692     + tp->tv_nsec = 1;
693     + return 0;
694     }
695    
696     static int ptp_clock_settime(struct posix_clock *pc, const struct timespec *tp)
697     diff --git a/drivers/rtc/rtc-s3c.c b/drivers/rtc/rtc-s3c.c
698     index 7639ab9..5b979d9 100644
699     --- a/drivers/rtc/rtc-s3c.c
700     +++ b/drivers/rtc/rtc-s3c.c
701     @@ -202,7 +202,6 @@ static int s3c_rtc_settime(struct device *dev, struct rtc_time *tm)
702     void __iomem *base = s3c_rtc_base;
703     int year = tm->tm_year - 100;
704    
705     - clk_enable(rtc_clk);
706     pr_debug("set time %04d.%02d.%02d %02d:%02d:%02d\n",
707     1900 + tm->tm_year, tm->tm_mon, tm->tm_mday,
708     tm->tm_hour, tm->tm_min, tm->tm_sec);
709     @@ -214,6 +213,7 @@ static int s3c_rtc_settime(struct device *dev, struct rtc_time *tm)
710     return -EINVAL;
711     }
712    
713     + clk_enable(rtc_clk);
714     writeb(bin2bcd(tm->tm_sec), base + S3C2410_RTCSEC);
715     writeb(bin2bcd(tm->tm_min), base + S3C2410_RTCMIN);
716     writeb(bin2bcd(tm->tm_hour), base + S3C2410_RTCHOUR);
717     diff --git a/drivers/staging/rtl8712/usb_intf.c b/drivers/staging/rtl8712/usb_intf.c
718     index 21ce2af..6cb7e28 100644
719     --- a/drivers/staging/rtl8712/usb_intf.c
720     +++ b/drivers/staging/rtl8712/usb_intf.c
721     @@ -86,6 +86,7 @@ static struct usb_device_id rtl871x_usb_id_tbl[] = {
722     {USB_DEVICE(0x0DF6, 0x0045)},
723     {USB_DEVICE(0x0DF6, 0x0059)}, /* 11n mode disable */
724     {USB_DEVICE(0x0DF6, 0x004B)},
725     + {USB_DEVICE(0x0DF6, 0x005D)},
726     {USB_DEVICE(0x0DF6, 0x0063)},
727     /* Sweex */
728     {USB_DEVICE(0x177F, 0x0154)},
729     diff --git a/drivers/target/iscsi/iscsi_target.c b/drivers/target/iscsi/iscsi_target.c
730     index 26a5d8b..c4ac6f6 100644
731     --- a/drivers/target/iscsi/iscsi_target.c
732     +++ b/drivers/target/iscsi/iscsi_target.c
733     @@ -1043,6 +1043,8 @@ done:
734     */
735     send_check_condition = 1;
736     } else {
737     + cmd->data_length = cmd->se_cmd.data_length;
738     +
739     if (iscsit_decide_list_to_build(cmd, payload_length) < 0)
740     return iscsit_add_reject_from_cmd(
741     ISCSI_REASON_BOOKMARK_NO_RESOURCES,
742     @@ -2512,10 +2514,10 @@ static int iscsit_send_data_in(
743     if (hdr->flags & ISCSI_FLAG_DATA_STATUS) {
744     if (cmd->se_cmd.se_cmd_flags & SCF_OVERFLOW_BIT) {
745     hdr->flags |= ISCSI_FLAG_DATA_OVERFLOW;
746     - hdr->residual_count = cpu_to_be32(cmd->residual_count);
747     + hdr->residual_count = cpu_to_be32(cmd->se_cmd.residual_count);
748     } else if (cmd->se_cmd.se_cmd_flags & SCF_UNDERFLOW_BIT) {
749     hdr->flags |= ISCSI_FLAG_DATA_UNDERFLOW;
750     - hdr->residual_count = cpu_to_be32(cmd->residual_count);
751     + hdr->residual_count = cpu_to_be32(cmd->se_cmd.residual_count);
752     }
753     }
754     hton24(hdr->dlength, datain.length);
755     @@ -3017,10 +3019,10 @@ static int iscsit_send_status(
756     hdr->flags |= ISCSI_FLAG_CMD_FINAL;
757     if (cmd->se_cmd.se_cmd_flags & SCF_OVERFLOW_BIT) {
758     hdr->flags |= ISCSI_FLAG_CMD_OVERFLOW;
759     - hdr->residual_count = cpu_to_be32(cmd->residual_count);
760     + hdr->residual_count = cpu_to_be32(cmd->se_cmd.residual_count);
761     } else if (cmd->se_cmd.se_cmd_flags & SCF_UNDERFLOW_BIT) {
762     hdr->flags |= ISCSI_FLAG_CMD_UNDERFLOW;
763     - hdr->residual_count = cpu_to_be32(cmd->residual_count);
764     + hdr->residual_count = cpu_to_be32(cmd->se_cmd.residual_count);
765     }
766     hdr->response = cmd->iscsi_response;
767     hdr->cmd_status = cmd->se_cmd.scsi_status;
768     @@ -3132,6 +3134,7 @@ static int iscsit_send_task_mgt_rsp(
769     hdr = (struct iscsi_tm_rsp *) cmd->pdu;
770     memset(hdr, 0, ISCSI_HDR_LEN);
771     hdr->opcode = ISCSI_OP_SCSI_TMFUNC_RSP;
772     + hdr->flags = ISCSI_FLAG_CMD_FINAL;
773     hdr->response = iscsit_convert_tcm_tmr_rsp(se_tmr);
774     hdr->itt = cpu_to_be32(cmd->init_task_tag);
775     cmd->stat_sn = conn->stat_sn++;
776     diff --git a/drivers/target/iscsi/iscsi_target_core.h b/drivers/target/iscsi/iscsi_target_core.h
777     index 470ed55..8d18b2c 100644
778     --- a/drivers/target/iscsi/iscsi_target_core.h
779     +++ b/drivers/target/iscsi/iscsi_target_core.h
780     @@ -395,7 +395,6 @@ struct iscsi_cmd {
781     u32 pdu_send_order;
782     /* Current struct iscsi_pdu in struct iscsi_cmd->pdu_list */
783     u32 pdu_start;
784     - u32 residual_count;
785     /* Next struct iscsi_seq to send in struct iscsi_cmd->seq_list */
786     u32 seq_send_order;
787     /* Number of struct iscsi_seq in struct iscsi_cmd->seq_list */
788     diff --git a/drivers/target/target_core_cdb.c b/drivers/target/target_core_cdb.c
789     index f04d4ef..5f91397 100644
790     --- a/drivers/target/target_core_cdb.c
791     +++ b/drivers/target/target_core_cdb.c
792     @@ -477,7 +477,7 @@ target_emulate_evpd_86(struct se_cmd *cmd, unsigned char *buf)
793     if (cmd->data_length < 60)
794     return 0;
795    
796     - buf[2] = 0x3c;
797     + buf[3] = 0x3c;
798     /* Set HEADSUP, ORDSUP, SIMPSUP */
799     buf[5] = 0x07;
800    
801     diff --git a/drivers/target/target_core_file.c b/drivers/target/target_core_file.c
802     index bc1b336..ceb2a28 100644
803     --- a/drivers/target/target_core_file.c
804     +++ b/drivers/target/target_core_file.c
805     @@ -288,9 +288,9 @@ static int fd_do_readv(struct se_task *task)
806     return -ENOMEM;
807     }
808    
809     - for (i = 0; i < task->task_sg_nents; i++) {
810     - iov[i].iov_len = sg[i].length;
811     - iov[i].iov_base = sg_virt(&sg[i]);
812     + for_each_sg(task->task_sg, sg, task->task_sg_nents, i) {
813     + iov[i].iov_len = sg->length;
814     + iov[i].iov_base = sg_virt(sg);
815     }
816    
817     old_fs = get_fs();
818     @@ -340,9 +340,9 @@ static int fd_do_writev(struct se_task *task)
819     return -ENOMEM;
820     }
821    
822     - for (i = 0; i < task->task_sg_nents; i++) {
823     - iov[i].iov_len = sg[i].length;
824     - iov[i].iov_base = sg_virt(&sg[i]);
825     + for_each_sg(task->task_sg, sg, task->task_sg_nents, i) {
826     + iov[i].iov_len = sg->length;
827     + iov[i].iov_base = sg_virt(sg);
828     }
829    
830     old_fs = get_fs();
831     diff --git a/drivers/target/target_core_transport.c b/drivers/target/target_core_transport.c
832     index 013c100..e2added 100644
833     --- a/drivers/target/target_core_transport.c
834     +++ b/drivers/target/target_core_transport.c
835     @@ -2562,10 +2562,15 @@ static inline u32 transport_get_sectors_6(
836    
837     /*
838     * Everything else assume TYPE_DISK Sector CDB location.
839     - * Use 8-bit sector value.
840     + * Use 8-bit sector value. SBC-3 says:
841     + *
842     + * A TRANSFER LENGTH field set to zero specifies that 256
843     + * logical blocks shall be written. Any other value
844     + * specifies the number of logical blocks that shall be
845     + * written.
846     */
847     type_disk:
848     - return (u32)cdb[4];
849     + return cdb[4] ? : 256;
850     }
851    
852     static inline u32 transport_get_sectors_10(
853     @@ -3873,6 +3878,18 @@ int transport_generic_map_mem_to_cmd(
854    
855     if ((cmd->se_cmd_flags & SCF_SCSI_DATA_SG_IO_CDB) ||
856     (cmd->se_cmd_flags & SCF_SCSI_CONTROL_SG_IO_CDB)) {
857     + /*
858     + * Reject SCSI data overflow with map_mem_to_cmd() as incoming
859     + * scatterlists already have been set to follow what the fabric
860     + * passes for the original expected data transfer length.
861     + */
862     + if (cmd->se_cmd_flags & SCF_OVERFLOW_BIT) {
863     + pr_warn("Rejecting SCSI DATA overflow for fabric using"
864     + " SCF_PASSTHROUGH_SG_TO_MEM_NOALLOC\n");
865     + cmd->se_cmd_flags |= SCF_SCSI_CDB_EXCEPTION;
866     + cmd->scsi_sense_reason = TCM_INVALID_CDB_FIELD;
867     + return -EINVAL;
868     + }
869    
870     cmd->t_data_sg = sgl;
871     cmd->t_data_nents = sgl_count;
872     diff --git a/drivers/usb/class/cdc-acm.c b/drivers/usb/class/cdc-acm.c
873     index 2ffcaa0..8faa23c 100644
874     --- a/drivers/usb/class/cdc-acm.c
875     +++ b/drivers/usb/class/cdc-acm.c
876     @@ -1458,6 +1458,16 @@ static const struct usb_device_id acm_ids[] = {
877     },
878     { USB_DEVICE(0x22b8, 0x6425), /* Motorola MOTOMAGX phones */
879     },
880     + /* Motorola H24 HSPA module: */
881     + { USB_DEVICE(0x22b8, 0x2d91) }, /* modem */
882     + { USB_DEVICE(0x22b8, 0x2d92) }, /* modem + diagnostics */
883     + { USB_DEVICE(0x22b8, 0x2d93) }, /* modem + AT port */
884     + { USB_DEVICE(0x22b8, 0x2d95) }, /* modem + AT port + diagnostics */
885     + { USB_DEVICE(0x22b8, 0x2d96) }, /* modem + NMEA */
886     + { USB_DEVICE(0x22b8, 0x2d97) }, /* modem + diagnostics + NMEA */
887     + { USB_DEVICE(0x22b8, 0x2d99) }, /* modem + AT port + NMEA */
888     + { USB_DEVICE(0x22b8, 0x2d9a) }, /* modem + AT port + diagnostics + NMEA */
889     +
890     { USB_DEVICE(0x0572, 0x1329), /* Hummingbird huc56s (Conexant) */
891     .driver_info = NO_UNION_NORMAL, /* union descriptor misplaced on
892     data interface instead of
893     diff --git a/drivers/usb/serial/option.c b/drivers/usb/serial/option.c
894     index e98a1e1..d2becb9 100644
895     --- a/drivers/usb/serial/option.c
896     +++ b/drivers/usb/serial/option.c
897     @@ -659,7 +659,12 @@ static const struct usb_device_id option_ids[] = {
898     { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E353, 0xff, 0x01, 0x01) },
899     { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E353, 0xff, 0x01, 0x02) },
900     { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E353, 0xff, 0x01, 0x03) },
901     - { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E353, 0xff, 0x01, 0x08) },
902     + { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E353, 0xff, 0x01, 0x10) },
903     + { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E353, 0xff, 0x01, 0x12) },
904     + { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E353, 0xff, 0x01, 0x13) },
905     + { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E353, 0xff, 0x02, 0x01) }, /* E398 3G Modem */
906     + { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E353, 0xff, 0x02, 0x02) }, /* E398 3G PC UI Interface */
907     + { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E353, 0xff, 0x02, 0x03) }, /* E398 3G Application Interface */
908     { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_V640) },
909     { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_V620) },
910     { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_V740) },
911     diff --git a/fs/cifs/readdir.c b/fs/cifs/readdir.c
912     index 5de03ec..a090bbe 100644
913     --- a/fs/cifs/readdir.c
914     +++ b/fs/cifs/readdir.c
915     @@ -554,7 +554,10 @@ static int find_cifs_entry(const int xid, struct cifs_tcon *pTcon,
916     rc);
917     return rc;
918     }
919     - cifs_save_resume_key(cifsFile->srch_inf.last_entry, cifsFile);
920     + /* FindFirst/Next set last_entry to NULL on malformed reply */
921     + if (cifsFile->srch_inf.last_entry)
922     + cifs_save_resume_key(cifsFile->srch_inf.last_entry,
923     + cifsFile);
924     }
925    
926     while ((index_to_find >= cifsFile->srch_inf.index_of_last_entry) &&
927     @@ -562,7 +565,10 @@ static int find_cifs_entry(const int xid, struct cifs_tcon *pTcon,
928     cFYI(1, "calling findnext2");
929     rc = CIFSFindNext(xid, pTcon, cifsFile->netfid,
930     &cifsFile->srch_inf);
931     - cifs_save_resume_key(cifsFile->srch_inf.last_entry, cifsFile);
932     + /* FindFirst/Next set last_entry to NULL on malformed reply */
933     + if (cifsFile->srch_inf.last_entry)
934     + cifs_save_resume_key(cifsFile->srch_inf.last_entry,
935     + cifsFile);
936     if (rc)
937     return -ENOENT;
938     }
939     diff --git a/fs/dcache.c b/fs/dcache.c
940     index a88948b..8b732a2 100644
941     --- a/fs/dcache.c
942     +++ b/fs/dcache.c
943     @@ -2398,16 +2398,14 @@ static int prepend_name(char **buffer, int *buflen, struct qstr *name)
944     /**
945     * prepend_path - Prepend path string to a buffer
946     * @path: the dentry/vfsmount to report
947     - * @root: root vfsmnt/dentry (may be modified by this function)
948     + * @root: root vfsmnt/dentry
949     * @buffer: pointer to the end of the buffer
950     * @buflen: pointer to buffer length
951     *
952     * Caller holds the rename_lock.
953     - *
954     - * If path is not reachable from the supplied root, then the value of
955     - * root is changed (without modifying refcounts).
956     */
957     -static int prepend_path(const struct path *path, struct path *root,
958     +static int prepend_path(const struct path *path,
959     + const struct path *root,
960     char **buffer, int *buflen)
961     {
962     struct dentry *dentry = path->dentry;
963     @@ -2442,10 +2440,10 @@ static int prepend_path(const struct path *path, struct path *root,
964     dentry = parent;
965     }
966    
967     -out:
968     if (!error && !slash)
969     error = prepend(buffer, buflen, "/", 1);
970    
971     +out:
972     br_read_unlock(vfsmount_lock);
973     return error;
974    
975     @@ -2459,15 +2457,17 @@ global_root:
976     WARN(1, "Root dentry has weird name <%.*s>\n",
977     (int) dentry->d_name.len, dentry->d_name.name);
978     }
979     - root->mnt = vfsmnt;
980     - root->dentry = dentry;
981     + if (!slash)
982     + error = prepend(buffer, buflen, "/", 1);
983     + if (!error)
984     + error = vfsmnt->mnt_ns ? 1 : 2;
985     goto out;
986     }
987    
988     /**
989     * __d_path - return the path of a dentry
990     * @path: the dentry/vfsmount to report
991     - * @root: root vfsmnt/dentry (may be modified by this function)
992     + * @root: root vfsmnt/dentry
993     * @buf: buffer to return value in
994     * @buflen: buffer length
995     *
996     @@ -2478,10 +2478,10 @@ global_root:
997     *
998     * "buflen" should be positive.
999     *
1000     - * If path is not reachable from the supplied root, then the value of
1001     - * root is changed (without modifying refcounts).
1002     + * If the path is not reachable from the supplied root, return %NULL.
1003     */
1004     -char *__d_path(const struct path *path, struct path *root,
1005     +char *__d_path(const struct path *path,
1006     + const struct path *root,
1007     char *buf, int buflen)
1008     {
1009     char *res = buf + buflen;
1010     @@ -2492,7 +2492,28 @@ char *__d_path(const struct path *path, struct path *root,
1011     error = prepend_path(path, root, &res, &buflen);
1012     write_sequnlock(&rename_lock);
1013    
1014     - if (error)
1015     + if (error < 0)
1016     + return ERR_PTR(error);
1017     + if (error > 0)
1018     + return NULL;
1019     + return res;
1020     +}
1021     +
1022     +char *d_absolute_path(const struct path *path,
1023     + char *buf, int buflen)
1024     +{
1025     + struct path root = {};
1026     + char *res = buf + buflen;
1027     + int error;
1028     +
1029     + prepend(&res, &buflen, "\0", 1);
1030     + write_seqlock(&rename_lock);
1031     + error = prepend_path(path, &root, &res, &buflen);
1032     + write_sequnlock(&rename_lock);
1033     +
1034     + if (error > 1)
1035     + error = -EINVAL;
1036     + if (error < 0)
1037     return ERR_PTR(error);
1038     return res;
1039     }
1040     @@ -2500,8 +2521,9 @@ char *__d_path(const struct path *path, struct path *root,
1041     /*
1042     * same as __d_path but appends "(deleted)" for unlinked files.
1043     */
1044     -static int path_with_deleted(const struct path *path, struct path *root,
1045     - char **buf, int *buflen)
1046     +static int path_with_deleted(const struct path *path,
1047     + const struct path *root,
1048     + char **buf, int *buflen)
1049     {
1050     prepend(buf, buflen, "\0", 1);
1051     if (d_unlinked(path->dentry)) {
1052     @@ -2538,7 +2560,6 @@ char *d_path(const struct path *path, char *buf, int buflen)
1053     {
1054     char *res = buf + buflen;
1055     struct path root;
1056     - struct path tmp;
1057     int error;
1058    
1059     /*
1060     @@ -2553,9 +2574,8 @@ char *d_path(const struct path *path, char *buf, int buflen)
1061    
1062     get_fs_root(current->fs, &root);
1063     write_seqlock(&rename_lock);
1064     - tmp = root;
1065     - error = path_with_deleted(path, &tmp, &res, &buflen);
1066     - if (error)
1067     + error = path_with_deleted(path, &root, &res, &buflen);
1068     + if (error < 0)
1069     res = ERR_PTR(error);
1070     write_sequnlock(&rename_lock);
1071     path_put(&root);
1072     @@ -2576,7 +2596,6 @@ char *d_path_with_unreachable(const struct path *path, char *buf, int buflen)
1073     {
1074     char *res = buf + buflen;
1075     struct path root;
1076     - struct path tmp;
1077     int error;
1078    
1079     if (path->dentry->d_op && path->dentry->d_op->d_dname)
1080     @@ -2584,9 +2603,8 @@ char *d_path_with_unreachable(const struct path *path, char *buf, int buflen)
1081    
1082     get_fs_root(current->fs, &root);
1083     write_seqlock(&rename_lock);
1084     - tmp = root;
1085     - error = path_with_deleted(path, &tmp, &res, &buflen);
1086     - if (!error && !path_equal(&tmp, &root))
1087     + error = path_with_deleted(path, &root, &res, &buflen);
1088     + if (error > 0)
1089     error = prepend_unreachable(&res, &buflen);
1090     write_sequnlock(&rename_lock);
1091     path_put(&root);
1092     @@ -2717,19 +2735,18 @@ SYSCALL_DEFINE2(getcwd, char __user *, buf, unsigned long, size)
1093     write_seqlock(&rename_lock);
1094     if (!d_unlinked(pwd.dentry)) {
1095     unsigned long len;
1096     - struct path tmp = root;
1097     char *cwd = page + PAGE_SIZE;
1098     int buflen = PAGE_SIZE;
1099    
1100     prepend(&cwd, &buflen, "\0", 1);
1101     - error = prepend_path(&pwd, &tmp, &cwd, &buflen);
1102     + error = prepend_path(&pwd, &root, &cwd, &buflen);
1103     write_sequnlock(&rename_lock);
1104    
1105     - if (error)
1106     + if (error < 0)
1107     goto out;
1108    
1109     /* Unreachable from current root */
1110     - if (!path_equal(&tmp, &root)) {
1111     + if (error > 0) {
1112     error = prepend_unreachable(&cwd, &buflen);
1113     if (error)
1114     goto out;
1115     diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c
1116     index b644b9c..5dbdb6b 100644
1117     --- a/fs/ext4/inode.c
1118     +++ b/fs/ext4/inode.c
1119     @@ -1261,8 +1261,11 @@ static int mpage_da_submit_io(struct mpage_da_data *mpd,
1120     clear_buffer_unwritten(bh);
1121     }
1122    
1123     - /* skip page if block allocation undone */
1124     - if (buffer_delay(bh) || buffer_unwritten(bh))
1125     + /*
1126     + * skip page if block allocation undone and
1127     + * block is dirty
1128     + */
1129     + if (ext4_bh_delay_or_unwritten(NULL, bh))
1130     skip_page = 1;
1131     bh = bh->b_this_page;
1132     block_start += bh->b_size;
1133     @@ -2367,7 +2370,7 @@ static int ext4_da_write_end(struct file *file,
1134     */
1135    
1136     new_i_size = pos + copied;
1137     - if (new_i_size > EXT4_I(inode)->i_disksize) {
1138     + if (copied && new_i_size > EXT4_I(inode)->i_disksize) {
1139     if (ext4_da_should_update_i_disksize(page, end)) {
1140     down_write(&EXT4_I(inode)->i_data_sem);
1141     if (new_i_size > EXT4_I(inode)->i_disksize) {
1142     @@ -2630,10 +2633,11 @@ static void ext4_end_io_dio(struct kiocb *iocb, loff_t offset,
1143     iocb->private, io_end->inode->i_ino, iocb, offset,
1144     size);
1145    
1146     + iocb->private = NULL;
1147     +
1148     /* if not aio dio with unwritten extents, just free io and return */
1149     if (!(io_end->flag & EXT4_IO_END_UNWRITTEN)) {
1150     ext4_free_io_end(io_end);
1151     - iocb->private = NULL;
1152     out:
1153     if (is_async)
1154     aio_complete(iocb, ret, 0);
1155     @@ -2656,7 +2660,6 @@ out:
1156     spin_unlock_irqrestore(&ei->i_completed_io_lock, flags);
1157    
1158     /* queue the work to convert unwritten extents to written */
1159     - iocb->private = NULL;
1160     queue_work(wq, &io_end->work);
1161    
1162     /* XXX: probably should move into the real I/O completion handler */
1163     diff --git a/fs/ext4/page-io.c b/fs/ext4/page-io.c
1164     index 92f38ee..78ab854 100644
1165     --- a/fs/ext4/page-io.c
1166     +++ b/fs/ext4/page-io.c
1167     @@ -401,6 +401,18 @@ int ext4_bio_write_page(struct ext4_io_submit *io,
1168    
1169     block_end = block_start + blocksize;
1170     if (block_start >= len) {
1171     + /*
1172     + * Comments copied from block_write_full_page_endio:
1173     + *
1174     + * The page straddles i_size. It must be zeroed out on
1175     + * each and every writepage invocation because it may
1176     + * be mmapped. "A file is mapped in multiples of the
1177     + * page size. For a file that is not a multiple of
1178     + * the page size, the remaining memory is zeroed when
1179     + * mapped, and writes to that region are not written
1180     + * out to the file."
1181     + */
1182     + zero_user_segment(page, block_start, block_end);
1183     clear_buffer_dirty(bh);
1184     set_buffer_uptodate(bh);
1185     continue;
1186     diff --git a/fs/ext4/super.c b/fs/ext4/super.c
1187     index 44d0c8d..065ff37 100644
1188     --- a/fs/ext4/super.c
1189     +++ b/fs/ext4/super.c
1190     @@ -1140,9 +1140,9 @@ static int ext4_show_options(struct seq_file *seq, struct vfsmount *vfs)
1191     seq_puts(seq, ",block_validity");
1192    
1193     if (!test_opt(sb, INIT_INODE_TABLE))
1194     - seq_puts(seq, ",noinit_inode_table");
1195     + seq_puts(seq, ",noinit_itable");
1196     else if (sbi->s_li_wait_mult != EXT4_DEF_LI_WAIT_MULT)
1197     - seq_printf(seq, ",init_inode_table=%u",
1198     + seq_printf(seq, ",init_itable=%u",
1199     (unsigned) sbi->s_li_wait_mult);
1200    
1201     ext4_show_quota_options(seq, sb);
1202     @@ -1318,8 +1318,7 @@ enum {
1203     Opt_nomblk_io_submit, Opt_block_validity, Opt_noblock_validity,
1204     Opt_inode_readahead_blks, Opt_journal_ioprio,
1205     Opt_dioread_nolock, Opt_dioread_lock,
1206     - Opt_discard, Opt_nodiscard,
1207     - Opt_init_inode_table, Opt_noinit_inode_table,
1208     + Opt_discard, Opt_nodiscard, Opt_init_itable, Opt_noinit_itable,
1209     };
1210    
1211     static const match_table_t tokens = {
1212     @@ -1392,9 +1391,9 @@ static const match_table_t tokens = {
1213     {Opt_dioread_lock, "dioread_lock"},
1214     {Opt_discard, "discard"},
1215     {Opt_nodiscard, "nodiscard"},
1216     - {Opt_init_inode_table, "init_itable=%u"},
1217     - {Opt_init_inode_table, "init_itable"},
1218     - {Opt_noinit_inode_table, "noinit_itable"},
1219     + {Opt_init_itable, "init_itable=%u"},
1220     + {Opt_init_itable, "init_itable"},
1221     + {Opt_noinit_itable, "noinit_itable"},
1222     {Opt_err, NULL},
1223     };
1224    
1225     @@ -1871,7 +1870,7 @@ set_qf_format:
1226     case Opt_dioread_lock:
1227     clear_opt(sb, DIOREAD_NOLOCK);
1228     break;
1229     - case Opt_init_inode_table:
1230     + case Opt_init_itable:
1231     set_opt(sb, INIT_INODE_TABLE);
1232     if (args[0].from) {
1233     if (match_int(&args[0], &option))
1234     @@ -1882,7 +1881,7 @@ set_qf_format:
1235     return 0;
1236     sbi->s_li_wait_mult = option;
1237     break;
1238     - case Opt_noinit_inode_table:
1239     + case Opt_noinit_itable:
1240     clear_opt(sb, INIT_INODE_TABLE);
1241     break;
1242     default:
1243     diff --git a/fs/fuse/dev.c b/fs/fuse/dev.c
1244     index 5cb8614..2aaf3ea 100644
1245     --- a/fs/fuse/dev.c
1246     +++ b/fs/fuse/dev.c
1247     @@ -1512,7 +1512,7 @@ static int fuse_retrieve(struct fuse_conn *fc, struct inode *inode,
1248     else if (outarg->offset + num > file_size)
1249     num = file_size - outarg->offset;
1250    
1251     - while (num) {
1252     + while (num && req->num_pages < FUSE_MAX_PAGES_PER_REQ) {
1253     struct page *page;
1254     unsigned int this_num;
1255    
1256     @@ -1526,6 +1526,7 @@ static int fuse_retrieve(struct fuse_conn *fc, struct inode *inode,
1257    
1258     num -= this_num;
1259     total_len += this_num;
1260     + index++;
1261     }
1262     req->misc.retrieve_in.offset = outarg->offset;
1263     req->misc.retrieve_in.size = total_len;
1264     diff --git a/fs/fuse/file.c b/fs/fuse/file.c
1265     index 594f07a..19029e9 100644
1266     --- a/fs/fuse/file.c
1267     +++ b/fs/fuse/file.c
1268     @@ -1556,7 +1556,7 @@ static loff_t fuse_file_llseek(struct file *file, loff_t offset, int origin)
1269     struct inode *inode = file->f_path.dentry->d_inode;
1270    
1271     mutex_lock(&inode->i_mutex);
1272     - if (origin != SEEK_CUR || origin != SEEK_SET) {
1273     + if (origin != SEEK_CUR && origin != SEEK_SET) {
1274     retval = fuse_update_attributes(inode, NULL, file, NULL);
1275     if (retval)
1276     goto exit;
1277     diff --git a/fs/hfs/btree.c b/fs/hfs/btree.c
1278     index 3ebc437..1cbdeea 100644
1279     --- a/fs/hfs/btree.c
1280     +++ b/fs/hfs/btree.c
1281     @@ -46,11 +46,26 @@ struct hfs_btree *hfs_btree_open(struct super_block *sb, u32 id, btree_keycmp ke
1282     case HFS_EXT_CNID:
1283     hfs_inode_read_fork(tree->inode, mdb->drXTExtRec, mdb->drXTFlSize,
1284     mdb->drXTFlSize, be32_to_cpu(mdb->drXTClpSiz));
1285     + if (HFS_I(tree->inode)->alloc_blocks >
1286     + HFS_I(tree->inode)->first_blocks) {
1287     + printk(KERN_ERR "hfs: invalid btree extent records\n");
1288     + unlock_new_inode(tree->inode);
1289     + goto free_inode;
1290     + }
1291     +
1292     tree->inode->i_mapping->a_ops = &hfs_btree_aops;
1293     break;
1294     case HFS_CAT_CNID:
1295     hfs_inode_read_fork(tree->inode, mdb->drCTExtRec, mdb->drCTFlSize,
1296     mdb->drCTFlSize, be32_to_cpu(mdb->drCTClpSiz));
1297     +
1298     + if (!HFS_I(tree->inode)->first_blocks) {
1299     + printk(KERN_ERR "hfs: invalid btree extent records "
1300     + "(0 size).\n");
1301     + unlock_new_inode(tree->inode);
1302     + goto free_inode;
1303     + }
1304     +
1305     tree->inode->i_mapping->a_ops = &hfs_btree_aops;
1306     break;
1307     default:
1308     @@ -59,11 +74,6 @@ struct hfs_btree *hfs_btree_open(struct super_block *sb, u32 id, btree_keycmp ke
1309     }
1310     unlock_new_inode(tree->inode);
1311    
1312     - if (!HFS_I(tree->inode)->first_blocks) {
1313     - printk(KERN_ERR "hfs: invalid btree extent records (0 size).\n");
1314     - goto free_inode;
1315     - }
1316     -
1317     mapping = tree->inode->i_mapping;
1318     page = read_mapping_page(mapping, 0, NULL);
1319     if (IS_ERR(page))
1320     diff --git a/fs/jbd/journal.c b/fs/jbd/journal.c
1321     index 9fe061f..fea8dd6 100644
1322     --- a/fs/jbd/journal.c
1323     +++ b/fs/jbd/journal.c
1324     @@ -1135,6 +1135,14 @@ static int journal_get_superblock(journal_t *journal)
1325     goto out;
1326     }
1327    
1328     + if (be32_to_cpu(sb->s_first) == 0 ||
1329     + be32_to_cpu(sb->s_first) >= journal->j_maxlen) {
1330     + printk(KERN_WARNING
1331     + "JBD: Invalid start block of journal: %u\n",
1332     + be32_to_cpu(sb->s_first));
1333     + goto out;
1334     + }
1335     +
1336     return 0;
1337    
1338     out:
1339     diff --git a/fs/jbd2/journal.c b/fs/jbd2/journal.c
1340     index f24df13..d6e93d0 100644
1341     --- a/fs/jbd2/journal.c
1342     +++ b/fs/jbd2/journal.c
1343     @@ -1251,6 +1251,14 @@ static int journal_get_superblock(journal_t *journal)
1344     goto out;
1345     }
1346    
1347     + if (be32_to_cpu(sb->s_first) == 0 ||
1348     + be32_to_cpu(sb->s_first) >= journal->j_maxlen) {
1349     + printk(KERN_WARNING
1350     + "JBD2: Invalid start block of journal: %u\n",
1351     + be32_to_cpu(sb->s_first));
1352     + goto out;
1353     + }
1354     +
1355     return 0;
1356    
1357     out:
1358     diff --git a/fs/namespace.c b/fs/namespace.c
1359     index e5e1c7d..5e7f2e9 100644
1360     --- a/fs/namespace.c
1361     +++ b/fs/namespace.c
1362     @@ -1048,15 +1048,12 @@ static int show_mountinfo(struct seq_file *m, void *v)
1363     if (err)
1364     goto out;
1365     seq_putc(m, ' ');
1366     - seq_path_root(m, &mnt_path, &root, " \t\n\\");
1367     - if (root.mnt != p->root.mnt || root.dentry != p->root.dentry) {
1368     - /*
1369     - * Mountpoint is outside root, discard that one. Ugly,
1370     - * but less so than trying to do that in iterator in a
1371     - * race-free way (due to renames).
1372     - */
1373     - return SEQ_SKIP;
1374     - }
1375     +
1376     + /* mountpoints outside of chroot jail will give SEQ_SKIP on this */
1377     + err = seq_path_root(m, &mnt_path, &root, " \t\n\\");
1378     + if (err)
1379     + goto out;
1380     +
1381     seq_puts(m, mnt->mnt_flags & MNT_READONLY ? " ro" : " rw");
1382     show_mnt_opts(m, mnt);
1383    
1384     @@ -2744,3 +2741,8 @@ void kern_unmount(struct vfsmount *mnt)
1385     }
1386     }
1387     EXPORT_SYMBOL(kern_unmount);
1388     +
1389     +bool our_mnt(struct vfsmount *mnt)
1390     +{
1391     + return check_mnt(mnt);
1392     +}
1393     diff --git a/fs/proc/meminfo.c b/fs/proc/meminfo.c
1394     index 5861741..80e4645 100644
1395     --- a/fs/proc/meminfo.c
1396     +++ b/fs/proc/meminfo.c
1397     @@ -131,12 +131,13 @@ static int meminfo_proc_show(struct seq_file *m, void *v)
1398     K(i.freeswap),
1399     K(global_page_state(NR_FILE_DIRTY)),
1400     K(global_page_state(NR_WRITEBACK)),
1401     - K(global_page_state(NR_ANON_PAGES)
1402     #ifdef CONFIG_TRANSPARENT_HUGEPAGE
1403     + K(global_page_state(NR_ANON_PAGES)
1404     + global_page_state(NR_ANON_TRANSPARENT_HUGEPAGES) *
1405     - HPAGE_PMD_NR
1406     + HPAGE_PMD_NR),
1407     +#else
1408     + K(global_page_state(NR_ANON_PAGES)),
1409     #endif
1410     - ),
1411     K(global_page_state(NR_FILE_MAPPED)),
1412     K(global_page_state(NR_SHMEM)),
1413     K(global_page_state(NR_SLAB_RECLAIMABLE) +
1414     diff --git a/fs/seq_file.c b/fs/seq_file.c
1415     index 05d6b0e..dba43c3 100644
1416     --- a/fs/seq_file.c
1417     +++ b/fs/seq_file.c
1418     @@ -449,8 +449,6 @@ EXPORT_SYMBOL(seq_path);
1419    
1420     /*
1421     * Same as seq_path, but relative to supplied root.
1422     - *
1423     - * root may be changed, see __d_path().
1424     */
1425     int seq_path_root(struct seq_file *m, struct path *path, struct path *root,
1426     char *esc)
1427     @@ -463,6 +461,8 @@ int seq_path_root(struct seq_file *m, struct path *path, struct path *root,
1428     char *p;
1429    
1430     p = __d_path(path, root, buf, size);
1431     + if (!p)
1432     + return SEQ_SKIP;
1433     res = PTR_ERR(p);
1434     if (!IS_ERR(p)) {
1435     char *end = mangle_path(buf, p, esc);
1436     @@ -474,7 +474,7 @@ int seq_path_root(struct seq_file *m, struct path *path, struct path *root,
1437     }
1438     seq_commit(m, res);
1439    
1440     - return res < 0 ? res : 0;
1441     + return res < 0 && res != -ENAMETOOLONG ? res : 0;
1442     }
1443    
1444     /*
1445     diff --git a/include/drm/drm_pciids.h b/include/drm/drm_pciids.h
1446     index 4e4fbb8..14b6cd0 100644
1447     --- a/include/drm/drm_pciids.h
1448     +++ b/include/drm/drm_pciids.h
1449     @@ -182,8 +182,11 @@
1450     {0x1002, 0x6748, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_TURKS|RADEON_NEW_MEMMAP}, \
1451     {0x1002, 0x6749, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_TURKS|RADEON_NEW_MEMMAP}, \
1452     {0x1002, 0x6750, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_TURKS|RADEON_NEW_MEMMAP}, \
1453     + {0x1002, 0x6751, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_TURKS|RADEON_NEW_MEMMAP}, \
1454     {0x1002, 0x6758, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_TURKS|RADEON_NEW_MEMMAP}, \
1455     {0x1002, 0x6759, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_TURKS|RADEON_NEW_MEMMAP}, \
1456     + {0x1002, 0x675B, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_TURKS|RADEON_NEW_MEMMAP}, \
1457     + {0x1002, 0x675D, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_TURKS|RADEON_NEW_MEMMAP}, \
1458     {0x1002, 0x675F, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_TURKS|RADEON_NEW_MEMMAP}, \
1459     {0x1002, 0x6760, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_CAICOS|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
1460     {0x1002, 0x6761, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_CAICOS|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
1461     @@ -195,8 +198,10 @@
1462     {0x1002, 0x6767, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_CAICOS|RADEON_NEW_MEMMAP}, \
1463     {0x1002, 0x6768, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_CAICOS|RADEON_NEW_MEMMAP}, \
1464     {0x1002, 0x6770, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_CAICOS|RADEON_NEW_MEMMAP}, \
1465     + {0x1002, 0x6772, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_CAICOS|RADEON_NEW_MEMMAP}, \
1466     {0x1002, 0x6778, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_CAICOS|RADEON_NEW_MEMMAP}, \
1467     {0x1002, 0x6779, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_CAICOS|RADEON_NEW_MEMMAP}, \
1468     + {0x1002, 0x677B, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_CAICOS|RADEON_NEW_MEMMAP}, \
1469     {0x1002, 0x6840, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_TURKS|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
1470     {0x1002, 0x6841, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_TURKS|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
1471     {0x1002, 0x6842, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_TURKS|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
1472     @@ -246,6 +251,7 @@
1473     {0x1002, 0x68f2, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_CEDAR|RADEON_NEW_MEMMAP}, \
1474     {0x1002, 0x68f8, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_CEDAR|RADEON_NEW_MEMMAP}, \
1475     {0x1002, 0x68f9, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_CEDAR|RADEON_NEW_MEMMAP}, \
1476     + {0x1002, 0x68fa, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_CEDAR|RADEON_NEW_MEMMAP}, \
1477     {0x1002, 0x68fe, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_CEDAR|RADEON_NEW_MEMMAP}, \
1478     {0x1002, 0x7100, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R520|RADEON_NEW_MEMMAP}, \
1479     {0x1002, 0x7101, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R520|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
1480     @@ -488,6 +494,8 @@
1481     {0x1002, 0x9647, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_SUMO|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP|RADEON_IS_IGP},\
1482     {0x1002, 0x9648, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_SUMO|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP|RADEON_IS_IGP},\
1483     {0x1002, 0x964a, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_SUMO|RADEON_NEW_MEMMAP|RADEON_IS_IGP}, \
1484     + {0x1002, 0x964b, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_SUMO|RADEON_NEW_MEMMAP|RADEON_IS_IGP}, \
1485     + {0x1002, 0x964c, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_SUMO|RADEON_NEW_MEMMAP|RADEON_IS_IGP}, \
1486     {0x1002, 0x964e, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_SUMO|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP|RADEON_IS_IGP},\
1487     {0x1002, 0x964f, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_SUMO|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP|RADEON_IS_IGP},\
1488     {0x1002, 0x9710, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RS880|RADEON_NEW_MEMMAP|RADEON_IS_IGP}, \
1489     @@ -502,6 +510,8 @@
1490     {0x1002, 0x9805, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_PALM|RADEON_NEW_MEMMAP|RADEON_IS_IGP}, \
1491     {0x1002, 0x9806, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_PALM|RADEON_NEW_MEMMAP|RADEON_IS_IGP}, \
1492     {0x1002, 0x9807, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_PALM|RADEON_NEW_MEMMAP|RADEON_IS_IGP}, \
1493     + {0x1002, 0x9808, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_PALM|RADEON_NEW_MEMMAP|RADEON_IS_IGP}, \
1494     + {0x1002, 0x9809, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_PALM|RADEON_NEW_MEMMAP|RADEON_IS_IGP}, \
1495     {0, 0, 0}
1496    
1497     #define r128_PCI_IDS \
1498     diff --git a/include/linux/dcache.h b/include/linux/dcache.h
1499     index 62157c0..713c7c6 100644
1500     --- a/include/linux/dcache.h
1501     +++ b/include/linux/dcache.h
1502     @@ -337,7 +337,8 @@ extern int d_validate(struct dentry *, struct dentry *);
1503     */
1504     extern char *dynamic_dname(struct dentry *, char *, int, const char *, ...);
1505    
1506     -extern char *__d_path(const struct path *path, struct path *root, char *, int);
1507     +extern char *__d_path(const struct path *, const struct path *, char *, int);
1508     +extern char *d_absolute_path(const struct path *, char *, int);
1509     extern char *d_path(const struct path *, char *, int);
1510     extern char *d_path_with_unreachable(const struct path *, char *, int);
1511     extern char *dentry_path_raw(struct dentry *, char *, int);
1512     diff --git a/include/linux/fs.h b/include/linux/fs.h
1513     index 277f497..cf7bc25 100644
1514     --- a/include/linux/fs.h
1515     +++ b/include/linux/fs.h
1516     @@ -1907,6 +1907,7 @@ extern int fd_statfs(int, struct kstatfs *);
1517     extern int statfs_by_dentry(struct dentry *, struct kstatfs *);
1518     extern int freeze_super(struct super_block *super);
1519     extern int thaw_super(struct super_block *super);
1520     +extern bool our_mnt(struct vfsmount *mnt);
1521    
1522     extern int current_umask(void);
1523    
1524     diff --git a/include/linux/log2.h b/include/linux/log2.h
1525     index 25b8086..fd7ff3d 100644
1526     --- a/include/linux/log2.h
1527     +++ b/include/linux/log2.h
1528     @@ -185,7 +185,6 @@ unsigned long __rounddown_pow_of_two(unsigned long n)
1529     #define rounddown_pow_of_two(n) \
1530     ( \
1531     __builtin_constant_p(n) ? ( \
1532     - (n == 1) ? 0 : \
1533     (1UL << ilog2(n))) : \
1534     __rounddown_pow_of_two(n) \
1535     )
1536     diff --git a/kernel/lockdep.c b/kernel/lockdep.c
1537     index 91d67ce..4479606 100644
1538     --- a/kernel/lockdep.c
1539     +++ b/kernel/lockdep.c
1540     @@ -44,6 +44,7 @@
1541     #include <linux/stringify.h>
1542     #include <linux/bitops.h>
1543     #include <linux/gfp.h>
1544     +#include <linux/kmemcheck.h>
1545    
1546     #include <asm/sections.h>
1547    
1548     @@ -2874,7 +2875,12 @@ static int mark_lock(struct task_struct *curr, struct held_lock *this,
1549     void lockdep_init_map(struct lockdep_map *lock, const char *name,
1550     struct lock_class_key *key, int subclass)
1551     {
1552     - memset(lock, 0, sizeof(*lock));
1553     + int i;
1554     +
1555     + kmemcheck_mark_initialized(lock, sizeof(*lock));
1556     +
1557     + for (i = 0; i < NR_LOCKDEP_CACHING_CLASSES; i++)
1558     + lock->class_cache[i] = NULL;
1559    
1560     #ifdef CONFIG_LOCK_STAT
1561     lock->cpu = raw_smp_processor_id();
1562     diff --git a/kernel/time/alarmtimer.c b/kernel/time/alarmtimer.c
1563     index ea5e1a9..8b70c76 100644
1564     --- a/kernel/time/alarmtimer.c
1565     +++ b/kernel/time/alarmtimer.c
1566     @@ -181,7 +181,7 @@ static enum hrtimer_restart alarmtimer_fired(struct hrtimer *timer)
1567     struct alarm *alarm;
1568     ktime_t expired = next->expires;
1569    
1570     - if (expired.tv64 >= now.tv64)
1571     + if (expired.tv64 > now.tv64)
1572     break;
1573    
1574     alarm = container_of(next, struct alarm, node);
1575     diff --git a/mm/hugetlb.c b/mm/hugetlb.c
1576     index bb28a5f..73f17c0 100644
1577     --- a/mm/hugetlb.c
1578     +++ b/mm/hugetlb.c
1579     @@ -576,6 +576,7 @@ static void prep_compound_gigantic_page(struct page *page, unsigned long order)
1580     __SetPageHead(page);
1581     for (i = 1; i < nr_pages; i++, p = mem_map_next(p, page, i)) {
1582     __SetPageTail(p);
1583     + set_page_count(p, 0);
1584     p->first_page = page;
1585     }
1586     }
1587     diff --git a/mm/page_alloc.c b/mm/page_alloc.c
1588     index 6e8ecb6..e8fae15 100644
1589     --- a/mm/page_alloc.c
1590     +++ b/mm/page_alloc.c
1591     @@ -355,8 +355,8 @@ void prep_compound_page(struct page *page, unsigned long order)
1592     __SetPageHead(page);
1593     for (i = 1; i < nr_pages; i++) {
1594     struct page *p = page + i;
1595     -
1596     __SetPageTail(p);
1597     + set_page_count(p, 0);
1598     p->first_page = page;
1599     }
1600     }
1601     @@ -3370,9 +3370,15 @@ static void setup_zone_migrate_reserve(struct zone *zone)
1602     unsigned long block_migratetype;
1603     int reserve;
1604    
1605     - /* Get the start pfn, end pfn and the number of blocks to reserve */
1606     + /*
1607     + * Get the start pfn, end pfn and the number of blocks to reserve
1608     + * We have to be careful to be aligned to pageblock_nr_pages to
1609     + * make sure that we always check pfn_valid for the first page in
1610     + * the block.
1611     + */
1612     start_pfn = zone->zone_start_pfn;
1613     end_pfn = start_pfn + zone->spanned_pages;
1614     + start_pfn = roundup(start_pfn, pageblock_nr_pages);
1615     reserve = roundup(min_wmark_pages(zone), pageblock_nr_pages) >>
1616     pageblock_order;
1617    
1618     diff --git a/mm/percpu-vm.c b/mm/percpu-vm.c
1619     index ea53496..bfad724 100644
1620     --- a/mm/percpu-vm.c
1621     +++ b/mm/percpu-vm.c
1622     @@ -143,8 +143,8 @@ static void pcpu_pre_unmap_flush(struct pcpu_chunk *chunk,
1623     int page_start, int page_end)
1624     {
1625     flush_cache_vunmap(
1626     - pcpu_chunk_addr(chunk, pcpu_first_unit_cpu, page_start),
1627     - pcpu_chunk_addr(chunk, pcpu_last_unit_cpu, page_end));
1628     + pcpu_chunk_addr(chunk, pcpu_low_unit_cpu, page_start),
1629     + pcpu_chunk_addr(chunk, pcpu_high_unit_cpu, page_end));
1630     }
1631    
1632     static void __pcpu_unmap_pages(unsigned long addr, int nr_pages)
1633     @@ -206,8 +206,8 @@ static void pcpu_post_unmap_tlb_flush(struct pcpu_chunk *chunk,
1634     int page_start, int page_end)
1635     {
1636     flush_tlb_kernel_range(
1637     - pcpu_chunk_addr(chunk, pcpu_first_unit_cpu, page_start),
1638     - pcpu_chunk_addr(chunk, pcpu_last_unit_cpu, page_end));
1639     + pcpu_chunk_addr(chunk, pcpu_low_unit_cpu, page_start),
1640     + pcpu_chunk_addr(chunk, pcpu_high_unit_cpu, page_end));
1641     }
1642    
1643     static int __pcpu_map_pages(unsigned long addr, struct page **pages,
1644     @@ -284,8 +284,8 @@ static void pcpu_post_map_flush(struct pcpu_chunk *chunk,
1645     int page_start, int page_end)
1646     {
1647     flush_cache_vmap(
1648     - pcpu_chunk_addr(chunk, pcpu_first_unit_cpu, page_start),
1649     - pcpu_chunk_addr(chunk, pcpu_last_unit_cpu, page_end));
1650     + pcpu_chunk_addr(chunk, pcpu_low_unit_cpu, page_start),
1651     + pcpu_chunk_addr(chunk, pcpu_high_unit_cpu, page_end));
1652     }
1653    
1654     /**
1655     diff --git a/mm/percpu.c b/mm/percpu.c
1656     index bf80e55..93b5a7c 100644
1657     --- a/mm/percpu.c
1658     +++ b/mm/percpu.c
1659     @@ -116,9 +116,9 @@ static int pcpu_atom_size __read_mostly;
1660     static int pcpu_nr_slots __read_mostly;
1661     static size_t pcpu_chunk_struct_size __read_mostly;
1662    
1663     -/* cpus with the lowest and highest unit numbers */
1664     -static unsigned int pcpu_first_unit_cpu __read_mostly;
1665     -static unsigned int pcpu_last_unit_cpu __read_mostly;
1666     +/* cpus with the lowest and highest unit addresses */
1667     +static unsigned int pcpu_low_unit_cpu __read_mostly;
1668     +static unsigned int pcpu_high_unit_cpu __read_mostly;
1669    
1670     /* the address of the first chunk which starts with the kernel static area */
1671     void *pcpu_base_addr __read_mostly;
1672     @@ -984,19 +984,19 @@ phys_addr_t per_cpu_ptr_to_phys(void *addr)
1673     {
1674     void __percpu *base = __addr_to_pcpu_ptr(pcpu_base_addr);
1675     bool in_first_chunk = false;
1676     - unsigned long first_start, first_end;
1677     + unsigned long first_low, first_high;
1678     unsigned int cpu;
1679    
1680     /*
1681     - * The following test on first_start/end isn't strictly
1682     + * The following test on unit_low/high isn't strictly
1683     * necessary but will speed up lookups of addresses which
1684     * aren't in the first chunk.
1685     */
1686     - first_start = pcpu_chunk_addr(pcpu_first_chunk, pcpu_first_unit_cpu, 0);
1687     - first_end = pcpu_chunk_addr(pcpu_first_chunk, pcpu_last_unit_cpu,
1688     - pcpu_unit_pages);
1689     - if ((unsigned long)addr >= first_start &&
1690     - (unsigned long)addr < first_end) {
1691     + first_low = pcpu_chunk_addr(pcpu_first_chunk, pcpu_low_unit_cpu, 0);
1692     + first_high = pcpu_chunk_addr(pcpu_first_chunk, pcpu_high_unit_cpu,
1693     + pcpu_unit_pages);
1694     + if ((unsigned long)addr >= first_low &&
1695     + (unsigned long)addr < first_high) {
1696     for_each_possible_cpu(cpu) {
1697     void *start = per_cpu_ptr(base, cpu);
1698    
1699     @@ -1233,7 +1233,9 @@ int __init pcpu_setup_first_chunk(const struct pcpu_alloc_info *ai,
1700    
1701     for (cpu = 0; cpu < nr_cpu_ids; cpu++)
1702     unit_map[cpu] = UINT_MAX;
1703     - pcpu_first_unit_cpu = NR_CPUS;
1704     +
1705     + pcpu_low_unit_cpu = NR_CPUS;
1706     + pcpu_high_unit_cpu = NR_CPUS;
1707    
1708     for (group = 0, unit = 0; group < ai->nr_groups; group++, unit += i) {
1709     const struct pcpu_group_info *gi = &ai->groups[group];
1710     @@ -1253,9 +1255,13 @@ int __init pcpu_setup_first_chunk(const struct pcpu_alloc_info *ai,
1711     unit_map[cpu] = unit + i;
1712     unit_off[cpu] = gi->base_offset + i * ai->unit_size;
1713    
1714     - if (pcpu_first_unit_cpu == NR_CPUS)
1715     - pcpu_first_unit_cpu = cpu;
1716     - pcpu_last_unit_cpu = cpu;
1717     + /* determine low/high unit_cpu */
1718     + if (pcpu_low_unit_cpu == NR_CPUS ||
1719     + unit_off[cpu] < unit_off[pcpu_low_unit_cpu])
1720     + pcpu_low_unit_cpu = cpu;
1721     + if (pcpu_high_unit_cpu == NR_CPUS ||
1722     + unit_off[cpu] > unit_off[pcpu_high_unit_cpu])
1723     + pcpu_high_unit_cpu = cpu;
1724     }
1725     }
1726     pcpu_nr_units = unit;
1727     diff --git a/mm/vmalloc.c b/mm/vmalloc.c
1728     index 56faf31..3a65d6f7 100644
1729     --- a/mm/vmalloc.c
1730     +++ b/mm/vmalloc.c
1731     @@ -1634,6 +1634,8 @@ void *__vmalloc_node_range(unsigned long size, unsigned long align,
1732     return NULL;
1733    
1734     addr = __vmalloc_area_node(area, gfp_mask, prot, node, caller);
1735     + if (!addr)
1736     + return NULL;
1737    
1738     /*
1739     * In this function, newly allocated vm_struct is not added
1740     diff --git a/security/apparmor/path.c b/security/apparmor/path.c
1741     index 36cc0cc..b566eba 100644
1742     --- a/security/apparmor/path.c
1743     +++ b/security/apparmor/path.c
1744     @@ -57,23 +57,44 @@ static int prepend(char **buffer, int buflen, const char *str, int namelen)
1745     static int d_namespace_path(struct path *path, char *buf, int buflen,
1746     char **name, int flags)
1747     {
1748     - struct path root, tmp;
1749     char *res;
1750     - int connected, error = 0;
1751     + int error = 0;
1752     + int connected = 1;
1753     +
1754     + if (path->mnt->mnt_flags & MNT_INTERNAL) {
1755     + /* it's not mounted anywhere */
1756     + res = dentry_path(path->dentry, buf, buflen);
1757     + *name = res;
1758     + if (IS_ERR(res)) {
1759     + *name = buf;
1760     + return PTR_ERR(res);
1761     + }
1762     + if (path->dentry->d_sb->s_magic == PROC_SUPER_MAGIC &&
1763     + strncmp(*name, "/sys/", 5) == 0) {
1764     + /* TODO: convert over to using a per namespace
1765     + * control instead of hard coded /proc
1766     + */
1767     + return prepend(name, *name - buf, "/proc", 5);
1768     + }
1769     + return 0;
1770     + }
1771    
1772     - /* Get the root we want to resolve too, released below */
1773     + /* resolve paths relative to chroot?*/
1774     if (flags & PATH_CHROOT_REL) {
1775     - /* resolve paths relative to chroot */
1776     + struct path root;
1777     get_fs_root(current->fs, &root);
1778     - } else {
1779     - /* resolve paths relative to namespace */
1780     - root.mnt = current->nsproxy->mnt_ns->root;
1781     - root.dentry = root.mnt->mnt_root;
1782     - path_get(&root);
1783     + res = __d_path(path, &root, buf, buflen);
1784     + if (res && !IS_ERR(res)) {
1785     + /* everything's fine */
1786     + *name = res;
1787     + path_put(&root);
1788     + goto ok;
1789     + }
1790     + path_put(&root);
1791     + connected = 0;
1792     }
1793    
1794     - tmp = root;
1795     - res = __d_path(path, &tmp, buf, buflen);
1796     + res = d_absolute_path(path, buf, buflen);
1797    
1798     *name = res;
1799     /* handle error conditions - and still allow a partial path to
1800     @@ -84,7 +105,10 @@ static int d_namespace_path(struct path *path, char *buf, int buflen,
1801     *name = buf;
1802     goto out;
1803     }
1804     + if (!our_mnt(path->mnt))
1805     + connected = 0;
1806    
1807     +ok:
1808     /* Handle two cases:
1809     * 1. A deleted dentry && profile is not allowing mediation of deleted
1810     * 2. On some filesystems, newly allocated dentries appear to the
1811     @@ -97,10 +121,7 @@ static int d_namespace_path(struct path *path, char *buf, int buflen,
1812     goto out;
1813     }
1814    
1815     - /* Determine if the path is connected to the expected root */
1816     - connected = tmp.dentry == root.dentry && tmp.mnt == root.mnt;
1817     -
1818     - /* If the path is not connected,
1819     + /* If the path is not connected to the expected root,
1820     * check if it is a sysctl and handle specially else remove any
1821     * leading / that __d_path may have returned.
1822     * Unless
1823     @@ -112,17 +133,9 @@ static int d_namespace_path(struct path *path, char *buf, int buflen,
1824     * namespace root.
1825     */
1826     if (!connected) {
1827     - /* is the disconnect path a sysctl? */
1828     - if (tmp.dentry->d_sb->s_magic == PROC_SUPER_MAGIC &&
1829     - strncmp(*name, "/sys/", 5) == 0) {
1830     - /* TODO: convert over to using a per namespace
1831     - * control instead of hard coded /proc
1832     - */
1833     - error = prepend(name, *name - buf, "/proc", 5);
1834     - } else if (!(flags & PATH_CONNECT_PATH) &&
1835     + if (!(flags & PATH_CONNECT_PATH) &&
1836     !(((flags & CHROOT_NSCONNECT) == CHROOT_NSCONNECT) &&
1837     - (tmp.mnt == current->nsproxy->mnt_ns->root &&
1838     - tmp.dentry == tmp.mnt->mnt_root))) {
1839     + our_mnt(path->mnt))) {
1840     /* disconnected path, don't return pathname starting
1841     * with '/'
1842     */
1843     @@ -133,8 +146,6 @@ static int d_namespace_path(struct path *path, char *buf, int buflen,
1844     }
1845    
1846     out:
1847     - path_put(&root);
1848     -
1849     return error;
1850     }
1851    
1852     diff --git a/security/tomoyo/realpath.c b/security/tomoyo/realpath.c
1853     index 6c601bd..d46922d 100644
1854     --- a/security/tomoyo/realpath.c
1855     +++ b/security/tomoyo/realpath.c
1856     @@ -83,9 +83,8 @@ static char *tomoyo_get_absolute_path(struct path *path, char * const buffer,
1857     {
1858     char *pos = ERR_PTR(-ENOMEM);
1859     if (buflen >= 256) {
1860     - struct path ns_root = { };
1861     /* go to whatever namespace root we are under */
1862     - pos = __d_path(path, &ns_root, buffer, buflen - 1);
1863     + pos = d_absolute_path(path, buffer, buflen - 1);
1864     if (!IS_ERR(pos) && *pos == '/' && pos[1]) {
1865     struct inode *inode = path->dentry->d_inode;
1866     if (inode && S_ISDIR(inode->i_mode)) {
1867     @@ -276,8 +275,16 @@ char *tomoyo_realpath_from_path(struct path *path)
1868     pos = tomoyo_get_local_path(path->dentry, buf,
1869     buf_len - 1);
1870     /* Get absolute name for the rest. */
1871     - else
1872     + else {
1873     pos = tomoyo_get_absolute_path(path, buf, buf_len - 1);
1874     + /*
1875     + * Fall back to local name if absolute name is not
1876     + * available.
1877     + */
1878     + if (pos == ERR_PTR(-EINVAL))
1879     + pos = tomoyo_get_local_path(path->dentry, buf,
1880     + buf_len - 1);
1881     + }
1882     encode:
1883     if (IS_ERR(pos))
1884     continue;
1885     diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
1886     index c687e14..20d92074 100644
1887     --- a/sound/pci/hda/patch_realtek.c
1888     +++ b/sound/pci/hda/patch_realtek.c
1889     @@ -280,6 +280,8 @@ static int alc_mux_select(struct hda_codec *codec, unsigned int adc_idx,
1890     imux = &spec->input_mux[mux_idx];
1891     if (!imux->num_items && mux_idx > 0)
1892     imux = &spec->input_mux[0];
1893     + if (!imux->num_items)
1894     + return 0;
1895    
1896     if (idx >= imux->num_items)
1897     idx = imux->num_items - 1;
1898     diff --git a/sound/pci/hda/patch_sigmatel.c b/sound/pci/hda/patch_sigmatel.c
1899     index 4538caa..5261fd8 100644
1900     --- a/sound/pci/hda/patch_sigmatel.c
1901     +++ b/sound/pci/hda/patch_sigmatel.c
1902     @@ -214,6 +214,7 @@ struct sigmatel_spec {
1903     unsigned int gpio_mute;
1904     unsigned int gpio_led;
1905     unsigned int gpio_led_polarity;
1906     + unsigned int vref_mute_led_nid; /* pin NID for mute-LED vref control */
1907     unsigned int vref_led;
1908    
1909     /* stream */
1910     @@ -4298,12 +4299,10 @@ static void stac_store_hints(struct hda_codec *codec)
1911     spec->eapd_switch = val;
1912     get_int_hint(codec, "gpio_led_polarity", &spec->gpio_led_polarity);
1913     if (get_int_hint(codec, "gpio_led", &spec->gpio_led)) {
1914     - if (spec->gpio_led <= 8) {
1915     - spec->gpio_mask |= spec->gpio_led;
1916     - spec->gpio_dir |= spec->gpio_led;
1917     - if (spec->gpio_led_polarity)
1918     - spec->gpio_data |= spec->gpio_led;
1919     - }
1920     + spec->gpio_mask |= spec->gpio_led;
1921     + spec->gpio_dir |= spec->gpio_led;
1922     + if (spec->gpio_led_polarity)
1923     + spec->gpio_data |= spec->gpio_led;
1924     }
1925     }
1926    
1927     @@ -4893,8 +4892,14 @@ static int find_mute_led_gpio(struct hda_codec *codec, int default_polarity)
1928     if (sscanf(dev->name, "HP_Mute_LED_%d_%x",
1929     &spec->gpio_led_polarity,
1930     &spec->gpio_led) == 2) {
1931     - if (spec->gpio_led < 4)
1932     + unsigned int max_gpio;
1933     + max_gpio = snd_hda_param_read(codec, codec->afg,
1934     + AC_PAR_GPIO_CAP);
1935     + max_gpio &= AC_GPIO_IO_COUNT;
1936     + if (spec->gpio_led < max_gpio)
1937     spec->gpio_led = 1 << spec->gpio_led;
1938     + else
1939     + spec->vref_mute_led_nid = spec->gpio_led;
1940     return 1;
1941     }
1942     if (sscanf(dev->name, "HP_Mute_LED_%d",
1943     @@ -5023,15 +5028,12 @@ static int stac92xx_pre_resume(struct hda_codec *codec)
1944     struct sigmatel_spec *spec = codec->spec;
1945    
1946     /* sync mute LED */
1947     - if (spec->gpio_led) {
1948     - if (spec->gpio_led <= 8) {
1949     - stac_gpio_set(codec, spec->gpio_mask,
1950     - spec->gpio_dir, spec->gpio_data);
1951     - } else {
1952     - stac_vrefout_set(codec,
1953     - spec->gpio_led, spec->vref_led);
1954     - }
1955     - }
1956     + if (spec->vref_mute_led_nid)
1957     + stac_vrefout_set(codec, spec->vref_mute_led_nid,
1958     + spec->vref_led);
1959     + else if (spec->gpio_led)
1960     + stac_gpio_set(codec, spec->gpio_mask,
1961     + spec->gpio_dir, spec->gpio_data);
1962     return 0;
1963     }
1964    
1965     @@ -5042,7 +5044,7 @@ static void stac92xx_set_power_state(struct hda_codec *codec, hda_nid_t fg,
1966     struct sigmatel_spec *spec = codec->spec;
1967    
1968     if (power_state == AC_PWRST_D3) {
1969     - if (spec->gpio_led > 8) {
1970     + if (spec->vref_mute_led_nid) {
1971     /* with vref-out pin used for mute led control
1972     * codec AFG is prevented from D3 state
1973     */
1974     @@ -5095,7 +5097,7 @@ static int stac92xx_update_led_status(struct hda_codec *codec)
1975     }
1976     }
1977     /*polarity defines *not* muted state level*/
1978     - if (spec->gpio_led <= 8) {
1979     + if (!spec->vref_mute_led_nid) {
1980     if (muted)
1981     spec->gpio_data &= ~spec->gpio_led; /* orange */
1982     else
1983     @@ -5113,7 +5115,8 @@ static int stac92xx_update_led_status(struct hda_codec *codec)
1984     muted_lvl = spec->gpio_led_polarity ?
1985     AC_PINCTL_VREF_GRD : AC_PINCTL_VREF_HIZ;
1986     spec->vref_led = muted ? muted_lvl : notmtd_lvl;
1987     - stac_vrefout_set(codec, spec->gpio_led, spec->vref_led);
1988     + stac_vrefout_set(codec, spec->vref_mute_led_nid,
1989     + spec->vref_led);
1990     }
1991     return 0;
1992     }
1993     @@ -5634,7 +5637,7 @@ again:
1994    
1995     #ifdef CONFIG_SND_HDA_POWER_SAVE
1996     if (spec->gpio_led) {
1997     - if (spec->gpio_led <= 8) {
1998     + if (!spec->vref_mute_led_nid) {
1999     spec->gpio_mask |= spec->gpio_led;
2000     spec->gpio_dir |= spec->gpio_led;
2001     spec->gpio_data |= spec->gpio_led;
2002     @@ -5955,7 +5958,7 @@ again:
2003    
2004     #ifdef CONFIG_SND_HDA_POWER_SAVE
2005     if (spec->gpio_led) {
2006     - if (spec->gpio_led <= 8) {
2007     + if (!spec->vref_mute_led_nid) {
2008     spec->gpio_mask |= spec->gpio_led;
2009     spec->gpio_dir |= spec->gpio_led;
2010     spec->gpio_data |= spec->gpio_led;
2011     diff --git a/sound/pci/sis7019.c b/sound/pci/sis7019.c
2012     index bcf6152..fdc78ad 100644
2013     --- a/sound/pci/sis7019.c
2014     +++ b/sound/pci/sis7019.c
2015     @@ -41,6 +41,7 @@ MODULE_SUPPORTED_DEVICE("{{SiS,SiS7019 Audio Accelerator}}");
2016     static int index = SNDRV_DEFAULT_IDX1; /* Index 0-MAX */
2017     static char *id = SNDRV_DEFAULT_STR1; /* ID for this card */
2018     static int enable = 1;
2019     +static int codecs = 1;
2020    
2021     module_param(index, int, 0444);
2022     MODULE_PARM_DESC(index, "Index value for SiS7019 Audio Accelerator.");
2023     @@ -48,6 +49,8 @@ module_param(id, charp, 0444);
2024     MODULE_PARM_DESC(id, "ID string for SiS7019 Audio Accelerator.");
2025     module_param(enable, bool, 0444);
2026     MODULE_PARM_DESC(enable, "Enable SiS7019 Audio Accelerator.");
2027     +module_param(codecs, int, 0444);
2028     +MODULE_PARM_DESC(codecs, "Set bit to indicate that codec number is expected to be present (default 1)");
2029    
2030     static DEFINE_PCI_DEVICE_TABLE(snd_sis7019_ids) = {
2031     { PCI_DEVICE(PCI_VENDOR_ID_SI, 0x7019) },
2032     @@ -140,6 +143,9 @@ struct sis7019 {
2033     dma_addr_t silence_dma_addr;
2034     };
2035    
2036     +/* These values are also used by the module param 'codecs' to indicate
2037     + * which codecs should be present.
2038     + */
2039     #define SIS_PRIMARY_CODEC_PRESENT 0x0001
2040     #define SIS_SECONDARY_CODEC_PRESENT 0x0002
2041     #define SIS_TERTIARY_CODEC_PRESENT 0x0004
2042     @@ -1078,6 +1084,7 @@ static int sis_chip_init(struct sis7019 *sis)
2043     {
2044     unsigned long io = sis->ioport;
2045     void __iomem *ioaddr = sis->ioaddr;
2046     + unsigned long timeout;
2047     u16 status;
2048     int count;
2049     int i;
2050     @@ -1104,21 +1111,45 @@ static int sis_chip_init(struct sis7019 *sis)
2051     while ((inw(io + SIS_AC97_STATUS) & SIS_AC97_STATUS_BUSY) && --count)
2052     udelay(1);
2053    
2054     + /* Command complete, we can let go of the semaphore now.
2055     + */
2056     + outl(SIS_AC97_SEMA_RELEASE, io + SIS_AC97_SEMA);
2057     + if (!count)
2058     + return -EIO;
2059     +
2060     /* Now that we've finished the reset, find out what's attached.
2061     + * There are some codec/board combinations that take an extremely
2062     + * long time to come up. 350+ ms has been observed in the field,
2063     + * so we'll give them up to 500ms.
2064     */
2065     - status = inl(io + SIS_AC97_STATUS);
2066     - if (status & SIS_AC97_STATUS_CODEC_READY)
2067     - sis->codecs_present |= SIS_PRIMARY_CODEC_PRESENT;
2068     - if (status & SIS_AC97_STATUS_CODEC2_READY)
2069     - sis->codecs_present |= SIS_SECONDARY_CODEC_PRESENT;
2070     - if (status & SIS_AC97_STATUS_CODEC3_READY)
2071     - sis->codecs_present |= SIS_TERTIARY_CODEC_PRESENT;
2072     -
2073     - /* All done, let go of the semaphore, and check for errors
2074     + sis->codecs_present = 0;
2075     + timeout = msecs_to_jiffies(500) + jiffies;
2076     + while (time_before_eq(jiffies, timeout)) {
2077     + status = inl(io + SIS_AC97_STATUS);
2078     + if (status & SIS_AC97_STATUS_CODEC_READY)
2079     + sis->codecs_present |= SIS_PRIMARY_CODEC_PRESENT;
2080     + if (status & SIS_AC97_STATUS_CODEC2_READY)
2081     + sis->codecs_present |= SIS_SECONDARY_CODEC_PRESENT;
2082     + if (status & SIS_AC97_STATUS_CODEC3_READY)
2083     + sis->codecs_present |= SIS_TERTIARY_CODEC_PRESENT;
2084     +
2085     + if (sis->codecs_present == codecs)
2086     + break;
2087     +
2088     + msleep(1);
2089     + }
2090     +
2091     + /* All done, check for errors.
2092     */
2093     - outl(SIS_AC97_SEMA_RELEASE, io + SIS_AC97_SEMA);
2094     - if (!sis->codecs_present || !count)
2095     + if (!sis->codecs_present) {
2096     + printk(KERN_ERR "sis7019: could not find any codecs\n");
2097     return -EIO;
2098     + }
2099     +
2100     + if (sis->codecs_present != codecs) {
2101     + printk(KERN_WARNING "sis7019: missing codecs, found %0x, expected %0x\n",
2102     + sis->codecs_present, codecs);
2103     + }
2104    
2105     /* Let the hardware know that the audio driver is alive,
2106     * and enable PCM slots on the AC-link for L/R playback (3 & 4) and
2107     @@ -1390,6 +1421,17 @@ static int __devinit snd_sis7019_probe(struct pci_dev *pci,
2108     if (!enable)
2109     goto error_out;
2110    
2111     + /* The user can specify which codecs should be present so that we
2112     + * can wait for them to show up if they are slow to recover from
2113     + * the AC97 cold reset. We default to a single codec, the primary.
2114     + *
2115     + * We assume that SIS_PRIMARY_*_PRESENT matches bits 0-2.
2116     + */
2117     + codecs &= SIS_PRIMARY_CODEC_PRESENT | SIS_SECONDARY_CODEC_PRESENT |
2118     + SIS_TERTIARY_CODEC_PRESENT;
2119     + if (!codecs)
2120     + codecs = SIS_PRIMARY_CODEC_PRESENT;
2121     +
2122     rc = snd_card_create(index, id, THIS_MODULE, sizeof(*sis), &card);
2123     if (rc < 0)
2124     goto error_out;
2125     diff --git a/sound/soc/soc-utils.c b/sound/soc/soc-utils.c
2126     index ec921ec..cd987de 100644
2127     --- a/sound/soc/soc-utils.c
2128     +++ b/sound/soc/soc-utils.c
2129     @@ -57,7 +57,36 @@ int snd_soc_params_to_bclk(struct snd_pcm_hw_params *params)
2130     }
2131     EXPORT_SYMBOL_GPL(snd_soc_params_to_bclk);
2132    
2133     -static struct snd_soc_platform_driver dummy_platform;
2134     +static const struct snd_pcm_hardware dummy_dma_hardware = {
2135     + .formats = 0xffffffff,
2136     + .channels_min = 1,
2137     + .channels_max = UINT_MAX,
2138     +
2139     + /* Random values to keep userspace happy when checking constraints */
2140     + .info = SNDRV_PCM_INFO_INTERLEAVED |
2141     + SNDRV_PCM_INFO_BLOCK_TRANSFER,
2142     + .buffer_bytes_max = 128*1024,
2143     + .period_bytes_min = PAGE_SIZE,
2144     + .period_bytes_max = PAGE_SIZE*2,
2145     + .periods_min = 2,
2146     + .periods_max = 128,
2147     +};
2148     +
2149     +static int dummy_dma_open(struct snd_pcm_substream *substream)
2150     +{
2151     + snd_soc_set_runtime_hwparams(substream, &dummy_dma_hardware);
2152     +
2153     + return 0;
2154     +}
2155     +
2156     +static struct snd_pcm_ops dummy_dma_ops = {
2157     + .open = dummy_dma_open,
2158     + .ioctl = snd_pcm_lib_ioctl,
2159     +};
2160     +
2161     +static struct snd_soc_platform_driver dummy_platform = {
2162     + .ops = &dummy_dma_ops,
2163     +};
2164    
2165     static __devinit int snd_soc_dummy_probe(struct platform_device *pdev)
2166     {