Magellan Linux

Annotation of /trunk/kernel-alx/patches-3.10/0153-3.10.54-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2641 - (hide annotations) (download)
Tue Jul 21 16:20:20 2015 UTC (8 years, 10 months ago) by niro
File size: 68687 byte(s)
-linux-3.10.54
1 niro 2641 diff --git a/Documentation/sound/alsa/ALSA-Configuration.txt b/Documentation/sound/alsa/ALSA-Configuration.txt
2     index 95731a08f257..8f08b2a71791 100644
3     --- a/Documentation/sound/alsa/ALSA-Configuration.txt
4     +++ b/Documentation/sound/alsa/ALSA-Configuration.txt
5     @@ -2026,8 +2026,8 @@ Prior to version 0.9.0rc4 options had a 'snd_' prefix. This was removed.
6     -------------------
7    
8     Module for sound cards based on the Asus AV66/AV100/AV200 chips,
9     - i.e., Xonar D1, DX, D2, D2X, DS, Essence ST (Deluxe), Essence STX,
10     - HDAV1.3 (Deluxe), and HDAV1.3 Slim.
11     + i.e., Xonar D1, DX, D2, D2X, DS, DSX, Essence ST (Deluxe),
12     + Essence STX (II), HDAV1.3 (Deluxe), and HDAV1.3 Slim.
13    
14     This module supports autoprobe and multiple cards.
15    
16     diff --git a/Documentation/stable_kernel_rules.txt b/Documentation/stable_kernel_rules.txt
17     index b0714d8f678a..8dfb6a5f427d 100644
18     --- a/Documentation/stable_kernel_rules.txt
19     +++ b/Documentation/stable_kernel_rules.txt
20     @@ -29,6 +29,9 @@ Rules on what kind of patches are accepted, and which ones are not, into the
21    
22     Procedure for submitting patches to the -stable tree:
23    
24     + - If the patch covers files in net/ or drivers/net please follow netdev stable
25     + submission guidelines as described in
26     + Documentation/networking/netdev-FAQ.txt
27     - Send the patch, after verifying that it follows the above rules, to
28     stable@vger.kernel.org. You must note the upstream commit ID in the
29     changelog of your submission, as well as the kernel version you wish
30     diff --git a/Makefile b/Makefile
31     index 2ac415a7e937..9429aa5e89de 100644
32     --- a/Makefile
33     +++ b/Makefile
34     @@ -1,6 +1,6 @@
35     VERSION = 3
36     PATCHLEVEL = 10
37     -SUBLEVEL = 53
38     +SUBLEVEL = 54
39     EXTRAVERSION =
40     NAME = TOSSUG Baby Fish
41    
42     diff --git a/arch/arm/mach-omap2/control.c b/arch/arm/mach-omap2/control.c
43     index 2adb2683f074..6124da1a07d4 100644
44     --- a/arch/arm/mach-omap2/control.c
45     +++ b/arch/arm/mach-omap2/control.c
46     @@ -323,7 +323,8 @@ void omap3_save_scratchpad_contents(void)
47     scratchpad_contents.public_restore_ptr =
48     virt_to_phys(omap3_restore_3630);
49     else if (omap_rev() != OMAP3430_REV_ES3_0 &&
50     - omap_rev() != OMAP3430_REV_ES3_1)
51     + omap_rev() != OMAP3430_REV_ES3_1 &&
52     + omap_rev() != OMAP3430_REV_ES3_1_2)
53     scratchpad_contents.public_restore_ptr =
54     virt_to_phys(omap3_restore);
55     else
56     diff --git a/arch/arm/mach-omap2/omap_hwmod.c b/arch/arm/mach-omap2/omap_hwmod.c
57     index 44c609a1ec5d..62e40a9fffa9 100644
58     --- a/arch/arm/mach-omap2/omap_hwmod.c
59     +++ b/arch/arm/mach-omap2/omap_hwmod.c
60     @@ -2177,6 +2177,8 @@ static int _enable(struct omap_hwmod *oh)
61     oh->mux->pads_dynamic))) {
62     omap_hwmod_mux(oh->mux, _HWMOD_STATE_ENABLED);
63     _reconfigure_io_chain();
64     + } else if (oh->flags & HWMOD_FORCE_MSTANDBY) {
65     + _reconfigure_io_chain();
66     }
67    
68     _add_initiator_dep(oh, mpu_oh);
69     @@ -2283,6 +2285,8 @@ static int _idle(struct omap_hwmod *oh)
70     if (oh->mux && oh->mux->pads_dynamic) {
71     omap_hwmod_mux(oh->mux, _HWMOD_STATE_IDLE);
72     _reconfigure_io_chain();
73     + } else if (oh->flags & HWMOD_FORCE_MSTANDBY) {
74     + _reconfigure_io_chain();
75     }
76    
77     oh->_state = _HWMOD_STATE_IDLE;
78     diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig
79     index a649cb686692..4e5b80d883c8 100644
80     --- a/arch/x86/Kconfig
81     +++ b/arch/x86/Kconfig
82     @@ -1578,6 +1578,7 @@ config EFI
83     config EFI_STUB
84     bool "EFI stub support"
85     depends on EFI
86     + select RELOCATABLE
87     ---help---
88     This kernel feature allows a bzImage to be loaded directly
89     by EFI firmware without the use of a bootloader.
90     diff --git a/arch/x86/include/asm/kvm_host.h b/arch/x86/include/asm/kvm_host.h
91     index 8b320722de7a..f7f20f7fac3c 100644
92     --- a/arch/x86/include/asm/kvm_host.h
93     +++ b/arch/x86/include/asm/kvm_host.h
94     @@ -92,7 +92,7 @@
95     #define KVM_REFILL_PAGES 25
96     #define KVM_MAX_CPUID_ENTRIES 80
97     #define KVM_NR_FIXED_MTRR_REGION 88
98     -#define KVM_NR_VAR_MTRR 10
99     +#define KVM_NR_VAR_MTRR 8
100    
101     #define ASYNC_PF_PER_VCPU 64
102    
103     diff --git a/arch/x86/kernel/resource.c b/arch/x86/kernel/resource.c
104     index 2a26819bb6a8..80eab01c1a68 100644
105     --- a/arch/x86/kernel/resource.c
106     +++ b/arch/x86/kernel/resource.c
107     @@ -37,10 +37,12 @@ static void remove_e820_regions(struct resource *avail)
108    
109     void arch_remove_reservations(struct resource *avail)
110     {
111     - /* Trim out BIOS areas (low 1MB and high 2MB) and E820 regions */
112     + /*
113     + * Trim out BIOS area (high 2MB) and E820 regions. We do not remove
114     + * the low 1MB unconditionally, as this area is needed for some ISA
115     + * cards requiring a memory range, e.g. the i82365 PCMCIA controller.
116     + */
117     if (avail->flags & IORESOURCE_MEM) {
118     - if (avail->start < BIOS_END)
119     - avail->start = BIOS_END;
120     resource_clip(avail, BIOS_ROM_BASE, BIOS_ROM_END);
121    
122     remove_e820_regions(avail);
123     diff --git a/arch/x86/kernel/vsyscall_64.c b/arch/x86/kernel/vsyscall_64.c
124     index 9a907a67be8f..c52c07efe970 100644
125     --- a/arch/x86/kernel/vsyscall_64.c
126     +++ b/arch/x86/kernel/vsyscall_64.c
127     @@ -125,10 +125,10 @@ static void warn_bad_vsyscall(const char *level, struct pt_regs *regs,
128     if (!show_unhandled_signals)
129     return;
130    
131     - pr_notice_ratelimited("%s%s[%d] %s ip:%lx cs:%lx sp:%lx ax:%lx si:%lx di:%lx\n",
132     - level, current->comm, task_pid_nr(current),
133     - message, regs->ip, regs->cs,
134     - regs->sp, regs->ax, regs->si, regs->di);
135     + printk_ratelimited("%s%s[%d] %s ip:%lx cs:%lx sp:%lx ax:%lx si:%lx di:%lx\n",
136     + level, current->comm, task_pid_nr(current),
137     + message, regs->ip, regs->cs,
138     + regs->sp, regs->ax, regs->si, regs->di);
139     }
140    
141     static int addr_to_vsyscall_nr(unsigned long addr)
142     diff --git a/arch/x86/kvm/emulate.c b/arch/x86/kvm/emulate.c
143     index 5484d54582ca..fb3fddc322f8 100644
144     --- a/arch/x86/kvm/emulate.c
145     +++ b/arch/x86/kvm/emulate.c
146     @@ -2209,6 +2209,7 @@ static int em_ret_far(struct x86_emulate_ctxt *ctxt)
147     {
148     int rc;
149     unsigned long cs;
150     + int cpl = ctxt->ops->cpl(ctxt);
151    
152     rc = emulate_pop(ctxt, &ctxt->_eip, ctxt->op_bytes);
153     if (rc != X86EMUL_CONTINUE)
154     @@ -2218,6 +2219,9 @@ static int em_ret_far(struct x86_emulate_ctxt *ctxt)
155     rc = emulate_pop(ctxt, &cs, ctxt->op_bytes);
156     if (rc != X86EMUL_CONTINUE)
157     return rc;
158     + /* Outer-privilege level return is not implemented */
159     + if (ctxt->mode >= X86EMUL_MODE_PROT16 && (cs & 3) > cpl)
160     + return X86EMUL_UNHANDLEABLE;
161     rc = load_segment_descriptor(ctxt, (u16)cs, VCPU_SREG_CS);
162     return rc;
163     }
164     diff --git a/arch/x86/kvm/irq.c b/arch/x86/kvm/irq.c
165     index 484bc874688b..3ec38cb56bd5 100644
166     --- a/arch/x86/kvm/irq.c
167     +++ b/arch/x86/kvm/irq.c
168     @@ -108,7 +108,7 @@ int kvm_cpu_get_interrupt(struct kvm_vcpu *v)
169    
170     vector = kvm_cpu_get_extint(v);
171    
172     - if (kvm_apic_vid_enabled(v->kvm) || vector != -1)
173     + if (vector != -1)
174     return vector; /* PIC */
175    
176     return kvm_get_apic_interrupt(v); /* APIC */
177     diff --git a/arch/x86/kvm/lapic.c b/arch/x86/kvm/lapic.c
178     index 279d093524b4..681e4e251f00 100644
179     --- a/arch/x86/kvm/lapic.c
180     +++ b/arch/x86/kvm/lapic.c
181     @@ -362,25 +362,46 @@ static inline int apic_find_highest_irr(struct kvm_lapic *apic)
182    
183     static inline void apic_clear_irr(int vec, struct kvm_lapic *apic)
184     {
185     - apic->irr_pending = false;
186     + struct kvm_vcpu *vcpu;
187     +
188     + vcpu = apic->vcpu;
189     +
190     apic_clear_vector(vec, apic->regs + APIC_IRR);
191     - if (apic_search_irr(apic) != -1)
192     - apic->irr_pending = true;
193     + if (unlikely(kvm_apic_vid_enabled(vcpu->kvm)))
194     + /* try to update RVI */
195     + kvm_make_request(KVM_REQ_EVENT, vcpu);
196     + else {
197     + vec = apic_search_irr(apic);
198     + apic->irr_pending = (vec != -1);
199     + }
200     }
201    
202     static inline void apic_set_isr(int vec, struct kvm_lapic *apic)
203     {
204     - /* Note that we never get here with APIC virtualization enabled. */
205     + struct kvm_vcpu *vcpu;
206     +
207     + if (__apic_test_and_set_vector(vec, apic->regs + APIC_ISR))
208     + return;
209     +
210     + vcpu = apic->vcpu;
211    
212     - if (!__apic_test_and_set_vector(vec, apic->regs + APIC_ISR))
213     - ++apic->isr_count;
214     - BUG_ON(apic->isr_count > MAX_APIC_VECTOR);
215     /*
216     - * ISR (in service register) bit is set when injecting an interrupt.
217     - * The highest vector is injected. Thus the latest bit set matches
218     - * the highest bit in ISR.
219     + * With APIC virtualization enabled, all caching is disabled
220     + * because the processor can modify ISR under the hood. Instead
221     + * just set SVI.
222     */
223     - apic->highest_isr_cache = vec;
224     + if (unlikely(kvm_apic_vid_enabled(vcpu->kvm)))
225     + kvm_x86_ops->hwapic_isr_update(vcpu->kvm, vec);
226     + else {
227     + ++apic->isr_count;
228     + BUG_ON(apic->isr_count > MAX_APIC_VECTOR);
229     + /*
230     + * ISR (in service register) bit is set when injecting an interrupt.
231     + * The highest vector is injected. Thus the latest bit set matches
232     + * the highest bit in ISR.
233     + */
234     + apic->highest_isr_cache = vec;
235     + }
236     }
237    
238     static inline int apic_find_highest_isr(struct kvm_lapic *apic)
239     @@ -1641,11 +1662,16 @@ int kvm_get_apic_interrupt(struct kvm_vcpu *vcpu)
240     int vector = kvm_apic_has_interrupt(vcpu);
241     struct kvm_lapic *apic = vcpu->arch.apic;
242    
243     - /* Note that we never get here with APIC virtualization enabled. */
244     -
245     if (vector == -1)
246     return -1;
247    
248     + /*
249     + * We get here even with APIC virtualization enabled, if doing
250     + * nested virtualization and L1 runs with the "acknowledge interrupt
251     + * on exit" mode. Then we cannot inject the interrupt via RVI,
252     + * because the process would deliver it through the IDT.
253     + */
254     +
255     apic_set_isr(vector, apic);
256     apic_update_ppr(apic);
257     apic_clear_irr(vector, apic);
258     diff --git a/arch/x86/pci/i386.c b/arch/x86/pci/i386.c
259     index 94919e307f8e..2883f0840201 100644
260     --- a/arch/x86/pci/i386.c
261     +++ b/arch/x86/pci/i386.c
262     @@ -162,6 +162,10 @@ pcibios_align_resource(void *data, const struct resource *res,
263     return start;
264     if (start & 0x300)
265     start = (start + 0x3ff) & ~0x3ff;
266     + } else if (res->flags & IORESOURCE_MEM) {
267     + /* The low 1MB range is reserved for ISA cards */
268     + if (start < BIOS_END)
269     + start = BIOS_END;
270     }
271     return start;
272     }
273     diff --git a/drivers/crypto/ux500/cryp/cryp_core.c b/drivers/crypto/ux500/cryp/cryp_core.c
274     index 32f480622b97..3833bd71cc5d 100644
275     --- a/drivers/crypto/ux500/cryp/cryp_core.c
276     +++ b/drivers/crypto/ux500/cryp/cryp_core.c
277     @@ -190,7 +190,7 @@ static void add_session_id(struct cryp_ctx *ctx)
278     static irqreturn_t cryp_interrupt_handler(int irq, void *param)
279     {
280     struct cryp_ctx *ctx;
281     - int i;
282     + int count;
283     struct cryp_device_data *device_data;
284    
285     if (param == NULL) {
286     @@ -215,12 +215,11 @@ static irqreturn_t cryp_interrupt_handler(int irq, void *param)
287     if (cryp_pending_irq_src(device_data,
288     CRYP_IRQ_SRC_OUTPUT_FIFO)) {
289     if (ctx->outlen / ctx->blocksize > 0) {
290     - for (i = 0; i < ctx->blocksize / 4; i++) {
291     - *(ctx->outdata) = readl_relaxed(
292     - &device_data->base->dout);
293     - ctx->outdata += 4;
294     - ctx->outlen -= 4;
295     - }
296     + count = ctx->blocksize / 4;
297     +
298     + readsl(&device_data->base->dout, ctx->outdata, count);
299     + ctx->outdata += count;
300     + ctx->outlen -= count;
301    
302     if (ctx->outlen == 0) {
303     cryp_disable_irq_src(device_data,
304     @@ -230,12 +229,12 @@ static irqreturn_t cryp_interrupt_handler(int irq, void *param)
305     } else if (cryp_pending_irq_src(device_data,
306     CRYP_IRQ_SRC_INPUT_FIFO)) {
307     if (ctx->datalen / ctx->blocksize > 0) {
308     - for (i = 0 ; i < ctx->blocksize / 4; i++) {
309     - writel_relaxed(ctx->indata,
310     - &device_data->base->din);
311     - ctx->indata += 4;
312     - ctx->datalen -= 4;
313     - }
314     + count = ctx->blocksize / 4;
315     +
316     + writesl(&device_data->base->din, ctx->indata, count);
317     +
318     + ctx->indata += count;
319     + ctx->datalen -= count;
320    
321     if (ctx->datalen == 0)
322     cryp_disable_irq_src(device_data,
323     diff --git a/drivers/gpu/drm/omapdrm/omap_dmm_tiler.c b/drivers/gpu/drm/omapdrm/omap_dmm_tiler.c
324     index 9b794c933c81..b5df614660a8 100644
325     --- a/drivers/gpu/drm/omapdrm/omap_dmm_tiler.c
326     +++ b/drivers/gpu/drm/omapdrm/omap_dmm_tiler.c
327     @@ -199,7 +199,7 @@ static struct dmm_txn *dmm_txn_init(struct dmm *dmm, struct tcm *tcm)
328     static void dmm_txn_append(struct dmm_txn *txn, struct pat_area *area,
329     struct page **pages, uint32_t npages, uint32_t roll)
330     {
331     - dma_addr_t pat_pa = 0;
332     + dma_addr_t pat_pa = 0, data_pa = 0;
333     uint32_t *data;
334     struct pat *pat;
335     struct refill_engine *engine = txn->engine_handle;
336     @@ -223,7 +223,9 @@ static void dmm_txn_append(struct dmm_txn *txn, struct pat_area *area,
337     .lut_id = engine->tcm->lut_id,
338     };
339    
340     - data = alloc_dma(txn, 4*i, &pat->data_pa);
341     + data = alloc_dma(txn, 4*i, &data_pa);
342     + /* FIXME: what if data_pa is more than 32-bit ? */
343     + pat->data_pa = data_pa;
344    
345     while (i--) {
346     int n = i + roll;
347     diff --git a/drivers/gpu/drm/omapdrm/omap_gem.c b/drivers/gpu/drm/omapdrm/omap_gem.c
348     index ebbdf4132e9c..2272c66f1842 100644
349     --- a/drivers/gpu/drm/omapdrm/omap_gem.c
350     +++ b/drivers/gpu/drm/omapdrm/omap_gem.c
351     @@ -806,7 +806,7 @@ int omap_gem_get_paddr(struct drm_gem_object *obj,
352     omap_obj->paddr = tiler_ssptr(block);
353     omap_obj->block = block;
354    
355     - DBG("got paddr: %08x", omap_obj->paddr);
356     + DBG("got paddr: %pad", &omap_obj->paddr);
357     }
358    
359     omap_obj->paddr_cnt++;
360     @@ -1004,9 +1004,9 @@ void omap_gem_describe(struct drm_gem_object *obj, struct seq_file *m)
361     if (obj->map_list.map)
362     off = (uint64_t)obj->map_list.hash.key;
363    
364     - seq_printf(m, "%08x: %2d (%2d) %08llx %08Zx (%2d) %p %4d",
365     + seq_printf(m, "%08x: %2d (%2d) %08llx %pad (%2d) %p %4d",
366     omap_obj->flags, obj->name, obj->refcount.refcount.counter,
367     - off, omap_obj->paddr, omap_obj->paddr_cnt,
368     + off, &omap_obj->paddr, omap_obj->paddr_cnt,
369     omap_obj->vaddr, omap_obj->roll);
370    
371     if (omap_obj->flags & OMAP_BO_TILED) {
372     @@ -1489,8 +1489,8 @@ void omap_gem_init(struct drm_device *dev)
373     entry->paddr = tiler_ssptr(block);
374     entry->block = block;
375    
376     - DBG("%d:%d: %dx%d: paddr=%08x stride=%d", i, j, w, h,
377     - entry->paddr,
378     + DBG("%d:%d: %dx%d: paddr=%pad stride=%d", i, j, w, h,
379     + &entry->paddr,
380     usergart[i].stride_pfn << PAGE_SHIFT);
381     }
382     }
383     diff --git a/drivers/gpu/drm/omapdrm/omap_plane.c b/drivers/gpu/drm/omapdrm/omap_plane.c
384     index 8d225d7ff4e3..6d01c2ad8428 100644
385     --- a/drivers/gpu/drm/omapdrm/omap_plane.c
386     +++ b/drivers/gpu/drm/omapdrm/omap_plane.c
387     @@ -146,8 +146,8 @@ static void omap_plane_pre_apply(struct omap_drm_apply *apply)
388     DBG("%dx%d -> %dx%d (%d)", info->width, info->height,
389     info->out_width, info->out_height,
390     info->screen_width);
391     - DBG("%d,%d %08x %08x", info->pos_x, info->pos_y,
392     - info->paddr, info->p_uv_addr);
393     + DBG("%d,%d %pad %pad", info->pos_x, info->pos_y,
394     + &info->paddr, &info->p_uv_addr);
395    
396     /* TODO: */
397     ilace = false;
398     diff --git a/drivers/hid/hid-cherry.c b/drivers/hid/hid-cherry.c
399     index 1bdcccc54a1d..f745d2c1325e 100644
400     --- a/drivers/hid/hid-cherry.c
401     +++ b/drivers/hid/hid-cherry.c
402     @@ -28,7 +28,7 @@
403     static __u8 *ch_report_fixup(struct hid_device *hdev, __u8 *rdesc,
404     unsigned int *rsize)
405     {
406     - if (*rsize >= 17 && rdesc[11] == 0x3c && rdesc[12] == 0x02) {
407     + if (*rsize >= 18 && rdesc[11] == 0x3c && rdesc[12] == 0x02) {
408     hid_info(hdev, "fixing up Cherry Cymotion report descriptor\n");
409     rdesc[11] = rdesc[16] = 0xff;
410     rdesc[12] = rdesc[17] = 0x03;
411     diff --git a/drivers/hid/hid-kye.c b/drivers/hid/hid-kye.c
412     index 6af90dbdc3d4..843f2dd55200 100644
413     --- a/drivers/hid/hid-kye.c
414     +++ b/drivers/hid/hid-kye.c
415     @@ -280,7 +280,7 @@ static __u8 *kye_report_fixup(struct hid_device *hdev, __u8 *rdesc,
416     * - change the button usage range to 4-7 for the extra
417     * buttons
418     */
419     - if (*rsize >= 74 &&
420     + if (*rsize >= 75 &&
421     rdesc[61] == 0x05 && rdesc[62] == 0x08 &&
422     rdesc[63] == 0x19 && rdesc[64] == 0x08 &&
423     rdesc[65] == 0x29 && rdesc[66] == 0x0f &&
424     diff --git a/drivers/hid/hid-lg.c b/drivers/hid/hid-lg.c
425     index 06eb45fa6331..12fc48c968e6 100644
426     --- a/drivers/hid/hid-lg.c
427     +++ b/drivers/hid/hid-lg.c
428     @@ -345,14 +345,14 @@ static __u8 *lg_report_fixup(struct hid_device *hdev, __u8 *rdesc,
429     struct usb_device_descriptor *udesc;
430     __u16 bcdDevice, rev_maj, rev_min;
431    
432     - if ((drv_data->quirks & LG_RDESC) && *rsize >= 90 && rdesc[83] == 0x26 &&
433     + if ((drv_data->quirks & LG_RDESC) && *rsize >= 91 && rdesc[83] == 0x26 &&
434     rdesc[84] == 0x8c && rdesc[85] == 0x02) {
435     hid_info(hdev,
436     "fixing up Logitech keyboard report descriptor\n");
437     rdesc[84] = rdesc[89] = 0x4d;
438     rdesc[85] = rdesc[90] = 0x10;
439     }
440     - if ((drv_data->quirks & LG_RDESC_REL_ABS) && *rsize >= 50 &&
441     + if ((drv_data->quirks & LG_RDESC_REL_ABS) && *rsize >= 51 &&
442     rdesc[32] == 0x81 && rdesc[33] == 0x06 &&
443     rdesc[49] == 0x81 && rdesc[50] == 0x06) {
444     hid_info(hdev,
445     diff --git a/drivers/hid/hid-logitech-dj.c b/drivers/hid/hid-logitech-dj.c
446     index 1be9156a3950..51b1a5088c0d 100644
447     --- a/drivers/hid/hid-logitech-dj.c
448     +++ b/drivers/hid/hid-logitech-dj.c
449     @@ -237,13 +237,6 @@ static void logi_dj_recv_add_djhid_device(struct dj_receiver_dev *djrcv_dev,
450     return;
451     }
452    
453     - if ((dj_report->device_index < DJ_DEVICE_INDEX_MIN) ||
454     - (dj_report->device_index > DJ_DEVICE_INDEX_MAX)) {
455     - dev_err(&djrcv_hdev->dev, "%s: invalid device index:%d\n",
456     - __func__, dj_report->device_index);
457     - return;
458     - }
459     -
460     if (djrcv_dev->paired_dj_devices[dj_report->device_index]) {
461     /* The device is already known. No need to reallocate it. */
462     dbg_hid("%s: device is already known\n", __func__);
463     @@ -713,6 +706,12 @@ static int logi_dj_raw_event(struct hid_device *hdev,
464     * device (via hid_input_report() ) and return 1 so hid-core does not do
465     * anything else with it.
466     */
467     + if ((dj_report->device_index < DJ_DEVICE_INDEX_MIN) ||
468     + (dj_report->device_index > DJ_DEVICE_INDEX_MAX)) {
469     + dev_err(&hdev->dev, "%s: invalid device index:%d\n",
470     + __func__, dj_report->device_index);
471     + return false;
472     + }
473    
474     spin_lock_irqsave(&djrcv_dev->lock, flags);
475     if (dj_report->report_id == REPORT_ID_DJ_SHORT) {
476     diff --git a/drivers/hid/hid-monterey.c b/drivers/hid/hid-monterey.c
477     index 9e14c00eb1b6..25daf28b26bd 100644
478     --- a/drivers/hid/hid-monterey.c
479     +++ b/drivers/hid/hid-monterey.c
480     @@ -24,7 +24,7 @@
481     static __u8 *mr_report_fixup(struct hid_device *hdev, __u8 *rdesc,
482     unsigned int *rsize)
483     {
484     - if (*rsize >= 30 && rdesc[29] == 0x05 && rdesc[30] == 0x09) {
485     + if (*rsize >= 31 && rdesc[29] == 0x05 && rdesc[30] == 0x09) {
486     hid_info(hdev, "fixing up button/consumer in HID report descriptor\n");
487     rdesc[30] = 0x0c;
488     }
489     diff --git a/drivers/hid/hid-petalynx.c b/drivers/hid/hid-petalynx.c
490     index 736b2502df4f..6aca4f2554bf 100644
491     --- a/drivers/hid/hid-petalynx.c
492     +++ b/drivers/hid/hid-petalynx.c
493     @@ -25,7 +25,7 @@
494     static __u8 *pl_report_fixup(struct hid_device *hdev, __u8 *rdesc,
495     unsigned int *rsize)
496     {
497     - if (*rsize >= 60 && rdesc[39] == 0x2a && rdesc[40] == 0xf5 &&
498     + if (*rsize >= 62 && rdesc[39] == 0x2a && rdesc[40] == 0xf5 &&
499     rdesc[41] == 0x00 && rdesc[59] == 0x26 &&
500     rdesc[60] == 0xf9 && rdesc[61] == 0x00) {
501     hid_info(hdev, "fixing up Petalynx Maxter Remote report descriptor\n");
502     diff --git a/drivers/hid/hid-sunplus.c b/drivers/hid/hid-sunplus.c
503     index 87fc91e1c8de..91072fa54663 100644
504     --- a/drivers/hid/hid-sunplus.c
505     +++ b/drivers/hid/hid-sunplus.c
506     @@ -24,7 +24,7 @@
507     static __u8 *sp_report_fixup(struct hid_device *hdev, __u8 *rdesc,
508     unsigned int *rsize)
509     {
510     - if (*rsize >= 107 && rdesc[104] == 0x26 && rdesc[105] == 0x80 &&
511     + if (*rsize >= 112 && rdesc[104] == 0x26 && rdesc[105] == 0x80 &&
512     rdesc[106] == 0x03) {
513     hid_info(hdev, "fixing up Sunplus Wireless Desktop report descriptor\n");
514     rdesc[105] = rdesc[110] = 0x03;
515     diff --git a/drivers/hwmon/ads1015.c b/drivers/hwmon/ads1015.c
516     index 2798246ad814..3930a7e7a56d 100644
517     --- a/drivers/hwmon/ads1015.c
518     +++ b/drivers/hwmon/ads1015.c
519     @@ -184,7 +184,7 @@ static int ads1015_get_channels_config_of(struct i2c_client *client)
520     }
521    
522     channel = be32_to_cpup(property);
523     - if (channel > ADS1015_CHANNELS) {
524     + if (channel >= ADS1015_CHANNELS) {
525     dev_err(&client->dev,
526     "invalid channel index %d on %s\n",
527     channel, node->full_name);
528     @@ -198,6 +198,7 @@ static int ads1015_get_channels_config_of(struct i2c_client *client)
529     dev_err(&client->dev,
530     "invalid gain on %s\n",
531     node->full_name);
532     + return -EINVAL;
533     }
534     }
535    
536     @@ -208,6 +209,7 @@ static int ads1015_get_channels_config_of(struct i2c_client *client)
537     dev_err(&client->dev,
538     "invalid data_rate on %s\n",
539     node->full_name);
540     + return -EINVAL;
541     }
542     }
543    
544     diff --git a/drivers/hwmon/dme1737.c b/drivers/hwmon/dme1737.c
545     index 4ae3fff13f44..bea0a344fab5 100644
546     --- a/drivers/hwmon/dme1737.c
547     +++ b/drivers/hwmon/dme1737.c
548     @@ -247,8 +247,8 @@ struct dme1737_data {
549     u8 pwm_acz[3];
550     u8 pwm_freq[6];
551     u8 pwm_rr[2];
552     - u8 zone_low[3];
553     - u8 zone_abs[3];
554     + s8 zone_low[3];
555     + s8 zone_abs[3];
556     u8 zone_hyst[2];
557     u32 alarms;
558     };
559     @@ -277,7 +277,7 @@ static inline int IN_FROM_REG(int reg, int nominal, int res)
560     return (reg * nominal + (3 << (res - 3))) / (3 << (res - 2));
561     }
562    
563     -static inline int IN_TO_REG(int val, int nominal)
564     +static inline int IN_TO_REG(long val, int nominal)
565     {
566     return clamp_val((val * 192 + nominal / 2) / nominal, 0, 255);
567     }
568     @@ -293,7 +293,7 @@ static inline int TEMP_FROM_REG(int reg, int res)
569     return (reg * 1000) >> (res - 8);
570     }
571    
572     -static inline int TEMP_TO_REG(int val)
573     +static inline int TEMP_TO_REG(long val)
574     {
575     return clamp_val((val < 0 ? val - 500 : val + 500) / 1000, -128, 127);
576     }
577     @@ -308,7 +308,7 @@ static inline int TEMP_RANGE_FROM_REG(int reg)
578     return TEMP_RANGE[(reg >> 4) & 0x0f];
579     }
580    
581     -static int TEMP_RANGE_TO_REG(int val, int reg)
582     +static int TEMP_RANGE_TO_REG(long val, int reg)
583     {
584     int i;
585    
586     @@ -331,7 +331,7 @@ static inline int TEMP_HYST_FROM_REG(int reg, int ix)
587     return (((ix == 1) ? reg : reg >> 4) & 0x0f) * 1000;
588     }
589    
590     -static inline int TEMP_HYST_TO_REG(int val, int ix, int reg)
591     +static inline int TEMP_HYST_TO_REG(long val, int ix, int reg)
592     {
593     int hyst = clamp_val((val + 500) / 1000, 0, 15);
594    
595     @@ -347,7 +347,7 @@ static inline int FAN_FROM_REG(int reg, int tpc)
596     return (reg == 0 || reg == 0xffff) ? 0 : 90000 * 60 / reg;
597     }
598    
599     -static inline int FAN_TO_REG(int val, int tpc)
600     +static inline int FAN_TO_REG(long val, int tpc)
601     {
602     if (tpc) {
603     return clamp_val(val / tpc, 0, 0xffff);
604     @@ -379,7 +379,7 @@ static inline int FAN_TYPE_FROM_REG(int reg)
605     return (edge > 0) ? 1 << (edge - 1) : 0;
606     }
607    
608     -static inline int FAN_TYPE_TO_REG(int val, int reg)
609     +static inline int FAN_TYPE_TO_REG(long val, int reg)
610     {
611     int edge = (val == 4) ? 3 : val;
612    
613     @@ -402,7 +402,7 @@ static int FAN_MAX_FROM_REG(int reg)
614     return 1000 + i * 500;
615     }
616    
617     -static int FAN_MAX_TO_REG(int val)
618     +static int FAN_MAX_TO_REG(long val)
619     {
620     int i;
621    
622     @@ -460,7 +460,7 @@ static inline int PWM_ACZ_FROM_REG(int reg)
623     return acz[(reg >> 5) & 0x07];
624     }
625    
626     -static inline int PWM_ACZ_TO_REG(int val, int reg)
627     +static inline int PWM_ACZ_TO_REG(long val, int reg)
628     {
629     int acz = (val == 4) ? 2 : val - 1;
630    
631     @@ -476,7 +476,7 @@ static inline int PWM_FREQ_FROM_REG(int reg)
632     return PWM_FREQ[reg & 0x0f];
633     }
634    
635     -static int PWM_FREQ_TO_REG(int val, int reg)
636     +static int PWM_FREQ_TO_REG(long val, int reg)
637     {
638     int i;
639    
640     @@ -510,7 +510,7 @@ static inline int PWM_RR_FROM_REG(int reg, int ix)
641     return (rr & 0x08) ? PWM_RR[rr & 0x07] : 0;
642     }
643    
644     -static int PWM_RR_TO_REG(int val, int ix, int reg)
645     +static int PWM_RR_TO_REG(long val, int ix, int reg)
646     {
647     int i;
648    
649     @@ -528,7 +528,7 @@ static inline int PWM_RR_EN_FROM_REG(int reg, int ix)
650     return PWM_RR_FROM_REG(reg, ix) ? 1 : 0;
651     }
652    
653     -static inline int PWM_RR_EN_TO_REG(int val, int ix, int reg)
654     +static inline int PWM_RR_EN_TO_REG(long val, int ix, int reg)
655     {
656     int en = (ix == 1) ? 0x80 : 0x08;
657    
658     @@ -1481,13 +1481,16 @@ static ssize_t set_vrm(struct device *dev, struct device_attribute *attr,
659     const char *buf, size_t count)
660     {
661     struct dme1737_data *data = dev_get_drvdata(dev);
662     - long val;
663     + unsigned long val;
664     int err;
665    
666     - err = kstrtol(buf, 10, &val);
667     + err = kstrtoul(buf, 10, &val);
668     if (err)
669     return err;
670    
671     + if (val > 255)
672     + return -EINVAL;
673     +
674     data->vrm = val;
675     return count;
676     }
677     diff --git a/drivers/hwmon/gpio-fan.c b/drivers/hwmon/gpio-fan.c
678     index 3104149795c5..ce1d82762ba6 100644
679     --- a/drivers/hwmon/gpio-fan.c
680     +++ b/drivers/hwmon/gpio-fan.c
681     @@ -172,7 +172,7 @@ static int get_fan_speed_index(struct gpio_fan_data *fan_data)
682     return -EINVAL;
683     }
684    
685     -static int rpm_to_speed_index(struct gpio_fan_data *fan_data, int rpm)
686     +static int rpm_to_speed_index(struct gpio_fan_data *fan_data, unsigned long rpm)
687     {
688     struct gpio_fan_speed *speed = fan_data->speed;
689     int i;
690     diff --git a/drivers/hwmon/lm78.c b/drivers/hwmon/lm78.c
691     index a2f3b4a365e4..b879427e9a46 100644
692     --- a/drivers/hwmon/lm78.c
693     +++ b/drivers/hwmon/lm78.c
694     @@ -108,7 +108,7 @@ static inline int FAN_FROM_REG(u8 val, int div)
695     * TEMP: mC (-128C to +127C)
696     * REG: 1C/bit, two's complement
697     */
698     -static inline s8 TEMP_TO_REG(int val)
699     +static inline s8 TEMP_TO_REG(long val)
700     {
701     int nval = clamp_val(val, -128000, 127000) ;
702     return nval < 0 ? (nval - 500) / 1000 : (nval + 500) / 1000;
703     diff --git a/drivers/hwmon/lm85.c b/drivers/hwmon/lm85.c
704     index 3894c408fda3..b9d6e7d0ba37 100644
705     --- a/drivers/hwmon/lm85.c
706     +++ b/drivers/hwmon/lm85.c
707     @@ -158,7 +158,7 @@ static inline u16 FAN_TO_REG(unsigned long val)
708    
709     /* Temperature is reported in .001 degC increments */
710     #define TEMP_TO_REG(val) \
711     - clamp_val(SCALE(val, 1000, 1), -127, 127)
712     + DIV_ROUND_CLOSEST(clamp_val((val), -127000, 127000), 1000)
713     #define TEMPEXT_FROM_REG(val, ext) \
714     SCALE(((val) << 4) + (ext), 16, 1000)
715     #define TEMP_FROM_REG(val) ((val) * 1000)
716     @@ -192,7 +192,7 @@ static const int lm85_range_map[] = {
717     13300, 16000, 20000, 26600, 32000, 40000, 53300, 80000
718     };
719    
720     -static int RANGE_TO_REG(int range)
721     +static int RANGE_TO_REG(long range)
722     {
723     int i;
724    
725     @@ -214,7 +214,7 @@ static const int adm1027_freq_map[8] = { /* 1 Hz */
726     11, 15, 22, 29, 35, 44, 59, 88
727     };
728    
729     -static int FREQ_TO_REG(const int *map, int freq)
730     +static int FREQ_TO_REG(const int *map, unsigned long freq)
731     {
732     int i;
733    
734     @@ -463,6 +463,9 @@ static ssize_t store_vrm_reg(struct device *dev, struct device_attribute *attr,
735     if (err)
736     return err;
737    
738     + if (val > 255)
739     + return -EINVAL;
740     +
741     data->vrm = val;
742     return count;
743     }
744     diff --git a/drivers/hwmon/sis5595.c b/drivers/hwmon/sis5595.c
745     index 72a889702f0d..9ec7d2e2542c 100644
746     --- a/drivers/hwmon/sis5595.c
747     +++ b/drivers/hwmon/sis5595.c
748     @@ -159,7 +159,7 @@ static inline int TEMP_FROM_REG(s8 val)
749     {
750     return val * 830 + 52120;
751     }
752     -static inline s8 TEMP_TO_REG(int val)
753     +static inline s8 TEMP_TO_REG(long val)
754     {
755     int nval = clamp_val(val, -54120, 157530) ;
756     return nval < 0 ? (nval - 5212 - 415) / 830 : (nval - 5212 + 415) / 830;
757     diff --git a/drivers/i2c/busses/i2c-at91.c b/drivers/i2c/busses/i2c-at91.c
758     index 6bb839b688be..f35ea236497b 100644
759     --- a/drivers/i2c/busses/i2c-at91.c
760     +++ b/drivers/i2c/busses/i2c-at91.c
761     @@ -211,7 +211,7 @@ static void at91_twi_write_data_dma_callback(void *data)
762     struct at91_twi_dev *dev = (struct at91_twi_dev *)data;
763    
764     dma_unmap_single(dev->dev, sg_dma_address(&dev->dma.sg),
765     - dev->buf_len, DMA_MEM_TO_DEV);
766     + dev->buf_len, DMA_TO_DEVICE);
767    
768     at91_twi_write(dev, AT91_TWI_CR, AT91_TWI_STOP);
769     }
770     @@ -290,7 +290,7 @@ static void at91_twi_read_data_dma_callback(void *data)
771     struct at91_twi_dev *dev = (struct at91_twi_dev *)data;
772    
773     dma_unmap_single(dev->dev, sg_dma_address(&dev->dma.sg),
774     - dev->buf_len, DMA_DEV_TO_MEM);
775     + dev->buf_len, DMA_FROM_DEVICE);
776    
777     /* The last two bytes have to be read without using dma */
778     dev->buf += dev->buf_len - 2;
779     diff --git a/drivers/misc/mei/client.c b/drivers/misc/mei/client.c
780     index 0bb2aa2c6fb0..07ed4b5b1659 100644
781     --- a/drivers/misc/mei/client.c
782     +++ b/drivers/misc/mei/client.c
783     @@ -405,6 +405,7 @@ int mei_cl_disconnect(struct mei_cl *cl)
784     dev_err(&dev->pdev->dev, "failed to disconnect.\n");
785     goto free;
786     }
787     + cl->timer_count = MEI_CONNECT_TIMEOUT;
788     mdelay(10); /* Wait for hardware disconnection ready */
789     list_add_tail(&cb->list, &dev->ctrl_rd_list.list);
790     } else {
791     @@ -511,6 +512,7 @@ int mei_cl_connect(struct mei_cl *cl, struct file *file)
792     cl->timer_count = MEI_CONNECT_TIMEOUT;
793     list_add_tail(&cb->list, &dev->ctrl_rd_list.list);
794     } else {
795     + cl->state = MEI_FILE_INITIALIZING;
796     list_add_tail(&cb->list, &dev->ctrl_wr_list.list);
797     }
798    
799     diff --git a/drivers/misc/mei/nfc.c b/drivers/misc/mei/nfc.c
800     index 994ca4aff1a3..4b7ea3fb143c 100644
801     --- a/drivers/misc/mei/nfc.c
802     +++ b/drivers/misc/mei/nfc.c
803     @@ -342,9 +342,10 @@ static int mei_nfc_send(struct mei_cl_device *cldev, u8 *buf, size_t length)
804     ndev = (struct mei_nfc_dev *) cldev->priv_data;
805     dev = ndev->cl->dev;
806    
807     + err = -ENOMEM;
808     mei_buf = kzalloc(length + MEI_NFC_HEADER_SIZE, GFP_KERNEL);
809     if (!mei_buf)
810     - return -ENOMEM;
811     + goto out;
812    
813     hdr = (struct mei_nfc_hci_hdr *) mei_buf;
814     hdr->cmd = MEI_NFC_CMD_HCI_SEND;
815     @@ -354,12 +355,9 @@ static int mei_nfc_send(struct mei_cl_device *cldev, u8 *buf, size_t length)
816     hdr->data_size = length;
817    
818     memcpy(mei_buf + MEI_NFC_HEADER_SIZE, buf, length);
819     -
820     err = __mei_cl_send(ndev->cl, mei_buf, length + MEI_NFC_HEADER_SIZE);
821     if (err < 0)
822     - return err;
823     -
824     - kfree(mei_buf);
825     + goto out;
826    
827     if (!wait_event_interruptible_timeout(ndev->send_wq,
828     ndev->recv_req_id == ndev->req_id, HZ)) {
829     @@ -368,7 +366,8 @@ static int mei_nfc_send(struct mei_cl_device *cldev, u8 *buf, size_t length)
830     } else {
831     ndev->req_id++;
832     }
833     -
834     +out:
835     + kfree(mei_buf);
836     return err;
837     }
838    
839     diff --git a/drivers/scsi/hpsa.c b/drivers/scsi/hpsa.c
840     index 0353d7f2172b..287667c20c6a 100644
841     --- a/drivers/scsi/hpsa.c
842     +++ b/drivers/scsi/hpsa.c
843     @@ -3118,7 +3118,7 @@ static int hpsa_big_passthru_ioctl(struct ctlr_info *h, void __user *argp)
844     }
845     if (ioc->Request.Type.Direction == XFER_WRITE) {
846     if (copy_from_user(buff[sg_used], data_ptr, sz)) {
847     - status = -ENOMEM;
848     + status = -EFAULT;
849     goto cleanup1;
850     }
851     } else
852     diff --git a/drivers/staging/speakup/selection.c b/drivers/staging/speakup/selection.c
853     index f67941e78e4a..b9359753784e 100644
854     --- a/drivers/staging/speakup/selection.c
855     +++ b/drivers/staging/speakup/selection.c
856     @@ -5,6 +5,7 @@
857     #include <linux/device.h> /* for dev_warn */
858     #include <linux/selection.h>
859     #include <linux/workqueue.h>
860     +#include <linux/tty.h>
861     #include <asm/cmpxchg.h>
862    
863     #include "speakup.h"
864     @@ -135,8 +136,12 @@ static void __speakup_paste_selection(struct work_struct *work)
865     struct tty_struct *tty = xchg(&spw->tty, NULL);
866     struct vc_data *vc = (struct vc_data *) tty->driver_data;
867     int pasted = 0, count;
868     + struct tty_ldisc *ld;
869     DECLARE_WAITQUEUE(wait, current);
870    
871     + ld = tty_ldisc_ref_wait(tty);
872     +
873     + /* FIXME: this is completely unsafe */
874     add_wait_queue(&vc->paste_wait, &wait);
875     while (sel_buffer && sel_buffer_lth > pasted) {
876     set_current_state(TASK_INTERRUPTIBLE);
877     @@ -146,12 +151,13 @@ static void __speakup_paste_selection(struct work_struct *work)
878     }
879     count = sel_buffer_lth - pasted;
880     count = min_t(int, count, tty->receive_room);
881     - tty->ldisc->ops->receive_buf(tty, sel_buffer + pasted,
882     - NULL, count);
883     + ld->ops->receive_buf(tty, sel_buffer + pasted, NULL, count);
884     pasted += count;
885     }
886     remove_wait_queue(&vc->paste_wait, &wait);
887     current->state = TASK_RUNNING;
888     +
889     + tty_ldisc_deref(ld);
890     tty_kref_put(tty);
891     }
892    
893     diff --git a/drivers/tty/serial/serial_core.c b/drivers/tty/serial/serial_core.c
894     index f87dbfd32770..0f1cc2c8c22a 100644
895     --- a/drivers/tty/serial/serial_core.c
896     +++ b/drivers/tty/serial/serial_core.c
897     @@ -241,6 +241,9 @@ static void uart_shutdown(struct tty_struct *tty, struct uart_state *state)
898     /*
899     * Turn off DTR and RTS early.
900     */
901     + if (uart_console(uport) && tty)
902     + uport->cons->cflag = tty->termios.c_cflag;
903     +
904     if (!tty || (tty->termios.c_cflag & HUPCL))
905     uart_clear_mctrl(uport, TIOCM_DTR | TIOCM_RTS);
906    
907     diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c
908     index 63c217053668..a5631849017f 100644
909     --- a/drivers/usb/core/hub.c
910     +++ b/drivers/usb/core/hub.c
911     @@ -1699,8 +1699,14 @@ static int hub_probe(struct usb_interface *intf, const struct usb_device_id *id)
912     * - Change autosuspend delay of hub can avoid unnecessary auto
913     * suspend timer for hub, also may decrease power consumption
914     * of USB bus.
915     + *
916     + * - If user has indicated to prevent autosuspend by passing
917     + * usbcore.autosuspend = -1 then keep autosuspend disabled.
918     */
919     - pm_runtime_set_autosuspend_delay(&hdev->dev, 0);
920     +#ifdef CONFIG_PM_RUNTIME
921     + if (hdev->dev.power.autosuspend_delay >= 0)
922     + pm_runtime_set_autosuspend_delay(&hdev->dev, 0);
923     +#endif
924    
925     /*
926     * Hubs have proper suspend/resume support, except for root hubs
927     @@ -3166,6 +3172,43 @@ static int finish_port_resume(struct usb_device *udev)
928     }
929    
930     /*
931     + * There are some SS USB devices which take longer time for link training.
932     + * XHCI specs 4.19.4 says that when Link training is successful, port
933     + * sets CSC bit to 1. So if SW reads port status before successful link
934     + * training, then it will not find device to be present.
935     + * USB Analyzer log with such buggy devices show that in some cases
936     + * device switch on the RX termination after long delay of host enabling
937     + * the VBUS. In few other cases it has been seen that device fails to
938     + * negotiate link training in first attempt. It has been
939     + * reported till now that few devices take as long as 2000 ms to train
940     + * the link after host enabling its VBUS and termination. Following
941     + * routine implements a 2000 ms timeout for link training. If in a case
942     + * link trains before timeout, loop will exit earlier.
943     + *
944     + * FIXME: If a device was connected before suspend, but was removed
945     + * while system was asleep, then the loop in the following routine will
946     + * only exit at timeout.
947     + *
948     + * This routine should only be called when persist is enabled for a SS
949     + * device.
950     + */
951     +static int wait_for_ss_port_enable(struct usb_device *udev,
952     + struct usb_hub *hub, int *port1,
953     + u16 *portchange, u16 *portstatus)
954     +{
955     + int status = 0, delay_ms = 0;
956     +
957     + while (delay_ms < 2000) {
958     + if (status || *portstatus & USB_PORT_STAT_CONNECTION)
959     + break;
960     + msleep(20);
961     + delay_ms += 20;
962     + status = hub_port_status(hub, *port1, portstatus, portchange);
963     + }
964     + return status;
965     +}
966     +
967     +/*
968     * usb_port_resume - re-activate a suspended usb device's upstream port
969     * @udev: device to re-activate, not a root hub
970     * Context: must be able to sleep; device not locked; pm locks held
971     @@ -3267,6 +3310,10 @@ int usb_port_resume(struct usb_device *udev, pm_message_t msg)
972    
973     clear_bit(port1, hub->busy_bits);
974    
975     + if (udev->persist_enabled && hub_is_superspeed(hub->hdev))
976     + status = wait_for_ss_port_enable(udev, hub, &port1, &portchange,
977     + &portstatus);
978     +
979     status = check_port_resume_type(udev,
980     hub, port1, status, portchange, portstatus);
981     if (status == 0)
982     diff --git a/drivers/usb/host/ehci-pci.c b/drivers/usb/host/ehci-pci.c
983     index 8fe401c7d152..fe131565d090 100644
984     --- a/drivers/usb/host/ehci-pci.c
985     +++ b/drivers/usb/host/ehci-pci.c
986     @@ -35,6 +35,21 @@ static const char hcd_name[] = "ehci-pci";
987     #define PCI_DEVICE_ID_INTEL_CE4100_USB 0x2e70
988    
989     /*-------------------------------------------------------------------------*/
990     +#define PCI_DEVICE_ID_INTEL_QUARK_X1000_SOC 0x0939
991     +static inline bool is_intel_quark_x1000(struct pci_dev *pdev)
992     +{
993     + return pdev->vendor == PCI_VENDOR_ID_INTEL &&
994     + pdev->device == PCI_DEVICE_ID_INTEL_QUARK_X1000_SOC;
995     +}
996     +
997     +/*
998     + * 0x84 is the offset of in/out threshold register,
999     + * and it is the same offset as the register of 'hostpc'.
1000     + */
1001     +#define intel_quark_x1000_insnreg01 hostpc
1002     +
1003     +/* Maximum usable threshold value is 0x7f dwords for both IN and OUT */
1004     +#define INTEL_QUARK_X1000_EHCI_MAX_THRESHOLD 0x007f007f
1005    
1006     /* called after powerup, by probe or system-pm "wakeup" */
1007     static int ehci_pci_reinit(struct ehci_hcd *ehci, struct pci_dev *pdev)
1008     @@ -50,6 +65,16 @@ static int ehci_pci_reinit(struct ehci_hcd *ehci, struct pci_dev *pdev)
1009     if (!retval)
1010     ehci_dbg(ehci, "MWI active\n");
1011    
1012     + /* Reset the threshold limit */
1013     + if (is_intel_quark_x1000(pdev)) {
1014     + /*
1015     + * For the Intel QUARK X1000, raise the I/O threshold to the
1016     + * maximum usable value in order to improve performance.
1017     + */
1018     + ehci_writel(ehci, INTEL_QUARK_X1000_EHCI_MAX_THRESHOLD,
1019     + ehci->regs->intel_quark_x1000_insnreg01);
1020     + }
1021     +
1022     return 0;
1023     }
1024    
1025     diff --git a/drivers/usb/host/ohci-q.c b/drivers/usb/host/ohci-q.c
1026     index 37dc8373200a..1e1563da1812 100644
1027     --- a/drivers/usb/host/ohci-q.c
1028     +++ b/drivers/usb/host/ohci-q.c
1029     @@ -314,8 +314,7 @@ static void periodic_unlink (struct ohci_hcd *ohci, struct ed *ed)
1030     * - ED_OPER: when there's any request queued, the ED gets rescheduled
1031     * immediately. HC should be working on them.
1032     *
1033     - * - ED_IDLE: when there's no TD queue. there's no reason for the HC
1034     - * to care about this ED; safe to disable the endpoint.
1035     + * - ED_IDLE: when there's no TD queue or the HC isn't running.
1036     *
1037     * When finish_unlinks() runs later, after SOF interrupt, it will often
1038     * complete one or more URB unlinks before making that state change.
1039     @@ -928,6 +927,10 @@ rescan_all:
1040     int completed, modified;
1041     __hc32 *prev;
1042    
1043     + /* Is this ED already invisible to the hardware? */
1044     + if (ed->state == ED_IDLE)
1045     + goto ed_idle;
1046     +
1047     /* only take off EDs that the HC isn't using, accounting for
1048     * frame counter wraps and EDs with partially retired TDs
1049     */
1050     @@ -957,12 +960,20 @@ skip_ed:
1051     }
1052     }
1053    
1054     + /* ED's now officially unlinked, hc doesn't see */
1055     + ed->state = ED_IDLE;
1056     + if (quirk_zfmicro(ohci) && ed->type == PIPE_INTERRUPT)
1057     + ohci->eds_scheduled--;
1058     + ed->hwHeadP &= ~cpu_to_hc32(ohci, ED_H);
1059     + ed->hwNextED = 0;
1060     + wmb();
1061     + ed->hwINFO &= ~cpu_to_hc32(ohci, ED_SKIP | ED_DEQUEUE);
1062     +ed_idle:
1063     +
1064     /* reentrancy: if we drop the schedule lock, someone might
1065     * have modified this list. normally it's just prepending
1066     * entries (which we'd ignore), but paranoia won't hurt.
1067     */
1068     - *last = ed->ed_next;
1069     - ed->ed_next = NULL;
1070     modified = 0;
1071    
1072     /* unlink urbs as requested, but rescan the list after
1073     @@ -1020,19 +1031,20 @@ rescan_this:
1074     if (completed && !list_empty (&ed->td_list))
1075     goto rescan_this;
1076    
1077     - /* ED's now officially unlinked, hc doesn't see */
1078     - ed->state = ED_IDLE;
1079     - if (quirk_zfmicro(ohci) && ed->type == PIPE_INTERRUPT)
1080     - ohci->eds_scheduled--;
1081     - ed->hwHeadP &= ~cpu_to_hc32(ohci, ED_H);
1082     - ed->hwNextED = 0;
1083     - wmb ();
1084     - ed->hwINFO &= ~cpu_to_hc32 (ohci, ED_SKIP | ED_DEQUEUE);
1085     -
1086     - /* but if there's work queued, reschedule */
1087     - if (!list_empty (&ed->td_list)) {
1088     - if (ohci->rh_state == OHCI_RH_RUNNING)
1089     - ed_schedule (ohci, ed);
1090     + /*
1091     + * If no TDs are queued, take ED off the ed_rm_list.
1092     + * Otherwise, if the HC is running, reschedule.
1093     + * If not, leave it on the list for further dequeues.
1094     + */
1095     + if (list_empty(&ed->td_list)) {
1096     + *last = ed->ed_next;
1097     + ed->ed_next = NULL;
1098     + } else if (ohci->rh_state == OHCI_RH_RUNNING) {
1099     + *last = ed->ed_next;
1100     + ed->ed_next = NULL;
1101     + ed_schedule(ohci, ed);
1102     + } else {
1103     + last = &ed->ed_next;
1104     }
1105    
1106     if (modified)
1107     diff --git a/drivers/usb/host/xhci-pci.c b/drivers/usb/host/xhci-pci.c
1108     index a736d82695cb..0e57bcb8e3f7 100644
1109     --- a/drivers/usb/host/xhci-pci.c
1110     +++ b/drivers/usb/host/xhci-pci.c
1111     @@ -87,6 +87,10 @@ static void xhci_pci_quirks(struct device *dev, struct xhci_hcd *xhci)
1112     /* AMD PLL quirk */
1113     if (pdev->vendor == PCI_VENDOR_ID_AMD && usb_amd_find_chipset_info())
1114     xhci->quirks |= XHCI_AMD_PLL_FIX;
1115     +
1116     + if (pdev->vendor == PCI_VENDOR_ID_AMD)
1117     + xhci->quirks |= XHCI_TRUST_TX_LENGTH;
1118     +
1119     if (pdev->vendor == PCI_VENDOR_ID_INTEL) {
1120     xhci->quirks |= XHCI_LPM_SUPPORT;
1121     xhci->quirks |= XHCI_INTEL_HOST;
1122     diff --git a/drivers/usb/host/xhci-ring.c b/drivers/usb/host/xhci-ring.c
1123     index fe42cae6d1ef..df5834bd71f3 100644
1124     --- a/drivers/usb/host/xhci-ring.c
1125     +++ b/drivers/usb/host/xhci-ring.c
1126     @@ -2532,7 +2532,8 @@ static int handle_tx_event(struct xhci_hcd *xhci,
1127     * last TRB of the previous TD. The command completion handle
1128     * will take care the rest.
1129     */
1130     - if (!event_seg && trb_comp_code == COMP_STOP_INVAL) {
1131     + if (!event_seg && (trb_comp_code == COMP_STOP ||
1132     + trb_comp_code == COMP_STOP_INVAL)) {
1133     ret = 0;
1134     goto cleanup;
1135     }
1136     diff --git a/drivers/usb/serial/ftdi_sio.c b/drivers/usb/serial/ftdi_sio.c
1137     index 9e75e3eaea4f..120fff399c10 100644
1138     --- a/drivers/usb/serial/ftdi_sio.c
1139     +++ b/drivers/usb/serial/ftdi_sio.c
1140     @@ -154,6 +154,7 @@ static struct usb_device_id id_table_combined [] = {
1141     { USB_DEVICE(FTDI_VID, FTDI_AMC232_PID) },
1142     { USB_DEVICE(FTDI_VID, FTDI_CANUSB_PID) },
1143     { USB_DEVICE(FTDI_VID, FTDI_CANDAPTER_PID) },
1144     + { USB_DEVICE(FTDI_VID, FTDI_BM_ATOM_NANO_PID) },
1145     { USB_DEVICE(FTDI_VID, FTDI_NXTCAM_PID) },
1146     { USB_DEVICE(FTDI_VID, FTDI_EV3CON_PID) },
1147     { USB_DEVICE(FTDI_VID, FTDI_SCS_DEVICE_0_PID) },
1148     @@ -676,6 +677,8 @@ static struct usb_device_id id_table_combined [] = {
1149     { USB_DEVICE(FTDI_VID, XSENS_CONVERTER_5_PID) },
1150     { USB_DEVICE(FTDI_VID, XSENS_CONVERTER_6_PID) },
1151     { USB_DEVICE(FTDI_VID, XSENS_CONVERTER_7_PID) },
1152     + { USB_DEVICE(XSENS_VID, XSENS_CONVERTER_PID) },
1153     + { USB_DEVICE(XSENS_VID, XSENS_MTW_PID) },
1154     { USB_DEVICE(FTDI_VID, FTDI_OMNI1509) },
1155     { USB_DEVICE(MOBILITY_VID, MOBILITY_USB_SERIAL_PID) },
1156     { USB_DEVICE(FTDI_VID, FTDI_ACTIVE_ROBOTS_PID) },
1157     @@ -948,6 +951,8 @@ static struct usb_device_id id_table_combined [] = {
1158     { USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_842_2_PID) },
1159     { USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_842_3_PID) },
1160     { USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_842_4_PID) },
1161     + /* ekey Devices */
1162     + { USB_DEVICE(FTDI_VID, FTDI_EKEY_CONV_USB_PID) },
1163     /* Infineon Devices */
1164     { USB_DEVICE_INTERFACE_NUMBER(INFINEON_VID, INFINEON_TRIBOARD_PID, 1) },
1165     { }, /* Optional parameter entry */
1166     diff --git a/drivers/usb/serial/ftdi_sio_ids.h b/drivers/usb/serial/ftdi_sio_ids.h
1167     index c4777bc6aee0..70b0b1d88ae9 100644
1168     --- a/drivers/usb/serial/ftdi_sio_ids.h
1169     +++ b/drivers/usb/serial/ftdi_sio_ids.h
1170     @@ -42,6 +42,8 @@
1171     /* www.candapter.com Ewert Energy Systems CANdapter device */
1172     #define FTDI_CANDAPTER_PID 0x9F80 /* Product Id */
1173    
1174     +#define FTDI_BM_ATOM_NANO_PID 0xa559 /* Basic Micro ATOM Nano USB2Serial */
1175     +
1176     /*
1177     * Texas Instruments XDS100v2 JTAG / BeagleBone A3
1178     * http://processors.wiki.ti.com/index.php/XDS100
1179     @@ -140,12 +142,15 @@
1180     /*
1181     * Xsens Technologies BV products (http://www.xsens.com).
1182     */
1183     -#define XSENS_CONVERTER_0_PID 0xD388
1184     -#define XSENS_CONVERTER_1_PID 0xD389
1185     +#define XSENS_VID 0x2639
1186     +#define XSENS_CONVERTER_PID 0xD00D /* Xsens USB-serial converter */
1187     +#define XSENS_MTW_PID 0x0200 /* Xsens MTw */
1188     +#define XSENS_CONVERTER_0_PID 0xD388 /* Xsens USB converter */
1189     +#define XSENS_CONVERTER_1_PID 0xD389 /* Xsens Wireless Receiver */
1190     #define XSENS_CONVERTER_2_PID 0xD38A
1191     -#define XSENS_CONVERTER_3_PID 0xD38B
1192     -#define XSENS_CONVERTER_4_PID 0xD38C
1193     -#define XSENS_CONVERTER_5_PID 0xD38D
1194     +#define XSENS_CONVERTER_3_PID 0xD38B /* Xsens USB-serial converter */
1195     +#define XSENS_CONVERTER_4_PID 0xD38C /* Xsens Wireless Receiver */
1196     +#define XSENS_CONVERTER_5_PID 0xD38D /* Xsens Awinda Station */
1197     #define XSENS_CONVERTER_6_PID 0xD38E
1198     #define XSENS_CONVERTER_7_PID 0xD38F
1199    
1200     @@ -1375,3 +1380,8 @@
1201     #define BRAINBOXES_US_160_6_PID 0x9006 /* US-160 16xRS232 1Mbaud Port 11 and 12 */
1202     #define BRAINBOXES_US_160_7_PID 0x9007 /* US-160 16xRS232 1Mbaud Port 13 and 14 */
1203     #define BRAINBOXES_US_160_8_PID 0x9008 /* US-160 16xRS232 1Mbaud Port 15 and 16 */
1204     +
1205     +/*
1206     + * ekey biometric systems GmbH (http://ekey.net/)
1207     + */
1208     +#define FTDI_EKEY_CONV_USB_PID 0xCB08 /* Converter USB */
1209     diff --git a/drivers/usb/serial/whiteheat.c b/drivers/usb/serial/whiteheat.c
1210     index 347caad47a12..5e3dd9f87ff5 100644
1211     --- a/drivers/usb/serial/whiteheat.c
1212     +++ b/drivers/usb/serial/whiteheat.c
1213     @@ -521,6 +521,10 @@ static void command_port_read_callback(struct urb *urb)
1214     dev_dbg(&urb->dev->dev, "%s - command_info is NULL, exiting.\n", __func__);
1215     return;
1216     }
1217     + if (!urb->actual_length) {
1218     + dev_dbg(&urb->dev->dev, "%s - empty response, exiting.\n", __func__);
1219     + return;
1220     + }
1221     if (status) {
1222     dev_dbg(&urb->dev->dev, "%s - nonzero urb status: %d\n", __func__, status);
1223     if (status != -ENOENT)
1224     @@ -541,7 +545,8 @@ static void command_port_read_callback(struct urb *urb)
1225     /* These are unsolicited reports from the firmware, hence no
1226     waiting command to wakeup */
1227     dev_dbg(&urb->dev->dev, "%s - event received\n", __func__);
1228     - } else if (data[0] == WHITEHEAT_GET_DTR_RTS) {
1229     + } else if ((data[0] == WHITEHEAT_GET_DTR_RTS) &&
1230     + (urb->actual_length - 1 <= sizeof(command_info->result_buffer))) {
1231     memcpy(command_info->result_buffer, &data[1],
1232     urb->actual_length - 1);
1233     command_info->command_finished = WHITEHEAT_CMD_COMPLETE;
1234     diff --git a/fs/btrfs/file-item.c b/fs/btrfs/file-item.c
1235     index b193bf324a41..3af77aa051d2 100644
1236     --- a/fs/btrfs/file-item.c
1237     +++ b/fs/btrfs/file-item.c
1238     @@ -754,7 +754,7 @@ again:
1239     found_next = 1;
1240     if (ret != 0)
1241     goto insert;
1242     - slot = 0;
1243     + slot = path->slots[0];
1244     }
1245     btrfs_item_key_to_cpu(path->nodes[0], &found_key, slot);
1246     if (found_key.objectid != BTRFS_EXTENT_CSUM_OBJECTID ||
1247     diff --git a/fs/ext4/mballoc.c b/fs/ext4/mballoc.c
1248     index 16bb6591561b..162b80d527a0 100644
1249     --- a/fs/ext4/mballoc.c
1250     +++ b/fs/ext4/mballoc.c
1251     @@ -1396,6 +1396,8 @@ static void mb_free_blocks(struct inode *inode, struct ext4_buddy *e4b,
1252     int last = first + count - 1;
1253     struct super_block *sb = e4b->bd_sb;
1254    
1255     + if (WARN_ON(count == 0))
1256     + return;
1257     BUG_ON(last >= (sb->s_blocksize << 3));
1258     assert_spin_locked(ext4_group_lock_ptr(sb, e4b->bd_group));
1259     mb_check_buddy(e4b);
1260     @@ -3177,8 +3179,30 @@ static void ext4_mb_collect_stats(struct ext4_allocation_context *ac)
1261     static void ext4_discard_allocated_blocks(struct ext4_allocation_context *ac)
1262     {
1263     struct ext4_prealloc_space *pa = ac->ac_pa;
1264     + struct ext4_buddy e4b;
1265     + int err;
1266    
1267     - if (pa && pa->pa_type == MB_INODE_PA)
1268     + if (pa == NULL) {
1269     + if (ac->ac_f_ex.fe_len == 0)
1270     + return;
1271     + err = ext4_mb_load_buddy(ac->ac_sb, ac->ac_f_ex.fe_group, &e4b);
1272     + if (err) {
1273     + /*
1274     + * This should never happen since we pin the
1275     + * pages in the ext4_allocation_context so
1276     + * ext4_mb_load_buddy() should never fail.
1277     + */
1278     + WARN(1, "mb_load_buddy failed (%d)", err);
1279     + return;
1280     + }
1281     + ext4_lock_group(ac->ac_sb, ac->ac_f_ex.fe_group);
1282     + mb_free_blocks(ac->ac_inode, &e4b, ac->ac_f_ex.fe_start,
1283     + ac->ac_f_ex.fe_len);
1284     + ext4_unlock_group(ac->ac_sb, ac->ac_f_ex.fe_group);
1285     + ext4_mb_unload_buddy(&e4b);
1286     + return;
1287     + }
1288     + if (pa->pa_type == MB_INODE_PA)
1289     pa->pa_free += ac->ac_b_ex.fe_len;
1290     }
1291    
1292     diff --git a/fs/isofs/inode.c b/fs/isofs/inode.c
1293     index d3705490ff9c..10489bbd40fc 100644
1294     --- a/fs/isofs/inode.c
1295     +++ b/fs/isofs/inode.c
1296     @@ -69,7 +69,7 @@ static void isofs_put_super(struct super_block *sb)
1297     return;
1298     }
1299    
1300     -static int isofs_read_inode(struct inode *);
1301     +static int isofs_read_inode(struct inode *, int relocated);
1302     static int isofs_statfs (struct dentry *, struct kstatfs *);
1303    
1304     static struct kmem_cache *isofs_inode_cachep;
1305     @@ -1274,7 +1274,7 @@ out_toomany:
1306     goto out;
1307     }
1308    
1309     -static int isofs_read_inode(struct inode *inode)
1310     +static int isofs_read_inode(struct inode *inode, int relocated)
1311     {
1312     struct super_block *sb = inode->i_sb;
1313     struct isofs_sb_info *sbi = ISOFS_SB(sb);
1314     @@ -1419,7 +1419,7 @@ static int isofs_read_inode(struct inode *inode)
1315     */
1316    
1317     if (!high_sierra) {
1318     - parse_rock_ridge_inode(de, inode);
1319     + parse_rock_ridge_inode(de, inode, relocated);
1320     /* if we want uid/gid set, override the rock ridge setting */
1321     if (sbi->s_uid_set)
1322     inode->i_uid = sbi->s_uid;
1323     @@ -1498,9 +1498,10 @@ static int isofs_iget5_set(struct inode *ino, void *data)
1324     * offset that point to the underlying meta-data for the inode. The
1325     * code below is otherwise similar to the iget() code in
1326     * include/linux/fs.h */
1327     -struct inode *isofs_iget(struct super_block *sb,
1328     - unsigned long block,
1329     - unsigned long offset)
1330     +struct inode *__isofs_iget(struct super_block *sb,
1331     + unsigned long block,
1332     + unsigned long offset,
1333     + int relocated)
1334     {
1335     unsigned long hashval;
1336     struct inode *inode;
1337     @@ -1522,7 +1523,7 @@ struct inode *isofs_iget(struct super_block *sb,
1338     return ERR_PTR(-ENOMEM);
1339    
1340     if (inode->i_state & I_NEW) {
1341     - ret = isofs_read_inode(inode);
1342     + ret = isofs_read_inode(inode, relocated);
1343     if (ret < 0) {
1344     iget_failed(inode);
1345     inode = ERR_PTR(ret);
1346     diff --git a/fs/isofs/isofs.h b/fs/isofs/isofs.h
1347     index 99167238518d..0ac4c1f73fbd 100644
1348     --- a/fs/isofs/isofs.h
1349     +++ b/fs/isofs/isofs.h
1350     @@ -107,7 +107,7 @@ extern int iso_date(char *, int);
1351    
1352     struct inode; /* To make gcc happy */
1353    
1354     -extern int parse_rock_ridge_inode(struct iso_directory_record *, struct inode *);
1355     +extern int parse_rock_ridge_inode(struct iso_directory_record *, struct inode *, int relocated);
1356     extern int get_rock_ridge_filename(struct iso_directory_record *, char *, struct inode *);
1357     extern int isofs_name_translate(struct iso_directory_record *, char *, struct inode *);
1358    
1359     @@ -118,9 +118,24 @@ extern struct dentry *isofs_lookup(struct inode *, struct dentry *, unsigned int
1360     extern struct buffer_head *isofs_bread(struct inode *, sector_t);
1361     extern int isofs_get_blocks(struct inode *, sector_t, struct buffer_head **, unsigned long);
1362    
1363     -extern struct inode *isofs_iget(struct super_block *sb,
1364     - unsigned long block,
1365     - unsigned long offset);
1366     +struct inode *__isofs_iget(struct super_block *sb,
1367     + unsigned long block,
1368     + unsigned long offset,
1369     + int relocated);
1370     +
1371     +static inline struct inode *isofs_iget(struct super_block *sb,
1372     + unsigned long block,
1373     + unsigned long offset)
1374     +{
1375     + return __isofs_iget(sb, block, offset, 0);
1376     +}
1377     +
1378     +static inline struct inode *isofs_iget_reloc(struct super_block *sb,
1379     + unsigned long block,
1380     + unsigned long offset)
1381     +{
1382     + return __isofs_iget(sb, block, offset, 1);
1383     +}
1384    
1385     /* Because the inode number is no longer relevant to finding the
1386     * underlying meta-data for an inode, we are free to choose a more
1387     diff --git a/fs/isofs/rock.c b/fs/isofs/rock.c
1388     index c0bf42472e40..f488bbae541a 100644
1389     --- a/fs/isofs/rock.c
1390     +++ b/fs/isofs/rock.c
1391     @@ -288,12 +288,16 @@ eio:
1392     goto out;
1393     }
1394    
1395     +#define RR_REGARD_XA 1
1396     +#define RR_RELOC_DE 2
1397     +
1398     static int
1399     parse_rock_ridge_inode_internal(struct iso_directory_record *de,
1400     - struct inode *inode, int regard_xa)
1401     + struct inode *inode, int flags)
1402     {
1403     int symlink_len = 0;
1404     int cnt, sig;
1405     + unsigned int reloc_block;
1406     struct inode *reloc;
1407     struct rock_ridge *rr;
1408     int rootflag;
1409     @@ -305,7 +309,7 @@ parse_rock_ridge_inode_internal(struct iso_directory_record *de,
1410    
1411     init_rock_state(&rs, inode);
1412     setup_rock_ridge(de, inode, &rs);
1413     - if (regard_xa) {
1414     + if (flags & RR_REGARD_XA) {
1415     rs.chr += 14;
1416     rs.len -= 14;
1417     if (rs.len < 0)
1418     @@ -485,12 +489,22 @@ repeat:
1419     "relocated directory\n");
1420     goto out;
1421     case SIG('C', 'L'):
1422     - ISOFS_I(inode)->i_first_extent =
1423     - isonum_733(rr->u.CL.location);
1424     - reloc =
1425     - isofs_iget(inode->i_sb,
1426     - ISOFS_I(inode)->i_first_extent,
1427     - 0);
1428     + if (flags & RR_RELOC_DE) {
1429     + printk(KERN_ERR
1430     + "ISOFS: Recursive directory relocation "
1431     + "is not supported\n");
1432     + goto eio;
1433     + }
1434     + reloc_block = isonum_733(rr->u.CL.location);
1435     + if (reloc_block == ISOFS_I(inode)->i_iget5_block &&
1436     + ISOFS_I(inode)->i_iget5_offset == 0) {
1437     + printk(KERN_ERR
1438     + "ISOFS: Directory relocation points to "
1439     + "itself\n");
1440     + goto eio;
1441     + }
1442     + ISOFS_I(inode)->i_first_extent = reloc_block;
1443     + reloc = isofs_iget_reloc(inode->i_sb, reloc_block, 0);
1444     if (IS_ERR(reloc)) {
1445     ret = PTR_ERR(reloc);
1446     goto out;
1447     @@ -637,9 +651,11 @@ static char *get_symlink_chunk(char *rpnt, struct rock_ridge *rr, char *plimit)
1448     return rpnt;
1449     }
1450    
1451     -int parse_rock_ridge_inode(struct iso_directory_record *de, struct inode *inode)
1452     +int parse_rock_ridge_inode(struct iso_directory_record *de, struct inode *inode,
1453     + int relocated)
1454     {
1455     - int result = parse_rock_ridge_inode_internal(de, inode, 0);
1456     + int flags = relocated ? RR_RELOC_DE : 0;
1457     + int result = parse_rock_ridge_inode_internal(de, inode, flags);
1458    
1459     /*
1460     * if rockridge flag was reset and we didn't look for attributes
1461     @@ -647,7 +663,8 @@ int parse_rock_ridge_inode(struct iso_directory_record *de, struct inode *inode)
1462     */
1463     if ((ISOFS_SB(inode->i_sb)->s_rock_offset == -1)
1464     && (ISOFS_SB(inode->i_sb)->s_rock == 2)) {
1465     - result = parse_rock_ridge_inode_internal(de, inode, 14);
1466     + result = parse_rock_ridge_inode_internal(de, inode,
1467     + flags | RR_REGARD_XA);
1468     }
1469     return result;
1470     }
1471     diff --git a/fs/jbd2/recovery.c b/fs/jbd2/recovery.c
1472     index 626846bac32f..3bacc1909ddb 100644
1473     --- a/fs/jbd2/recovery.c
1474     +++ b/fs/jbd2/recovery.c
1475     @@ -427,6 +427,7 @@ static int do_one_pass(journal_t *journal,
1476     int tag_bytes = journal_tag_bytes(journal);
1477     __u32 crc32_sum = ~0; /* Transactional Checksums */
1478     int descr_csum_size = 0;
1479     + int block_error = 0;
1480    
1481     /*
1482     * First thing is to establish what we expect to find in the log
1483     @@ -599,7 +600,8 @@ static int do_one_pass(journal_t *journal,
1484     "checksum recovering "
1485     "block %llu in log\n",
1486     blocknr);
1487     - continue;
1488     + block_error = 1;
1489     + goto skip_write;
1490     }
1491    
1492     /* Find a buffer for the new
1493     @@ -798,7 +800,8 @@ static int do_one_pass(journal_t *journal,
1494     success = -EIO;
1495     }
1496     }
1497     -
1498     + if (block_error && success == 0)
1499     + success = -EIO;
1500     return success;
1501    
1502     failed:
1503     diff --git a/fs/nfs/nfs3acl.c b/fs/nfs/nfs3acl.c
1504     index 4a1aafba6a20..8c34f57a9aef 100644
1505     --- a/fs/nfs/nfs3acl.c
1506     +++ b/fs/nfs/nfs3acl.c
1507     @@ -305,7 +305,10 @@ static int nfs3_proc_setacls(struct inode *inode, struct posix_acl *acl,
1508     .rpc_argp = &args,
1509     .rpc_resp = &fattr,
1510     };
1511     - int status;
1512     + int status = 0;
1513     +
1514     + if (acl == NULL && (!S_ISDIR(inode->i_mode) || dfacl == NULL))
1515     + goto out;
1516    
1517     status = -EOPNOTSUPP;
1518     if (!nfs_server_capable(inode, NFS_CAP_ACLS))
1519     diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c
1520     index 1ae7dd5956c5..25559821771b 100644
1521     --- a/fs/nfs/nfs4proc.c
1522     +++ b/fs/nfs/nfs4proc.c
1523     @@ -2287,6 +2287,7 @@ static void nfs4_close_prepare(struct rpc_task *task, void *data)
1524     struct nfs4_closedata *calldata = data;
1525     struct nfs4_state *state = calldata->state;
1526     struct inode *inode = calldata->inode;
1527     + bool is_rdonly, is_wronly, is_rdwr;
1528     int call_close = 0;
1529    
1530     dprintk("%s: begin!\n", __func__);
1531     @@ -2294,18 +2295,24 @@ static void nfs4_close_prepare(struct rpc_task *task, void *data)
1532     goto out_wait;
1533    
1534     task->tk_msg.rpc_proc = &nfs4_procedures[NFSPROC4_CLNT_OPEN_DOWNGRADE];
1535     - calldata->arg.fmode = FMODE_READ|FMODE_WRITE;
1536     spin_lock(&state->owner->so_lock);
1537     + is_rdwr = test_bit(NFS_O_RDWR_STATE, &state->flags);
1538     + is_rdonly = test_bit(NFS_O_RDONLY_STATE, &state->flags);
1539     + is_wronly = test_bit(NFS_O_WRONLY_STATE, &state->flags);
1540     + /* Calculate the current open share mode */
1541     + calldata->arg.fmode = 0;
1542     + if (is_rdonly || is_rdwr)
1543     + calldata->arg.fmode |= FMODE_READ;
1544     + if (is_wronly || is_rdwr)
1545     + calldata->arg.fmode |= FMODE_WRITE;
1546     /* Calculate the change in open mode */
1547     if (state->n_rdwr == 0) {
1548     if (state->n_rdonly == 0) {
1549     - call_close |= test_bit(NFS_O_RDONLY_STATE, &state->flags);
1550     - call_close |= test_bit(NFS_O_RDWR_STATE, &state->flags);
1551     + call_close |= is_rdonly || is_rdwr;
1552     calldata->arg.fmode &= ~FMODE_READ;
1553     }
1554     if (state->n_wronly == 0) {
1555     - call_close |= test_bit(NFS_O_WRONLY_STATE, &state->flags);
1556     - call_close |= test_bit(NFS_O_RDWR_STATE, &state->flags);
1557     + call_close |= is_wronly || is_rdwr;
1558     calldata->arg.fmode &= ~FMODE_WRITE;
1559     }
1560     }
1561     diff --git a/fs/nfsd/nfs4callback.c b/fs/nfsd/nfs4callback.c
1562     index 3eaa6e30a2dc..cc8c5b32043c 100644
1563     --- a/fs/nfsd/nfs4callback.c
1564     +++ b/fs/nfsd/nfs4callback.c
1565     @@ -672,7 +672,8 @@ static int setup_callback_client(struct nfs4_client *clp, struct nfs4_cb_conn *c
1566     clp->cl_cb_session = ses;
1567     args.bc_xprt = conn->cb_xprt;
1568     args.prognumber = clp->cl_cb_session->se_cb_prog;
1569     - args.protocol = XPRT_TRANSPORT_BC_TCP;
1570     + args.protocol = conn->cb_xprt->xpt_class->xcl_ident |
1571     + XPRT_TRANSPORT_BC;
1572     args.authflavor = ses->se_cb_sec.flavor;
1573     }
1574     /* Create RPC client */
1575     diff --git a/fs/nfsd/nfssvc.c b/fs/nfsd/nfssvc.c
1576     index 262df5ccbf59..8016892f3f05 100644
1577     --- a/fs/nfsd/nfssvc.c
1578     +++ b/fs/nfsd/nfssvc.c
1579     @@ -220,7 +220,8 @@ static int nfsd_startup_generic(int nrservs)
1580     */
1581     ret = nfsd_racache_init(2*nrservs);
1582     if (ret)
1583     - return ret;
1584     + goto dec_users;
1585     +
1586     ret = nfs4_state_start();
1587     if (ret)
1588     goto out_racache;
1589     @@ -228,6 +229,8 @@ static int nfsd_startup_generic(int nrservs)
1590    
1591     out_racache:
1592     nfsd_racache_shutdown();
1593     +dec_users:
1594     + nfsd_users--;
1595     return ret;
1596     }
1597    
1598     diff --git a/include/drm/drm_pciids.h b/include/drm/drm_pciids.h
1599     index ecaef57f9f6c..3a1cff56ef20 100644
1600     --- a/include/drm/drm_pciids.h
1601     +++ b/include/drm/drm_pciids.h
1602     @@ -143,8 +143,11 @@
1603     {0x1002, 0x6601, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_OLAND|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
1604     {0x1002, 0x6602, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_OLAND|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
1605     {0x1002, 0x6603, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_OLAND|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
1606     + {0x1002, 0x6604, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_OLAND|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
1607     + {0x1002, 0x6605, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_OLAND|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
1608     {0x1002, 0x6606, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_OLAND|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
1609     {0x1002, 0x6607, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_OLAND|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
1610     + {0x1002, 0x6608, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_OLAND|RADEON_NEW_MEMMAP}, \
1611     {0x1002, 0x6610, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_OLAND|RADEON_NEW_MEMMAP}, \
1612     {0x1002, 0x6611, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_OLAND|RADEON_NEW_MEMMAP}, \
1613     {0x1002, 0x6613, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_OLAND|RADEON_NEW_MEMMAP}, \
1614     @@ -256,6 +259,7 @@
1615     {0x1002, 0x6829, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_VERDE|RADEON_NEW_MEMMAP}, \
1616     {0x1002, 0x682A, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_VERDE|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
1617     {0x1002, 0x682B, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_VERDE|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
1618     + {0x1002, 0x682C, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_VERDE|RADEON_NEW_MEMMAP}, \
1619     {0x1002, 0x682D, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_VERDE|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
1620     {0x1002, 0x682F, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_VERDE|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
1621     {0x1002, 0x6830, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_VERDE|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
1622     diff --git a/include/linux/sunrpc/svc_xprt.h b/include/linux/sunrpc/svc_xprt.h
1623     index b05963f09ebf..f5bfb1a80abe 100644
1624     --- a/include/linux/sunrpc/svc_xprt.h
1625     +++ b/include/linux/sunrpc/svc_xprt.h
1626     @@ -32,6 +32,7 @@ struct svc_xprt_class {
1627     struct svc_xprt_ops *xcl_ops;
1628     struct list_head xcl_list;
1629     u32 xcl_max_payload;
1630     + int xcl_ident;
1631     };
1632    
1633     /*
1634     diff --git a/net/sunrpc/svcsock.c b/net/sunrpc/svcsock.c
1635     index 422759bae60d..5c62c5e89b46 100644
1636     --- a/net/sunrpc/svcsock.c
1637     +++ b/net/sunrpc/svcsock.c
1638     @@ -683,6 +683,7 @@ static struct svc_xprt_class svc_udp_class = {
1639     .xcl_owner = THIS_MODULE,
1640     .xcl_ops = &svc_udp_ops,
1641     .xcl_max_payload = RPCSVC_MAXPAYLOAD_UDP,
1642     + .xcl_ident = XPRT_TRANSPORT_UDP,
1643     };
1644    
1645     static void svc_udp_init(struct svc_sock *svsk, struct svc_serv *serv)
1646     @@ -1275,6 +1276,7 @@ static struct svc_xprt_class svc_tcp_class = {
1647     .xcl_owner = THIS_MODULE,
1648     .xcl_ops = &svc_tcp_ops,
1649     .xcl_max_payload = RPCSVC_MAXPAYLOAD_TCP,
1650     + .xcl_ident = XPRT_TRANSPORT_TCP,
1651     };
1652    
1653     void svc_init_xprt_sock(void)
1654     diff --git a/net/sunrpc/xprt.c b/net/sunrpc/xprt.c
1655     index 095363eee764..42ce6bfc729d 100644
1656     --- a/net/sunrpc/xprt.c
1657     +++ b/net/sunrpc/xprt.c
1658     @@ -1290,7 +1290,7 @@ struct rpc_xprt *xprt_create_transport(struct xprt_create *args)
1659     }
1660     }
1661     spin_unlock(&xprt_list_lock);
1662     - printk(KERN_ERR "RPC: transport (%d) not supported\n", args->ident);
1663     + dprintk("RPC: transport (%d) not supported\n", args->ident);
1664     return ERR_PTR(-EIO);
1665    
1666     found:
1667     diff --git a/net/sunrpc/xprtrdma/svc_rdma_transport.c b/net/sunrpc/xprtrdma/svc_rdma_transport.c
1668     index 62e4f9bcc387..ed36cb52cd86 100644
1669     --- a/net/sunrpc/xprtrdma/svc_rdma_transport.c
1670     +++ b/net/sunrpc/xprtrdma/svc_rdma_transport.c
1671     @@ -89,6 +89,7 @@ struct svc_xprt_class svc_rdma_class = {
1672     .xcl_owner = THIS_MODULE,
1673     .xcl_ops = &svc_rdma_ops,
1674     .xcl_max_payload = RPCSVC_MAXPAYLOAD_TCP,
1675     + .xcl_ident = XPRT_TRANSPORT_RDMA,
1676     };
1677    
1678     struct svc_rdma_op_ctxt *svc_rdma_get_context(struct svcxprt_rdma *xprt)
1679     diff --git a/sound/pci/Kconfig b/sound/pci/Kconfig
1680     index daac7c7ebe9e..3397ddbdfc0c 100644
1681     --- a/sound/pci/Kconfig
1682     +++ b/sound/pci/Kconfig
1683     @@ -856,8 +856,8 @@ config SND_VIRTUOSO
1684     select SND_JACK if INPUT=y || INPUT=SND
1685     help
1686     Say Y here to include support for sound cards based on the
1687     - Asus AV66/AV100/AV200 chips, i.e., Xonar D1, DX, D2, D2X, DS,
1688     - Essence ST (Deluxe), and Essence STX.
1689     + Asus AV66/AV100/AV200 chips, i.e., Xonar D1, DX, D2, D2X, DS, DSX,
1690     + Essence ST (Deluxe), and Essence STX (II).
1691     Support for the HDAV1.3 (Deluxe) and HDAV1.3 Slim is experimental;
1692     for the Xense, missing.
1693    
1694     diff --git a/sound/pci/hda/patch_ca0132.c b/sound/pci/hda/patch_ca0132.c
1695     index 01fefbe29e4a..4126f3d9edb6 100644
1696     --- a/sound/pci/hda/patch_ca0132.c
1697     +++ b/sound/pci/hda/patch_ca0132.c
1698     @@ -4379,6 +4379,9 @@ static void ca0132_download_dsp(struct hda_codec *codec)
1699     return; /* NOP */
1700     #endif
1701    
1702     + if (spec->dsp_state == DSP_DOWNLOAD_FAILED)
1703     + return; /* don't retry failures */
1704     +
1705     chipio_enable_clocks(codec);
1706     spec->dsp_state = DSP_DOWNLOADING;
1707     if (!ca0132_download_dsp_images(codec))
1708     @@ -4555,7 +4558,8 @@ static int ca0132_init(struct hda_codec *codec)
1709     struct auto_pin_cfg *cfg = &spec->autocfg;
1710     int i;
1711    
1712     - spec->dsp_state = DSP_DOWNLOAD_INIT;
1713     + if (spec->dsp_state != DSP_DOWNLOAD_FAILED)
1714     + spec->dsp_state = DSP_DOWNLOAD_INIT;
1715     spec->curr_chip_addx = INVALID_CHIP_ADDRESS;
1716    
1717     snd_hda_power_up(codec);
1718     @@ -4666,6 +4670,7 @@ static int patch_ca0132(struct hda_codec *codec)
1719     codec->spec = spec;
1720     spec->codec = codec;
1721    
1722     + spec->dsp_state = DSP_DOWNLOAD_INIT;
1723     spec->num_mixers = 1;
1724     spec->mixers[0] = ca0132_mixer;
1725    
1726     diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
1727     index 0b85e857f1c7..593090e5bd77 100644
1728     --- a/sound/pci/hda/patch_realtek.c
1729     +++ b/sound/pci/hda/patch_realtek.c
1730     @@ -175,6 +175,8 @@ static void alc_fix_pll(struct hda_codec *codec)
1731     spec->pll_coef_idx);
1732     val = snd_hda_codec_read(codec, spec->pll_nid, 0,
1733     AC_VERB_GET_PROC_COEF, 0);
1734     + if (val == -1)
1735     + return;
1736     snd_hda_codec_write(codec, spec->pll_nid, 0, AC_VERB_SET_COEF_INDEX,
1737     spec->pll_coef_idx);
1738     snd_hda_codec_write(codec, spec->pll_nid, 0, AC_VERB_SET_PROC_COEF,
1739     @@ -2677,6 +2679,8 @@ static int alc269_parse_auto_config(struct hda_codec *codec)
1740     static void alc269vb_toggle_power_output(struct hda_codec *codec, int power_up)
1741     {
1742     int val = alc_read_coef_idx(codec, 0x04);
1743     + if (val == -1)
1744     + return;
1745     if (power_up)
1746     val |= 1 << 11;
1747     else
1748     @@ -3822,27 +3826,30 @@ static void alc269_fill_coef(struct hda_codec *codec)
1749     if ((alc_get_coef0(codec) & 0x00ff) == 0x017) {
1750     val = alc_read_coef_idx(codec, 0x04);
1751     /* Power up output pin */
1752     - alc_write_coef_idx(codec, 0x04, val | (1<<11));
1753     + if (val != -1)
1754     + alc_write_coef_idx(codec, 0x04, val | (1<<11));
1755     }
1756    
1757     if ((alc_get_coef0(codec) & 0x00ff) == 0x018) {
1758     val = alc_read_coef_idx(codec, 0xd);
1759     - if ((val & 0x0c00) >> 10 != 0x1) {
1760     + if (val != -1 && (val & 0x0c00) >> 10 != 0x1) {
1761     /* Capless ramp up clock control */
1762     alc_write_coef_idx(codec, 0xd, val | (1<<10));
1763     }
1764     val = alc_read_coef_idx(codec, 0x17);
1765     - if ((val & 0x01c0) >> 6 != 0x4) {
1766     + if (val != -1 && (val & 0x01c0) >> 6 != 0x4) {
1767     /* Class D power on reset */
1768     alc_write_coef_idx(codec, 0x17, val | (1<<7));
1769     }
1770     }
1771    
1772     val = alc_read_coef_idx(codec, 0xd); /* Class D */
1773     - alc_write_coef_idx(codec, 0xd, val | (1<<14));
1774     + if (val != -1)
1775     + alc_write_coef_idx(codec, 0xd, val | (1<<14));
1776    
1777     val = alc_read_coef_idx(codec, 0x4); /* HP */
1778     - alc_write_coef_idx(codec, 0x4, val | (1<<11));
1779     + if (val != -1)
1780     + alc_write_coef_idx(codec, 0x4, val | (1<<11));
1781     }
1782    
1783     /*
1784     diff --git a/sound/pci/hda/patch_sigmatel.c b/sound/pci/hda/patch_sigmatel.c
1785     index 0c521b7752b2..132b4c802a47 100644
1786     --- a/sound/pci/hda/patch_sigmatel.c
1787     +++ b/sound/pci/hda/patch_sigmatel.c
1788     @@ -84,6 +84,7 @@ enum {
1789     STAC_DELL_EQ,
1790     STAC_ALIENWARE_M17X,
1791     STAC_92HD89XX_HP_FRONT_JACK,
1792     + STAC_92HD89XX_HP_Z1_G2_RIGHT_MIC_JACK,
1793     STAC_92HD73XX_MODELS
1794     };
1795    
1796     @@ -1783,6 +1784,11 @@ static const struct hda_pintbl stac92hd89xx_hp_front_jack_pin_configs[] = {
1797     {}
1798     };
1799    
1800     +static const struct hda_pintbl stac92hd89xx_hp_z1_g2_right_mic_jack_pin_configs[] = {
1801     + { 0x0e, 0x400000f0 },
1802     + {}
1803     +};
1804     +
1805     static void stac92hd73xx_fixup_ref(struct hda_codec *codec,
1806     const struct hda_fixup *fix, int action)
1807     {
1808     @@ -1905,6 +1911,10 @@ static const struct hda_fixup stac92hd73xx_fixups[] = {
1809     [STAC_92HD89XX_HP_FRONT_JACK] = {
1810     .type = HDA_FIXUP_PINS,
1811     .v.pins = stac92hd89xx_hp_front_jack_pin_configs,
1812     + },
1813     + [STAC_92HD89XX_HP_Z1_G2_RIGHT_MIC_JACK] = {
1814     + .type = HDA_FIXUP_PINS,
1815     + .v.pins = stac92hd89xx_hp_z1_g2_right_mic_jack_pin_configs,
1816     }
1817     };
1818    
1819     @@ -1965,6 +1975,8 @@ static const struct snd_pci_quirk stac92hd73xx_fixup_tbl[] = {
1820     "Alienware M17x", STAC_ALIENWARE_M17X),
1821     SND_PCI_QUIRK(PCI_VENDOR_ID_DELL, 0x0490,
1822     "Alienware M17x R3", STAC_DELL_EQ),
1823     + SND_PCI_QUIRK(PCI_VENDOR_ID_HP, 0x1927,
1824     + "HP Z1 G2", STAC_92HD89XX_HP_Z1_G2_RIGHT_MIC_JACK),
1825     SND_PCI_QUIRK(PCI_VENDOR_ID_HP, 0x2b17,
1826     "unknown HP", STAC_92HD89XX_HP_FRONT_JACK),
1827     {} /* terminator */
1828     diff --git a/sound/pci/oxygen/virtuoso.c b/sound/pci/oxygen/virtuoso.c
1829     index 64b9fda5f04a..dbbbacfd535e 100644
1830     --- a/sound/pci/oxygen/virtuoso.c
1831     +++ b/sound/pci/oxygen/virtuoso.c
1832     @@ -53,6 +53,7 @@ static DEFINE_PCI_DEVICE_TABLE(xonar_ids) = {
1833     { OXYGEN_PCI_SUBID(0x1043, 0x835e) },
1834     { OXYGEN_PCI_SUBID(0x1043, 0x838e) },
1835     { OXYGEN_PCI_SUBID(0x1043, 0x8522) },
1836     + { OXYGEN_PCI_SUBID(0x1043, 0x85f4) },
1837     { OXYGEN_PCI_SUBID_BROKEN_EEPROM },
1838     { }
1839     };
1840     diff --git a/sound/pci/oxygen/xonar_pcm179x.c b/sound/pci/oxygen/xonar_pcm179x.c
1841     index c8c7f2c9b355..e02605931669 100644
1842     --- a/sound/pci/oxygen/xonar_pcm179x.c
1843     +++ b/sound/pci/oxygen/xonar_pcm179x.c
1844     @@ -100,8 +100,8 @@
1845     */
1846    
1847     /*
1848     - * Xonar Essence ST (Deluxe)/STX
1849     - * -----------------------------
1850     + * Xonar Essence ST (Deluxe)/STX (II)
1851     + * ----------------------------------
1852     *
1853     * CMI8788:
1854     *
1855     @@ -1138,6 +1138,14 @@ int get_xonar_pcm179x_model(struct oxygen *chip,
1856     chip->model.resume = xonar_stx_resume;
1857     chip->model.set_dac_params = set_pcm1796_params;
1858     break;
1859     + case 0x85f4:
1860     + chip->model = model_xonar_st;
1861     + /* TODO: daughterboard support */
1862     + chip->model.shortname = "Xonar STX II";
1863     + chip->model.init = xonar_stx_init;
1864     + chip->model.resume = xonar_stx_resume;
1865     + chip->model.set_dac_params = set_pcm1796_params;
1866     + break;
1867     default:
1868     return -EINVAL;
1869     }
1870     diff --git a/virt/kvm/ioapic.c b/virt/kvm/ioapic.c
1871     index 39dc5bc742e0..5eaf18f90e83 100644
1872     --- a/virt/kvm/ioapic.c
1873     +++ b/virt/kvm/ioapic.c
1874     @@ -203,10 +203,9 @@ void kvm_ioapic_scan_entry(struct kvm_vcpu *vcpu, u64 *eoi_exit_bitmap,
1875     spin_lock(&ioapic->lock);
1876     for (index = 0; index < IOAPIC_NUM_PINS; index++) {
1877     e = &ioapic->redirtbl[index];
1878     - if (!e->fields.mask &&
1879     - (e->fields.trig_mode == IOAPIC_LEVEL_TRIG ||
1880     - kvm_irq_has_notifier(ioapic->kvm, KVM_IRQCHIP_IOAPIC,
1881     - index) || index == RTC_GSI)) {
1882     + if (e->fields.trig_mode == IOAPIC_LEVEL_TRIG ||
1883     + kvm_irq_has_notifier(ioapic->kvm, KVM_IRQCHIP_IOAPIC, index) ||
1884     + index == RTC_GSI) {
1885     if (kvm_apic_match_dest(vcpu, NULL, 0,
1886     e->fields.dest_id, e->fields.dest_mode)) {
1887     __set_bit(e->fields.vector,
1888     diff --git a/virt/kvm/iommu.c b/virt/kvm/iommu.c
1889     index c329c8fc57f4..dec997188dfb 100644
1890     --- a/virt/kvm/iommu.c
1891     +++ b/virt/kvm/iommu.c
1892     @@ -61,6 +61,14 @@ static pfn_t kvm_pin_pages(struct kvm_memory_slot *slot, gfn_t gfn,
1893     return pfn;
1894     }
1895    
1896     +static void kvm_unpin_pages(struct kvm *kvm, pfn_t pfn, unsigned long npages)
1897     +{
1898     + unsigned long i;
1899     +
1900     + for (i = 0; i < npages; ++i)
1901     + kvm_release_pfn_clean(pfn + i);
1902     +}
1903     +
1904     int kvm_iommu_map_pages(struct kvm *kvm, struct kvm_memory_slot *slot)
1905     {
1906     gfn_t gfn, end_gfn;
1907     @@ -123,6 +131,7 @@ int kvm_iommu_map_pages(struct kvm *kvm, struct kvm_memory_slot *slot)
1908     if (r) {
1909     printk(KERN_ERR "kvm_iommu_map_address:"
1910     "iommu failed to map pfn=%llx\n", pfn);
1911     + kvm_unpin_pages(kvm, pfn, page_size);
1912     goto unmap_pages;
1913     }
1914    
1915     @@ -134,7 +143,7 @@ int kvm_iommu_map_pages(struct kvm *kvm, struct kvm_memory_slot *slot)
1916     return 0;
1917    
1918     unmap_pages:
1919     - kvm_iommu_put_pages(kvm, slot->base_gfn, gfn);
1920     + kvm_iommu_put_pages(kvm, slot->base_gfn, gfn - slot->base_gfn);
1921     return r;
1922     }
1923    
1924     @@ -272,14 +281,6 @@ out_unlock:
1925     return r;
1926     }
1927    
1928     -static void kvm_unpin_pages(struct kvm *kvm, pfn_t pfn, unsigned long npages)
1929     -{
1930     - unsigned long i;
1931     -
1932     - for (i = 0; i < npages; ++i)
1933     - kvm_release_pfn_clean(pfn + i);
1934     -}
1935     -
1936     static void kvm_iommu_put_pages(struct kvm *kvm,
1937     gfn_t base_gfn, unsigned long npages)
1938     {