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 */ |