Gentoo Archives: gentoo-commits

From: "Mike Pagano (mpagano)" <mpagano@g.o>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] linux-patches r2200 - genpatches-2.6/trunk/3.0
Date: Mon, 27 Aug 2012 17:39:55
Message-Id: 20120827173144.149212093C@flycatcher.gentoo.org
1 Author: mpagano
2 Date: 2012-08-27 17:30:39 +0000 (Mon, 27 Aug 2012)
3 New Revision: 2200
4
5 Added:
6 genpatches-2.6/trunk/3.0/1041_linux-3.0.42.patch
7 Modified:
8 genpatches-2.6/trunk/3.0/0000_README
9 Log:
10 Linux 3.0.42
11
12 Modified: genpatches-2.6/trunk/3.0/0000_README
13 ===================================================================
14 --- genpatches-2.6/trunk/3.0/0000_README 2012-08-27 17:27:55 UTC (rev 2199)
15 +++ genpatches-2.6/trunk/3.0/0000_README 2012-08-27 17:30:39 UTC (rev 2200)
16 @@ -199,6 +199,10 @@
17 From: http://www.kernel.org
18 Desc: Linux 3.0.41
19
20 +Patch: 1041_linux-3.0.42.patch
21 +From: http://www.kernel.org
22 +Desc: Linux 3.0.42
23 +
24 Patch: 1800_fix-zcache-build.patch
25 From: http://bugs.gentoo.org/show_bug.cgi?id=376325
26 Desc: Fix zcache build error
27
28 Added: genpatches-2.6/trunk/3.0/1041_linux-3.0.42.patch
29 ===================================================================
30 --- genpatches-2.6/trunk/3.0/1041_linux-3.0.42.patch (rev 0)
31 +++ genpatches-2.6/trunk/3.0/1041_linux-3.0.42.patch 2012-08-27 17:30:39 UTC (rev 2200)
32 @@ -0,0 +1,940 @@
33 +diff --git a/Makefile b/Makefile
34 +index 2cbfd97..d863aa0 100644
35 +--- a/Makefile
36 ++++ b/Makefile
37 +@@ -1,6 +1,6 @@
38 + VERSION = 3
39 + PATCHLEVEL = 0
40 +-SUBLEVEL = 41
41 ++SUBLEVEL = 42
42 + EXTRAVERSION =
43 + NAME = Sneaky Weasel
44 +
45 +diff --git a/arch/s390/kernel/compat_linux.c b/arch/s390/kernel/compat_linux.c
46 +index 53acaa8..f98af03 100644
47 +--- a/arch/s390/kernel/compat_linux.c
48 ++++ b/arch/s390/kernel/compat_linux.c
49 +@@ -631,7 +631,6 @@ asmlinkage unsigned long old32_mmap(struct mmap_arg_struct_emu31 __user *arg)
50 + return -EFAULT;
51 + if (a.offset & ~PAGE_MASK)
52 + return -EINVAL;
53 +- a.addr = (unsigned long) compat_ptr(a.addr);
54 + return sys_mmap_pgoff(a.addr, a.len, a.prot, a.flags, a.fd,
55 + a.offset >> PAGE_SHIFT);
56 + }
57 +@@ -642,7 +641,6 @@ asmlinkage long sys32_mmap2(struct mmap_arg_struct_emu31 __user *arg)
58 +
59 + if (copy_from_user(&a, arg, sizeof(a)))
60 + return -EFAULT;
61 +- a.addr = (unsigned long) compat_ptr(a.addr);
62 + return sys_mmap_pgoff(a.addr, a.len, a.prot, a.flags, a.fd, a.offset);
63 + }
64 +
65 +diff --git a/arch/x86/xen/p2m.c b/arch/x86/xen/p2m.c
66 +index 58efeb9..2f7847d 100644
67 +--- a/arch/x86/xen/p2m.c
68 ++++ b/arch/x86/xen/p2m.c
69 +@@ -683,6 +683,7 @@ int m2p_add_override(unsigned long mfn, struct page *page, bool clear_pte)
70 + unsigned long uninitialized_var(address);
71 + unsigned level;
72 + pte_t *ptep = NULL;
73 ++ int ret = 0;
74 +
75 + pfn = page_to_pfn(page);
76 + if (!PageHighMem(page)) {
77 +@@ -706,6 +707,24 @@ int m2p_add_override(unsigned long mfn, struct page *page, bool clear_pte)
78 + list_add(&page->lru, &m2p_overrides[mfn_hash(mfn)]);
79 + spin_unlock_irqrestore(&m2p_override_lock, flags);
80 +
81 ++ /* p2m(m2p(mfn)) == mfn: the mfn is already present somewhere in
82 ++ * this domain. Set the FOREIGN_FRAME_BIT in the p2m for the other
83 ++ * pfn so that the following mfn_to_pfn(mfn) calls will return the
84 ++ * pfn from the m2p_override (the backend pfn) instead.
85 ++ * We need to do this because the pages shared by the frontend
86 ++ * (xen-blkfront) can be already locked (lock_page, called by
87 ++ * do_read_cache_page); when the userspace backend tries to use them
88 ++ * with direct_IO, mfn_to_pfn returns the pfn of the frontend, so
89 ++ * do_blockdev_direct_IO is going to try to lock the same pages
90 ++ * again resulting in a deadlock.
91 ++ * As a side effect get_user_pages_fast might not be safe on the
92 ++ * frontend pages while they are being shared with the backend,
93 ++ * because mfn_to_pfn (that ends up being called by GUPF) will
94 ++ * return the backend pfn rather than the frontend pfn. */
95 ++ ret = __get_user(pfn, &machine_to_phys_mapping[mfn]);
96 ++ if (ret == 0 && get_phys_to_machine(pfn) == mfn)
97 ++ set_phys_to_machine(pfn, FOREIGN_FRAME(mfn));
98 ++
99 + return 0;
100 + }
101 + EXPORT_SYMBOL_GPL(m2p_add_override);
102 +@@ -717,6 +736,7 @@ int m2p_remove_override(struct page *page, bool clear_pte)
103 + unsigned long uninitialized_var(address);
104 + unsigned level;
105 + pte_t *ptep = NULL;
106 ++ int ret = 0;
107 +
108 + pfn = page_to_pfn(page);
109 + mfn = get_phys_to_machine(pfn);
110 +@@ -743,6 +763,22 @@ int m2p_remove_override(struct page *page, bool clear_pte)
111 + /* No tlb flush necessary because the caller already
112 + * left the pte unmapped. */
113 +
114 ++ /* p2m(m2p(mfn)) == FOREIGN_FRAME(mfn): the mfn is already present
115 ++ * somewhere in this domain, even before being added to the
116 ++ * m2p_override (see comment above in m2p_add_override).
117 ++ * If there are no other entries in the m2p_override corresponding
118 ++ * to this mfn, then remove the FOREIGN_FRAME_BIT from the p2m for
119 ++ * the original pfn (the one shared by the frontend): the backend
120 ++ * cannot do any IO on this page anymore because it has been
121 ++ * unshared. Removing the FOREIGN_FRAME_BIT from the p2m entry of
122 ++ * the original pfn causes mfn_to_pfn(mfn) to return the frontend
123 ++ * pfn again. */
124 ++ mfn &= ~FOREIGN_FRAME_BIT;
125 ++ ret = __get_user(pfn, &machine_to_phys_mapping[mfn]);
126 ++ if (ret == 0 && get_phys_to_machine(pfn) == FOREIGN_FRAME(mfn) &&
127 ++ m2p_find_override(mfn) == NULL)
128 ++ set_phys_to_machine(pfn, mfn);
129 ++
130 + return 0;
131 + }
132 + EXPORT_SYMBOL_GPL(m2p_remove_override);
133 +diff --git a/drivers/gpu/drm/i915/intel_ringbuffer.c b/drivers/gpu/drm/i915/intel_ringbuffer.c
134 +index 2d6039b..3bd85f7 100644
135 +--- a/drivers/gpu/drm/i915/intel_ringbuffer.c
136 ++++ b/drivers/gpu/drm/i915/intel_ringbuffer.c
137 +@@ -150,8 +150,6 @@ static int init_ring_common(struct intel_ring_buffer *ring)
138 + I915_WRITE_HEAD(ring, 0);
139 + ring->write_tail(ring, 0);
140 +
141 +- /* Initialize the ring. */
142 +- I915_WRITE_START(ring, obj->gtt_offset);
143 + head = I915_READ_HEAD(ring) & HEAD_ADDR;
144 +
145 + /* G45 ring initialization fails to reset head to zero */
146 +@@ -177,6 +175,11 @@ static int init_ring_common(struct intel_ring_buffer *ring)
147 + }
148 + }
149 +
150 ++ /* Initialize the ring. This must happen _after_ we've cleared the ring
151 ++ * registers with the above sequence (the readback of the HEAD registers
152 ++ * also enforces ordering), otherwise the hw might lose the new ring
153 ++ * register values. */
154 ++ I915_WRITE_START(ring, obj->gtt_offset);
155 + I915_WRITE_CTL(ring,
156 + ((ring->size - PAGE_SIZE) & RING_NR_PAGES)
157 + | RING_REPORT_64K | RING_VALID);
158 +diff --git a/drivers/gpu/drm/radeon/evergreen.c b/drivers/gpu/drm/radeon/evergreen.c
159 +index 8846bad..314e217 100644
160 +--- a/drivers/gpu/drm/radeon/evergreen.c
161 ++++ b/drivers/gpu/drm/radeon/evergreen.c
162 +@@ -1019,24 +1019,8 @@ void evergreen_agp_enable(struct radeon_device *rdev)
163 +
164 + void evergreen_mc_stop(struct radeon_device *rdev, struct evergreen_mc_save *save)
165 + {
166 +- save->vga_control[0] = RREG32(D1VGA_CONTROL);
167 +- save->vga_control[1] = RREG32(D2VGA_CONTROL);
168 + save->vga_render_control = RREG32(VGA_RENDER_CONTROL);
169 + save->vga_hdp_control = RREG32(VGA_HDP_CONTROL);
170 +- save->crtc_control[0] = RREG32(EVERGREEN_CRTC_CONTROL + EVERGREEN_CRTC0_REGISTER_OFFSET);
171 +- save->crtc_control[1] = RREG32(EVERGREEN_CRTC_CONTROL + EVERGREEN_CRTC1_REGISTER_OFFSET);
172 +- if (rdev->num_crtc >= 4) {
173 +- save->vga_control[2] = RREG32(EVERGREEN_D3VGA_CONTROL);
174 +- save->vga_control[3] = RREG32(EVERGREEN_D4VGA_CONTROL);
175 +- save->crtc_control[2] = RREG32(EVERGREEN_CRTC_CONTROL + EVERGREEN_CRTC2_REGISTER_OFFSET);
176 +- save->crtc_control[3] = RREG32(EVERGREEN_CRTC_CONTROL + EVERGREEN_CRTC3_REGISTER_OFFSET);
177 +- }
178 +- if (rdev->num_crtc >= 6) {
179 +- save->vga_control[4] = RREG32(EVERGREEN_D5VGA_CONTROL);
180 +- save->vga_control[5] = RREG32(EVERGREEN_D6VGA_CONTROL);
181 +- save->crtc_control[4] = RREG32(EVERGREEN_CRTC_CONTROL + EVERGREEN_CRTC4_REGISTER_OFFSET);
182 +- save->crtc_control[5] = RREG32(EVERGREEN_CRTC_CONTROL + EVERGREEN_CRTC5_REGISTER_OFFSET);
183 +- }
184 +
185 + /* Stop all video */
186 + WREG32(VGA_RENDER_CONTROL, 0);
187 +@@ -1147,47 +1131,6 @@ void evergreen_mc_resume(struct radeon_device *rdev, struct evergreen_mc_save *s
188 + /* Unlock host access */
189 + WREG32(VGA_HDP_CONTROL, save->vga_hdp_control);
190 + mdelay(1);
191 +- /* Restore video state */
192 +- WREG32(D1VGA_CONTROL, save->vga_control[0]);
193 +- WREG32(D2VGA_CONTROL, save->vga_control[1]);
194 +- if (rdev->num_crtc >= 4) {
195 +- WREG32(EVERGREEN_D3VGA_CONTROL, save->vga_control[2]);
196 +- WREG32(EVERGREEN_D4VGA_CONTROL, save->vga_control[3]);
197 +- }
198 +- if (rdev->num_crtc >= 6) {
199 +- WREG32(EVERGREEN_D5VGA_CONTROL, save->vga_control[4]);
200 +- WREG32(EVERGREEN_D6VGA_CONTROL, save->vga_control[5]);
201 +- }
202 +- WREG32(EVERGREEN_CRTC_UPDATE_LOCK + EVERGREEN_CRTC0_REGISTER_OFFSET, 1);
203 +- WREG32(EVERGREEN_CRTC_UPDATE_LOCK + EVERGREEN_CRTC1_REGISTER_OFFSET, 1);
204 +- if (rdev->num_crtc >= 4) {
205 +- WREG32(EVERGREEN_CRTC_UPDATE_LOCK + EVERGREEN_CRTC2_REGISTER_OFFSET, 1);
206 +- WREG32(EVERGREEN_CRTC_UPDATE_LOCK + EVERGREEN_CRTC3_REGISTER_OFFSET, 1);
207 +- }
208 +- if (rdev->num_crtc >= 6) {
209 +- WREG32(EVERGREEN_CRTC_UPDATE_LOCK + EVERGREEN_CRTC4_REGISTER_OFFSET, 1);
210 +- WREG32(EVERGREEN_CRTC_UPDATE_LOCK + EVERGREEN_CRTC5_REGISTER_OFFSET, 1);
211 +- }
212 +- WREG32(EVERGREEN_CRTC_CONTROL + EVERGREEN_CRTC0_REGISTER_OFFSET, save->crtc_control[0]);
213 +- WREG32(EVERGREEN_CRTC_CONTROL + EVERGREEN_CRTC1_REGISTER_OFFSET, save->crtc_control[1]);
214 +- if (rdev->num_crtc >= 4) {
215 +- WREG32(EVERGREEN_CRTC_CONTROL + EVERGREEN_CRTC2_REGISTER_OFFSET, save->crtc_control[2]);
216 +- WREG32(EVERGREEN_CRTC_CONTROL + EVERGREEN_CRTC3_REGISTER_OFFSET, save->crtc_control[3]);
217 +- }
218 +- if (rdev->num_crtc >= 6) {
219 +- WREG32(EVERGREEN_CRTC_CONTROL + EVERGREEN_CRTC4_REGISTER_OFFSET, save->crtc_control[4]);
220 +- WREG32(EVERGREEN_CRTC_CONTROL + EVERGREEN_CRTC5_REGISTER_OFFSET, save->crtc_control[5]);
221 +- }
222 +- WREG32(EVERGREEN_CRTC_UPDATE_LOCK + EVERGREEN_CRTC0_REGISTER_OFFSET, 0);
223 +- WREG32(EVERGREEN_CRTC_UPDATE_LOCK + EVERGREEN_CRTC1_REGISTER_OFFSET, 0);
224 +- if (rdev->num_crtc >= 4) {
225 +- WREG32(EVERGREEN_CRTC_UPDATE_LOCK + EVERGREEN_CRTC2_REGISTER_OFFSET, 0);
226 +- WREG32(EVERGREEN_CRTC_UPDATE_LOCK + EVERGREEN_CRTC3_REGISTER_OFFSET, 0);
227 +- }
228 +- if (rdev->num_crtc >= 6) {
229 +- WREG32(EVERGREEN_CRTC_UPDATE_LOCK + EVERGREEN_CRTC4_REGISTER_OFFSET, 0);
230 +- WREG32(EVERGREEN_CRTC_UPDATE_LOCK + EVERGREEN_CRTC5_REGISTER_OFFSET, 0);
231 +- }
232 + WREG32(VGA_RENDER_CONTROL, save->vga_render_control);
233 + }
234 +
235 +diff --git a/drivers/gpu/drm/radeon/radeon_asic.h b/drivers/gpu/drm/radeon/radeon_asic.h
236 +index 3dedaa0..4d81e96 100644
237 +--- a/drivers/gpu/drm/radeon/radeon_asic.h
238 ++++ b/drivers/gpu/drm/radeon/radeon_asic.h
239 +@@ -253,13 +253,10 @@ void rs690_line_buffer_adjust(struct radeon_device *rdev,
240 + * rv515
241 + */
242 + struct rv515_mc_save {
243 +- u32 d1vga_control;
244 +- u32 d2vga_control;
245 + u32 vga_render_control;
246 + u32 vga_hdp_control;
247 +- u32 d1crtc_control;
248 +- u32 d2crtc_control;
249 + };
250 ++
251 + int rv515_init(struct radeon_device *rdev);
252 + void rv515_fini(struct radeon_device *rdev);
253 + uint32_t rv515_mc_rreg(struct radeon_device *rdev, uint32_t reg);
254 +@@ -387,11 +384,10 @@ void r700_cp_fini(struct radeon_device *rdev);
255 + * evergreen
256 + */
257 + struct evergreen_mc_save {
258 +- u32 vga_control[6];
259 + u32 vga_render_control;
260 + u32 vga_hdp_control;
261 +- u32 crtc_control[6];
262 + };
263 ++
264 + void evergreen_pcie_gart_tlb_flush(struct radeon_device *rdev);
265 + int evergreen_init(struct radeon_device *rdev);
266 + void evergreen_fini(struct radeon_device *rdev);
267 +diff --git a/drivers/gpu/drm/radeon/rv515.c b/drivers/gpu/drm/radeon/rv515.c
268 +index 6613ee9..d5f45b4 100644
269 +--- a/drivers/gpu/drm/radeon/rv515.c
270 ++++ b/drivers/gpu/drm/radeon/rv515.c
271 +@@ -281,12 +281,8 @@ int rv515_debugfs_ga_info_init(struct radeon_device *rdev)
272 +
273 + void rv515_mc_stop(struct radeon_device *rdev, struct rv515_mc_save *save)
274 + {
275 +- save->d1vga_control = RREG32(R_000330_D1VGA_CONTROL);
276 +- save->d2vga_control = RREG32(R_000338_D2VGA_CONTROL);
277 + save->vga_render_control = RREG32(R_000300_VGA_RENDER_CONTROL);
278 + save->vga_hdp_control = RREG32(R_000328_VGA_HDP_CONTROL);
279 +- save->d1crtc_control = RREG32(R_006080_D1CRTC_CONTROL);
280 +- save->d2crtc_control = RREG32(R_006880_D2CRTC_CONTROL);
281 +
282 + /* Stop all video */
283 + WREG32(R_0068E8_D2CRTC_UPDATE_LOCK, 0);
284 +@@ -311,15 +307,6 @@ void rv515_mc_resume(struct radeon_device *rdev, struct rv515_mc_save *save)
285 + /* Unlock host access */
286 + WREG32(R_000328_VGA_HDP_CONTROL, save->vga_hdp_control);
287 + mdelay(1);
288 +- /* Restore video state */
289 +- WREG32(R_000330_D1VGA_CONTROL, save->d1vga_control);
290 +- WREG32(R_000338_D2VGA_CONTROL, save->d2vga_control);
291 +- WREG32(R_0060E8_D1CRTC_UPDATE_LOCK, 1);
292 +- WREG32(R_0068E8_D2CRTC_UPDATE_LOCK, 1);
293 +- WREG32(R_006080_D1CRTC_CONTROL, save->d1crtc_control);
294 +- WREG32(R_006880_D2CRTC_CONTROL, save->d2crtc_control);
295 +- WREG32(R_0060E8_D1CRTC_UPDATE_LOCK, 0);
296 +- WREG32(R_0068E8_D2CRTC_UPDATE_LOCK, 0);
297 + WREG32(R_000300_VGA_RENDER_CONTROL, save->vga_render_control);
298 + }
299 +
300 +diff --git a/drivers/infiniband/ulp/srp/ib_srp.c b/drivers/infiniband/ulp/srp/ib_srp.c
301 +index 7d5109b..e763e30 100644
302 +--- a/drivers/infiniband/ulp/srp/ib_srp.c
303 ++++ b/drivers/infiniband/ulp/srp/ib_srp.c
304 +@@ -568,24 +568,62 @@ static void srp_unmap_data(struct scsi_cmnd *scmnd,
305 + scmnd->sc_data_direction);
306 + }
307 +
308 +-static void srp_remove_req(struct srp_target_port *target,
309 +- struct srp_request *req, s32 req_lim_delta)
310 ++/**
311 ++ * srp_claim_req - Take ownership of the scmnd associated with a request.
312 ++ * @target: SRP target port.
313 ++ * @req: SRP request.
314 ++ * @scmnd: If NULL, take ownership of @req->scmnd. If not NULL, only take
315 ++ * ownership of @req->scmnd if it equals @scmnd.
316 ++ *
317 ++ * Return value:
318 ++ * Either NULL or a pointer to the SCSI command the caller became owner of.
319 ++ */
320 ++static struct scsi_cmnd *srp_claim_req(struct srp_target_port *target,
321 ++ struct srp_request *req,
322 ++ struct scsi_cmnd *scmnd)
323 + {
324 + unsigned long flags;
325 +
326 +- srp_unmap_data(req->scmnd, target, req);
327 ++ spin_lock_irqsave(&target->lock, flags);
328 ++ if (!scmnd) {
329 ++ scmnd = req->scmnd;
330 ++ req->scmnd = NULL;
331 ++ } else if (req->scmnd == scmnd) {
332 ++ req->scmnd = NULL;
333 ++ } else {
334 ++ scmnd = NULL;
335 ++ }
336 ++ spin_unlock_irqrestore(&target->lock, flags);
337 ++
338 ++ return scmnd;
339 ++}
340 ++
341 ++/**
342 ++ * srp_free_req() - Unmap data and add request to the free request list.
343 ++ */
344 ++static void srp_free_req(struct srp_target_port *target,
345 ++ struct srp_request *req, struct scsi_cmnd *scmnd,
346 ++ s32 req_lim_delta)
347 ++{
348 ++ unsigned long flags;
349 ++
350 ++ srp_unmap_data(scmnd, target, req);
351 ++
352 + spin_lock_irqsave(&target->lock, flags);
353 + target->req_lim += req_lim_delta;
354 +- req->scmnd = NULL;
355 + list_add_tail(&req->list, &target->free_reqs);
356 + spin_unlock_irqrestore(&target->lock, flags);
357 + }
358 +
359 + static void srp_reset_req(struct srp_target_port *target, struct srp_request *req)
360 + {
361 +- req->scmnd->result = DID_RESET << 16;
362 +- req->scmnd->scsi_done(req->scmnd);
363 +- srp_remove_req(target, req, 0);
364 ++ struct scsi_cmnd *scmnd = srp_claim_req(target, req, NULL);
365 ++
366 ++ if (scmnd) {
367 ++ scmnd->result = DID_RESET << 16;
368 ++ scmnd->scsi_done(scmnd);
369 ++ srp_free_req(target, req, scmnd, 0);
370 ++ }
371 + }
372 +
373 + static int srp_reconnect_target(struct srp_target_port *target)
374 +@@ -1055,11 +1093,18 @@ static void srp_process_rsp(struct srp_target_port *target, struct srp_rsp *rsp)
375 + complete(&target->tsk_mgmt_done);
376 + } else {
377 + req = &target->req_ring[rsp->tag];
378 +- scmnd = req->scmnd;
379 +- if (!scmnd)
380 ++ scmnd = srp_claim_req(target, req, NULL);
381 ++ if (!scmnd) {
382 + shost_printk(KERN_ERR, target->scsi_host,
383 + "Null scmnd for RSP w/tag %016llx\n",
384 + (unsigned long long) rsp->tag);
385 ++
386 ++ spin_lock_irqsave(&target->lock, flags);
387 ++ target->req_lim += be32_to_cpu(rsp->req_lim_delta);
388 ++ spin_unlock_irqrestore(&target->lock, flags);
389 ++
390 ++ return;
391 ++ }
392 + scmnd->result = rsp->status;
393 +
394 + if (rsp->flags & SRP_RSP_FLAG_SNSVALID) {
395 +@@ -1074,7 +1119,9 @@ static void srp_process_rsp(struct srp_target_port *target, struct srp_rsp *rsp)
396 + else if (rsp->flags & (SRP_RSP_FLAG_DIOVER | SRP_RSP_FLAG_DIUNDER))
397 + scsi_set_resid(scmnd, be32_to_cpu(rsp->data_in_res_cnt));
398 +
399 +- srp_remove_req(target, req, be32_to_cpu(rsp->req_lim_delta));
400 ++ srp_free_req(target, req, scmnd,
401 ++ be32_to_cpu(rsp->req_lim_delta));
402 ++
403 + scmnd->host_scribble = NULL;
404 + scmnd->scsi_done(scmnd);
405 + }
406 +@@ -1613,25 +1660,17 @@ static int srp_abort(struct scsi_cmnd *scmnd)
407 + {
408 + struct srp_target_port *target = host_to_target(scmnd->device->host);
409 + struct srp_request *req = (struct srp_request *) scmnd->host_scribble;
410 +- int ret = SUCCESS;
411 +
412 + shost_printk(KERN_ERR, target->scsi_host, "SRP abort called\n");
413 +
414 +- if (!req || target->qp_in_error)
415 +- return FAILED;
416 +- if (srp_send_tsk_mgmt(target, req->index, scmnd->device->lun,
417 +- SRP_TSK_ABORT_TASK))
418 ++ if (!req || target->qp_in_error || !srp_claim_req(target, req, scmnd))
419 + return FAILED;
420 ++ srp_send_tsk_mgmt(target, req->index, scmnd->device->lun,
421 ++ SRP_TSK_ABORT_TASK);
422 ++ srp_free_req(target, req, scmnd, 0);
423 ++ scmnd->result = DID_ABORT << 16;
424 +
425 +- if (req->scmnd) {
426 +- if (!target->tsk_mgmt_status) {
427 +- srp_remove_req(target, req, 0);
428 +- scmnd->result = DID_ABORT << 16;
429 +- } else
430 +- ret = FAILED;
431 +- }
432 +-
433 +- return ret;
434 ++ return SUCCESS;
435 + }
436 +
437 + static int srp_reset_device(struct scsi_cmnd *scmnd)
438 +diff --git a/drivers/net/wireless/rt2x00/rt2800usb.c b/drivers/net/wireless/rt2x00/rt2800usb.c
439 +index 0781fb0..39ebf9f 100644
440 +--- a/drivers/net/wireless/rt2x00/rt2800usb.c
441 ++++ b/drivers/net/wireless/rt2x00/rt2800usb.c
442 +@@ -829,6 +829,7 @@ static struct usb_device_id rt2800usb_device_table[] = {
443 + { USB_DEVICE(0x0411, 0x015d) },
444 + { USB_DEVICE(0x0411, 0x016f) },
445 + { USB_DEVICE(0x0411, 0x01a2) },
446 ++ { USB_DEVICE(0x0411, 0x01ee) },
447 + /* Corega */
448 + { USB_DEVICE(0x07aa, 0x002f) },
449 + { USB_DEVICE(0x07aa, 0x003c) },
450 +diff --git a/drivers/usb/host/pci-quirks.c b/drivers/usb/host/pci-quirks.c
451 +index 9ab094c..efba0188 100644
452 +--- a/drivers/usb/host/pci-quirks.c
453 ++++ b/drivers/usb/host/pci-quirks.c
454 +@@ -798,6 +798,13 @@ void usb_enable_xhci_ports(struct pci_dev *xhci_pdev)
455 + }
456 + EXPORT_SYMBOL_GPL(usb_enable_xhci_ports);
457 +
458 ++void usb_disable_xhci_ports(struct pci_dev *xhci_pdev)
459 ++{
460 ++ pci_write_config_dword(xhci_pdev, USB_INTEL_USB3_PSSEN, 0x0);
461 ++ pci_write_config_dword(xhci_pdev, USB_INTEL_XUSB2PR, 0x0);
462 ++}
463 ++EXPORT_SYMBOL_GPL(usb_disable_xhci_ports);
464 ++
465 + /**
466 + * PCI Quirks for xHCI.
467 + *
468 +diff --git a/drivers/usb/host/pci-quirks.h b/drivers/usb/host/pci-quirks.h
469 +index b1002a8..ef004a5 100644
470 +--- a/drivers/usb/host/pci-quirks.h
471 ++++ b/drivers/usb/host/pci-quirks.h
472 +@@ -10,6 +10,7 @@ void usb_amd_quirk_pll_disable(void);
473 + void usb_amd_quirk_pll_enable(void);
474 + bool usb_is_intel_switchable_xhci(struct pci_dev *pdev);
475 + void usb_enable_xhci_ports(struct pci_dev *xhci_pdev);
476 ++void usb_disable_xhci_ports(struct pci_dev *xhci_pdev);
477 + #else
478 + static inline void usb_amd_quirk_pll_disable(void) {}
479 + static inline void usb_amd_quirk_pll_enable(void) {}
480 +diff --git a/drivers/usb/host/xhci-pci.c b/drivers/usb/host/xhci-pci.c
481 +index 39e230f..b047458 100644
482 +--- a/drivers/usb/host/xhci-pci.c
483 ++++ b/drivers/usb/host/xhci-pci.c
484 +@@ -140,11 +140,21 @@ static int xhci_pci_setup(struct usb_hcd *hcd)
485 + xhci->quirks |= XHCI_SPURIOUS_SUCCESS;
486 + xhci->quirks |= XHCI_EP_LIMIT_QUIRK;
487 + xhci->limit_active_eps = 64;
488 ++ /*
489 ++ * PPT desktop boards DH77EB and DH77DF will power back on after
490 ++ * a few seconds of being shutdown. The fix for this is to
491 ++ * switch the ports from xHCI to EHCI on shutdown. We can't use
492 ++ * DMI information to find those particular boards (since each
493 ++ * vendor will change the board name), so we have to key off all
494 ++ * PPT chipsets.
495 ++ */
496 ++ xhci->quirks |= XHCI_SPURIOUS_REBOOT;
497 + }
498 + if (pdev->vendor == PCI_VENDOR_ID_ETRON &&
499 + pdev->device == PCI_DEVICE_ID_ASROCK_P67) {
500 + xhci->quirks |= XHCI_RESET_ON_RESUME;
501 + xhci_dbg(xhci, "QUIRK: Resetting on resume\n");
502 ++ xhci->quirks |= XHCI_TRUST_TX_LENGTH;
503 + }
504 + if (pdev->vendor == PCI_VENDOR_ID_VIA)
505 + xhci->quirks |= XHCI_RESET_ON_RESUME;
506 +diff --git a/drivers/usb/host/xhci.c b/drivers/usb/host/xhci.c
507 +index 16ec4d3..1f9602a 100644
508 +--- a/drivers/usb/host/xhci.c
509 ++++ b/drivers/usb/host/xhci.c
510 +@@ -163,7 +163,7 @@ int xhci_reset(struct xhci_hcd *xhci)
511 + xhci_writel(xhci, command, &xhci->op_regs->command);
512 +
513 + ret = handshake(xhci, &xhci->op_regs->command,
514 +- CMD_RESET, 0, 250 * 1000);
515 ++ CMD_RESET, 0, 10 * 1000 * 1000);
516 + if (ret)
517 + return ret;
518 +
519 +@@ -172,7 +172,8 @@ int xhci_reset(struct xhci_hcd *xhci)
520 + * xHCI cannot write to any doorbells or operational registers other
521 + * than status until the "Controller Not Ready" flag is cleared.
522 + */
523 +- return handshake(xhci, &xhci->op_regs->status, STS_CNR, 0, 250 * 1000);
524 ++ return handshake(xhci, &xhci->op_regs->status,
525 ++ STS_CNR, 0, 10 * 1000 * 1000);
526 + }
527 +
528 + /*
529 +@@ -593,6 +594,9 @@ void xhci_shutdown(struct usb_hcd *hcd)
530 + {
531 + struct xhci_hcd *xhci = hcd_to_xhci(hcd);
532 +
533 ++ if (xhci->quirks && XHCI_SPURIOUS_REBOOT)
534 ++ usb_disable_xhci_ports(to_pci_dev(hcd->self.controller));
535 ++
536 + spin_lock_irq(&xhci->lock);
537 + xhci_halt(xhci);
538 + spin_unlock_irq(&xhci->lock);
539 +diff --git a/drivers/usb/host/xhci.h b/drivers/usb/host/xhci.h
540 +index 25c3e26..d88644d 100644
541 +--- a/drivers/usb/host/xhci.h
542 ++++ b/drivers/usb/host/xhci.h
543 +@@ -1316,6 +1316,7 @@ struct xhci_hcd {
544 + #define XHCI_RESET_ON_RESUME (1 << 7)
545 + #define XHCI_AMD_0x96_HOST (1 << 9)
546 + #define XHCI_TRUST_TX_LENGTH (1 << 10)
547 ++#define XHCI_SPURIOUS_REBOOT (1 << 13)
548 + unsigned int num_active_eps;
549 + unsigned int limit_active_eps;
550 + /* There are two roothubs to keep track of bus suspend info for */
551 +diff --git a/drivers/usb/serial/ftdi_sio.c b/drivers/usb/serial/ftdi_sio.c
552 +index 86fc8fc..535a307 100644
553 +--- a/drivers/usb/serial/ftdi_sio.c
554 ++++ b/drivers/usb/serial/ftdi_sio.c
555 +@@ -809,6 +809,7 @@ static struct usb_device_id id_table_combined [] = {
556 + { USB_DEVICE(LARSENBRUSGAARD_VID, LB_ALTITRACK_PID) },
557 + { USB_DEVICE(GN_OTOMETRICS_VID, AURICAL_USB_PID) },
558 + { USB_DEVICE(PI_VID, PI_E861_PID) },
559 ++ { USB_DEVICE(KONDO_VID, KONDO_USB_SERIAL_PID) },
560 + { USB_DEVICE(BAYER_VID, BAYER_CONTOUR_CABLE_PID) },
561 + { USB_DEVICE(FTDI_VID, MARVELL_OPENRD_PID),
562 + .driver_info = (kernel_ulong_t)&ftdi_jtag_quirk },
563 +diff --git a/drivers/usb/serial/ftdi_sio_ids.h b/drivers/usb/serial/ftdi_sio_ids.h
564 +index d27d7d7..54b4258 100644
565 +--- a/drivers/usb/serial/ftdi_sio_ids.h
566 ++++ b/drivers/usb/serial/ftdi_sio_ids.h
567 +@@ -795,6 +795,13 @@
568 + #define PI_E861_PID 0x1008 /* E-861 piezo controller USB connection */
569 +
570 + /*
571 ++ * Kondo Kagaku Co.Ltd.
572 ++ * http://www.kondo-robot.com/EN
573 ++ */
574 ++#define KONDO_VID 0x165c
575 ++#define KONDO_USB_SERIAL_PID 0x0002
576 ++
577 ++/*
578 + * Bayer Ascensia Contour blood glucose meter USB-converter cable.
579 + * http://winglucofacts.com/cables/
580 + */
581 +diff --git a/drivers/usb/serial/mos7840.c b/drivers/usb/serial/mos7840.c
582 +index fdbeb6a..fd2463e 100644
583 +--- a/drivers/usb/serial/mos7840.c
584 ++++ b/drivers/usb/serial/mos7840.c
585 +@@ -1191,9 +1191,12 @@ static int mos7840_chars_in_buffer(struct tty_struct *tty)
586 + }
587 +
588 + spin_lock_irqsave(&mos7840_port->pool_lock, flags);
589 +- for (i = 0; i < NUM_URBS; ++i)
590 +- if (mos7840_port->busy[i])
591 +- chars += URB_TRANSFER_BUFFER_SIZE;
592 ++ for (i = 0; i < NUM_URBS; ++i) {
593 ++ if (mos7840_port->busy[i]) {
594 ++ struct urb *urb = mos7840_port->write_urb_pool[i];
595 ++ chars += urb->transfer_buffer_length;
596 ++ }
597 ++ }
598 + spin_unlock_irqrestore(&mos7840_port->pool_lock, flags);
599 + dbg("%s - returns %d", __func__, chars);
600 + return chars;
601 +diff --git a/drivers/usb/serial/option.c b/drivers/usb/serial/option.c
602 +index d232623..d8851d0 100644
603 +--- a/drivers/usb/serial/option.c
604 ++++ b/drivers/usb/serial/option.c
605 +@@ -80,85 +80,9 @@ static void option_instat_callback(struct urb *urb);
606 + #define OPTION_PRODUCT_GTM380_MODEM 0x7201
607 +
608 + #define HUAWEI_VENDOR_ID 0x12D1
609 +-#define HUAWEI_PRODUCT_E600 0x1001
610 +-#define HUAWEI_PRODUCT_E220 0x1003
611 +-#define HUAWEI_PRODUCT_E220BIS 0x1004
612 +-#define HUAWEI_PRODUCT_E1401 0x1401
613 +-#define HUAWEI_PRODUCT_E1402 0x1402
614 +-#define HUAWEI_PRODUCT_E1403 0x1403
615 +-#define HUAWEI_PRODUCT_E1404 0x1404
616 +-#define HUAWEI_PRODUCT_E1405 0x1405
617 +-#define HUAWEI_PRODUCT_E1406 0x1406
618 +-#define HUAWEI_PRODUCT_E1407 0x1407
619 +-#define HUAWEI_PRODUCT_E1408 0x1408
620 +-#define HUAWEI_PRODUCT_E1409 0x1409
621 +-#define HUAWEI_PRODUCT_E140A 0x140A
622 +-#define HUAWEI_PRODUCT_E140B 0x140B
623 +-#define HUAWEI_PRODUCT_E140C 0x140C
624 +-#define HUAWEI_PRODUCT_E140D 0x140D
625 +-#define HUAWEI_PRODUCT_E140E 0x140E
626 +-#define HUAWEI_PRODUCT_E140F 0x140F
627 +-#define HUAWEI_PRODUCT_E1410 0x1410
628 +-#define HUAWEI_PRODUCT_E1411 0x1411
629 +-#define HUAWEI_PRODUCT_E1412 0x1412
630 +-#define HUAWEI_PRODUCT_E1413 0x1413
631 +-#define HUAWEI_PRODUCT_E1414 0x1414
632 +-#define HUAWEI_PRODUCT_E1415 0x1415
633 +-#define HUAWEI_PRODUCT_E1416 0x1416
634 +-#define HUAWEI_PRODUCT_E1417 0x1417
635 +-#define HUAWEI_PRODUCT_E1418 0x1418
636 +-#define HUAWEI_PRODUCT_E1419 0x1419
637 +-#define HUAWEI_PRODUCT_E141A 0x141A
638 +-#define HUAWEI_PRODUCT_E141B 0x141B
639 +-#define HUAWEI_PRODUCT_E141C 0x141C
640 +-#define HUAWEI_PRODUCT_E141D 0x141D
641 +-#define HUAWEI_PRODUCT_E141E 0x141E
642 +-#define HUAWEI_PRODUCT_E141F 0x141F
643 +-#define HUAWEI_PRODUCT_E1420 0x1420
644 +-#define HUAWEI_PRODUCT_E1421 0x1421
645 +-#define HUAWEI_PRODUCT_E1422 0x1422
646 +-#define HUAWEI_PRODUCT_E1423 0x1423
647 +-#define HUAWEI_PRODUCT_E1424 0x1424
648 +-#define HUAWEI_PRODUCT_E1425 0x1425
649 +-#define HUAWEI_PRODUCT_E1426 0x1426
650 +-#define HUAWEI_PRODUCT_E1427 0x1427
651 +-#define HUAWEI_PRODUCT_E1428 0x1428
652 +-#define HUAWEI_PRODUCT_E1429 0x1429
653 +-#define HUAWEI_PRODUCT_E142A 0x142A
654 +-#define HUAWEI_PRODUCT_E142B 0x142B
655 +-#define HUAWEI_PRODUCT_E142C 0x142C
656 +-#define HUAWEI_PRODUCT_E142D 0x142D
657 +-#define HUAWEI_PRODUCT_E142E 0x142E
658 +-#define HUAWEI_PRODUCT_E142F 0x142F
659 +-#define HUAWEI_PRODUCT_E1430 0x1430
660 +-#define HUAWEI_PRODUCT_E1431 0x1431
661 +-#define HUAWEI_PRODUCT_E1432 0x1432
662 +-#define HUAWEI_PRODUCT_E1433 0x1433
663 +-#define HUAWEI_PRODUCT_E1434 0x1434
664 +-#define HUAWEI_PRODUCT_E1435 0x1435
665 +-#define HUAWEI_PRODUCT_E1436 0x1436
666 +-#define HUAWEI_PRODUCT_E1437 0x1437
667 +-#define HUAWEI_PRODUCT_E1438 0x1438
668 +-#define HUAWEI_PRODUCT_E1439 0x1439
669 +-#define HUAWEI_PRODUCT_E143A 0x143A
670 +-#define HUAWEI_PRODUCT_E143B 0x143B
671 +-#define HUAWEI_PRODUCT_E143C 0x143C
672 +-#define HUAWEI_PRODUCT_E143D 0x143D
673 +-#define HUAWEI_PRODUCT_E143E 0x143E
674 +-#define HUAWEI_PRODUCT_E143F 0x143F
675 + #define HUAWEI_PRODUCT_K4505 0x1464
676 + #define HUAWEI_PRODUCT_K3765 0x1465
677 +-#define HUAWEI_PRODUCT_E14AC 0x14AC
678 +-#define HUAWEI_PRODUCT_K3806 0x14AE
679 + #define HUAWEI_PRODUCT_K4605 0x14C6
680 +-#define HUAWEI_PRODUCT_K5005 0x14C8
681 +-#define HUAWEI_PRODUCT_K3770 0x14C9
682 +-#define HUAWEI_PRODUCT_K3771 0x14CA
683 +-#define HUAWEI_PRODUCT_K4510 0x14CB
684 +-#define HUAWEI_PRODUCT_K4511 0x14CC
685 +-#define HUAWEI_PRODUCT_ETS1220 0x1803
686 +-#define HUAWEI_PRODUCT_E353 0x1506
687 +-#define HUAWEI_PRODUCT_E173S 0x1C05
688 +
689 + #define QUANTA_VENDOR_ID 0x0408
690 + #define QUANTA_PRODUCT_Q101 0xEA02
691 +@@ -615,104 +539,123 @@ static const struct usb_device_id option_ids[] = {
692 + { USB_DEVICE(QUANTA_VENDOR_ID, QUANTA_PRODUCT_GLX) },
693 + { USB_DEVICE(QUANTA_VENDOR_ID, QUANTA_PRODUCT_GKE) },
694 + { USB_DEVICE(QUANTA_VENDOR_ID, QUANTA_PRODUCT_GLE) },
695 +- { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E600, 0xff, 0xff, 0xff) },
696 +- { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E220, 0xff, 0xff, 0xff) },
697 +- { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E220BIS, 0xff, 0xff, 0xff) },
698 +- { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1401, 0xff, 0xff, 0xff) },
699 +- { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1402, 0xff, 0xff, 0xff) },
700 +- { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1403, 0xff, 0xff, 0xff) },
701 +- { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1404, 0xff, 0xff, 0xff) },
702 +- { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1405, 0xff, 0xff, 0xff) },
703 +- { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1406, 0xff, 0xff, 0xff) },
704 +- { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1407, 0xff, 0xff, 0xff) },
705 +- { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1408, 0xff, 0xff, 0xff) },
706 +- { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1409, 0xff, 0xff, 0xff) },
707 +- { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E140A, 0xff, 0xff, 0xff) },
708 +- { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E140B, 0xff, 0xff, 0xff) },
709 +- { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E140C, 0xff, 0xff, 0xff) },
710 +- { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E140D, 0xff, 0xff, 0xff) },
711 +- { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E140E, 0xff, 0xff, 0xff) },
712 +- { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E140F, 0xff, 0xff, 0xff) },
713 +- { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1410, 0xff, 0xff, 0xff) },
714 +- { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1411, 0xff, 0xff, 0xff) },
715 +- { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1412, 0xff, 0xff, 0xff) },
716 +- { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1413, 0xff, 0xff, 0xff) },
717 +- { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1414, 0xff, 0xff, 0xff) },
718 +- { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1415, 0xff, 0xff, 0xff) },
719 +- { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1416, 0xff, 0xff, 0xff) },
720 +- { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1417, 0xff, 0xff, 0xff) },
721 +- { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1418, 0xff, 0xff, 0xff) },
722 +- { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1419, 0xff, 0xff, 0xff) },
723 +- { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E141A, 0xff, 0xff, 0xff) },
724 +- { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E141B, 0xff, 0xff, 0xff) },
725 +- { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E141C, 0xff, 0xff, 0xff) },
726 +- { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E141D, 0xff, 0xff, 0xff) },
727 +- { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E141E, 0xff, 0xff, 0xff) },
728 +- { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E141F, 0xff, 0xff, 0xff) },
729 +- { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1420, 0xff, 0xff, 0xff) },
730 +- { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1421, 0xff, 0xff, 0xff) },
731 +- { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1422, 0xff, 0xff, 0xff) },
732 +- { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1423, 0xff, 0xff, 0xff) },
733 +- { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1424, 0xff, 0xff, 0xff) },
734 +- { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1425, 0xff, 0xff, 0xff) },
735 +- { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1426, 0xff, 0xff, 0xff) },
736 +- { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1427, 0xff, 0xff, 0xff) },
737 +- { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1428, 0xff, 0xff, 0xff) },
738 +- { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1429, 0xff, 0xff, 0xff) },
739 +- { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E142A, 0xff, 0xff, 0xff) },
740 +- { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E142B, 0xff, 0xff, 0xff) },
741 +- { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E142C, 0xff, 0xff, 0xff) },
742 +- { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E142D, 0xff, 0xff, 0xff) },
743 +- { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E142E, 0xff, 0xff, 0xff) },
744 +- { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E142F, 0xff, 0xff, 0xff) },
745 +- { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1430, 0xff, 0xff, 0xff) },
746 +- { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1431, 0xff, 0xff, 0xff) },
747 +- { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1432, 0xff, 0xff, 0xff) },
748 +- { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1433, 0xff, 0xff, 0xff) },
749 +- { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1434, 0xff, 0xff, 0xff) },
750 +- { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1435, 0xff, 0xff, 0xff) },
751 +- { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1436, 0xff, 0xff, 0xff) },
752 +- { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1437, 0xff, 0xff, 0xff) },
753 +- { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1438, 0xff, 0xff, 0xff) },
754 +- { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1439, 0xff, 0xff, 0xff) },
755 +- { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E143A, 0xff, 0xff, 0xff) },
756 +- { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E143B, 0xff, 0xff, 0xff) },
757 +- { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E143C, 0xff, 0xff, 0xff) },
758 +- { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E143D, 0xff, 0xff, 0xff) },
759 +- { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E143E, 0xff, 0xff, 0xff) },
760 +- { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E143F, 0xff, 0xff, 0xff) },
761 +- { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E173S, 0xff, 0xff, 0xff) },
762 + { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_K4505, 0xff, 0xff, 0xff),
763 + .driver_info = (kernel_ulong_t) &huawei_cdc12_blacklist },
764 + { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_K3765, 0xff, 0xff, 0xff),
765 + .driver_info = (kernel_ulong_t) &huawei_cdc12_blacklist },
766 +- { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_ETS1220, 0xff, 0xff, 0xff) },
767 +- { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E14AC, 0xff, 0xff, 0xff) },
768 +- { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_K3806, 0xff, 0xff, 0xff) },
769 + { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_K4605, 0xff, 0xff, 0xff),
770 + .driver_info = (kernel_ulong_t) &huawei_cdc12_blacklist },
771 +- { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_K4605, 0xff, 0x01, 0x31) },
772 +- { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_K4605, 0xff, 0x01, 0x32) },
773 +- { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_K5005, 0xff, 0x01, 0x31) },
774 +- { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_K5005, 0xff, 0x01, 0x32) },
775 +- { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_K5005, 0xff, 0x01, 0x33) },
776 +- { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_K3770, 0xff, 0x02, 0x31) },
777 +- { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_K3770, 0xff, 0x02, 0x32) },
778 +- { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_K3771, 0xff, 0x02, 0x31) },
779 +- { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_K3771, 0xff, 0x02, 0x32) },
780 +- { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_K4510, 0xff, 0x01, 0x31) },
781 +- { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_K4510, 0xff, 0x01, 0x32) },
782 +- { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_K4511, 0xff, 0x01, 0x31) },
783 +- { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_K4511, 0xff, 0x01, 0x32) },
784 +- { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E353, 0xff, 0x01, 0x01) },
785 +- { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E353, 0xff, 0x01, 0x02) },
786 +- { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E353, 0xff, 0x01, 0x03) },
787 +- { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E353, 0xff, 0x01, 0x10) },
788 +- { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E353, 0xff, 0x01, 0x12) },
789 +- { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E353, 0xff, 0x01, 0x13) },
790 +- { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E353, 0xff, 0x02, 0x01) }, /* E398 3G Modem */
791 +- { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E353, 0xff, 0x02, 0x02) }, /* E398 3G PC UI Interface */
792 +- { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E353, 0xff, 0x02, 0x03) }, /* E398 3G Application Interface */
793 ++ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0xff, 0xff) },
794 ++ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x01, 0x01) },
795 ++ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x01, 0x02) },
796 ++ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x01, 0x03) },
797 ++ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x01, 0x04) },
798 ++ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x01, 0x05) },
799 ++ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x01, 0x06) },
800 ++ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x01, 0x0A) },
801 ++ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x01, 0x0B) },
802 ++ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x01, 0x0D) },
803 ++ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x01, 0x0E) },
804 ++ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x01, 0x0F) },
805 ++ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x01, 0x10) },
806 ++ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x01, 0x12) },
807 ++ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x01, 0x13) },
808 ++ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x01, 0x14) },
809 ++ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x01, 0x15) },
810 ++ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x01, 0x17) },
811 ++ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x01, 0x18) },
812 ++ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x01, 0x19) },
813 ++ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x01, 0x1A) },
814 ++ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x01, 0x1B) },
815 ++ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x01, 0x1C) },
816 ++ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x01, 0x31) },
817 ++ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x01, 0x32) },
818 ++ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x01, 0x33) },
819 ++ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x01, 0x34) },
820 ++ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x01, 0x35) },
821 ++ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x01, 0x36) },
822 ++ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x01, 0x3A) },
823 ++ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x01, 0x3B) },
824 ++ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x01, 0x3D) },
825 ++ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x01, 0x3E) },
826 ++ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x01, 0x3F) },
827 ++ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x01, 0x48) },
828 ++ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x01, 0x49) },
829 ++ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x01, 0x4A) },
830 ++ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x01, 0x4B) },
831 ++ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x01, 0x4C) },
832 ++ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x01, 0x61) },
833 ++ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x01, 0x62) },
834 ++ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x01, 0x63) },
835 ++ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x01, 0x64) },
836 ++ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x01, 0x65) },
837 ++ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x01, 0x66) },
838 ++ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x01, 0x6A) },
839 ++ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x01, 0x6B) },
840 ++ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x01, 0x6D) },
841 ++ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x01, 0x6E) },
842 ++ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x01, 0x6F) },
843 ++ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x01, 0x78) },
844 ++ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x01, 0x79) },
845 ++ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x01, 0x7A) },
846 ++ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x01, 0x7B) },
847 ++ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x01, 0x7C) },
848 ++ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x02, 0x01) },
849 ++ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x02, 0x02) },
850 ++ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x02, 0x03) },
851 ++ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x02, 0x04) },
852 ++ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x02, 0x05) },
853 ++ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x02, 0x06) },
854 ++ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x02, 0x0A) },
855 ++ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x02, 0x0B) },
856 ++ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x02, 0x0D) },
857 ++ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x02, 0x0E) },
858 ++ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x02, 0x0F) },
859 ++ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x02, 0x10) },
860 ++ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x02, 0x12) },
861 ++ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x02, 0x13) },
862 ++ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x02, 0x14) },
863 ++ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x02, 0x15) },
864 ++ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x02, 0x17) },
865 ++ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x02, 0x18) },
866 ++ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x02, 0x19) },
867 ++ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x02, 0x1A) },
868 ++ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x02, 0x1B) },
869 ++ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x02, 0x1C) },
870 ++ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x02, 0x31) },
871 ++ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x02, 0x32) },
872 ++ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x02, 0x33) },
873 ++ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x02, 0x34) },
874 ++ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x02, 0x35) },
875 ++ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x02, 0x36) },
876 ++ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x02, 0x3A) },
877 ++ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x02, 0x3B) },
878 ++ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x02, 0x3D) },
879 ++ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x02, 0x3E) },
880 ++ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x02, 0x3F) },
881 ++ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x02, 0x48) },
882 ++ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x02, 0x49) },
883 ++ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x02, 0x4A) },
884 ++ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x02, 0x4B) },
885 ++ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x02, 0x4C) },
886 ++ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x02, 0x61) },
887 ++ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x02, 0x62) },
888 ++ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x02, 0x63) },
889 ++ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x02, 0x64) },
890 ++ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x02, 0x65) },
891 ++ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x02, 0x66) },
892 ++ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x02, 0x6A) },
893 ++ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x02, 0x6B) },
894 ++ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x02, 0x6D) },
895 ++ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x02, 0x6E) },
896 ++ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x02, 0x6F) },
897 ++ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x02, 0x78) },
898 ++ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x02, 0x79) },
899 ++ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x02, 0x7A) },
900 ++ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x02, 0x7B) },
901 ++ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x02, 0x7C) },
902 ++
903 ++
904 + { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_V640) },
905 + { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_V620) },
906 + { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_V740) },
907 +@@ -939,6 +882,8 @@ static const struct usb_device_id option_ids[] = {
908 + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1008, 0xff, 0xff, 0xff) },
909 + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1010, 0xff, 0xff, 0xff) },
910 + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1012, 0xff, 0xff, 0xff) },
911 ++ { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1018, 0xff, 0xff, 0xff),
912 ++ .driver_info = (kernel_ulong_t)&net_intf3_blacklist },
913 + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1057, 0xff, 0xff, 0xff) },
914 + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1058, 0xff, 0xff, 0xff) },
915 + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1059, 0xff, 0xff, 0xff) },
916 +diff --git a/fs/ext4/super.c b/fs/ext4/super.c
917 +index 113b107..489d406 100644
918 +--- a/fs/ext4/super.c
919 ++++ b/fs/ext4/super.c
920 +@@ -860,6 +860,7 @@ static struct inode *ext4_alloc_inode(struct super_block *sb)
921 + ei->i_reserved_meta_blocks = 0;
922 + ei->i_allocated_meta_blocks = 0;
923 + ei->i_da_metadata_calc_len = 0;
924 ++ ei->i_da_metadata_calc_last_lblock = 0;
925 + spin_lock_init(&(ei->i_block_reservation_lock));
926 + #ifdef CONFIG_QUOTA
927 + ei->i_reserved_quota = 0;
928 +diff --git a/fs/fuse/file.c b/fs/fuse/file.c
929 +index 82a6646..79fca8d 100644
930 +--- a/fs/fuse/file.c
931 ++++ b/fs/fuse/file.c
932 +@@ -1710,7 +1710,7 @@ static int fuse_verify_ioctl_iov(struct iovec *iov, size_t count)
933 + size_t n;
934 + u32 max = FUSE_MAX_PAGES_PER_REQ << PAGE_SHIFT;
935 +
936 +- for (n = 0; n < count; n++) {
937 ++ for (n = 0; n < count; n++, iov++) {
938 + if (iov->iov_len > (size_t) max)
939 + return -ENOMEM;
940 + max -= iov->iov_len;
941 +diff --git a/include/linux/usb.h b/include/linux/usb.h
942 +index b08e04c..6cd1576 100644
943 +--- a/include/linux/usb.h
944 ++++ b/include/linux/usb.h
945 +@@ -757,6 +757,27 @@ static inline int usb_make_path(struct usb_device *dev, char *buf, size_t size)
946 + .bInterfaceSubClass = (sc), \
947 + .bInterfaceProtocol = (pr)
948 +
949 ++/**
950 ++ * USB_VENDOR_AND_INTERFACE_INFO - describe a specific usb vendor with a class of usb interfaces
951 ++ * @vend: the 16 bit USB Vendor ID
952 ++ * @cl: bInterfaceClass value
953 ++ * @sc: bInterfaceSubClass value
954 ++ * @pr: bInterfaceProtocol value
955 ++ *
956 ++ * This macro is used to create a struct usb_device_id that matches a
957 ++ * specific vendor with a specific class of interfaces.
958 ++ *
959 ++ * This is especially useful when explicitly matching devices that have
960 ++ * vendor specific bDeviceClass values, but standards-compliant interfaces.
961 ++ */
962 ++#define USB_VENDOR_AND_INTERFACE_INFO(vend, cl, sc, pr) \
963 ++ .match_flags = USB_DEVICE_ID_MATCH_INT_INFO \
964 ++ | USB_DEVICE_ID_MATCH_VENDOR, \
965 ++ .idVendor = (vend), \
966 ++ .bInterfaceClass = (cl), \
967 ++ .bInterfaceSubClass = (sc), \
968 ++ .bInterfaceProtocol = (pr)
969 ++
970 + /* ----------------------------------------------------------------------- */
971 +
972 + /* Stuff for dynamic usb ids */