1 |
commit: 0b50229c6cfa46b016839ffc0fe426f6a06ce213 |
2 |
Author: Mike Pagano <mpagano <AT> gentoo <DOT> org> |
3 |
AuthorDate: Mon Sep 21 17:23:36 2015 +0000 |
4 |
Commit: Mike Pagano <mpagano <AT> gentoo <DOT> org> |
5 |
CommitDate: Mon Sep 21 17:23:36 2015 +0000 |
6 |
URL: https://gitweb.gentoo.org/proj/linux-patches.git/commit/?id=0b50229c |
7 |
|
8 |
Linux patch 3.10.89 |
9 |
|
10 |
0000_README | 4 + |
11 |
1088_linux-3.10.89.patch | 661 +++++++++++++++++++++++++++++++++++++++++++++++ |
12 |
2 files changed, 665 insertions(+) |
13 |
|
14 |
diff --git a/0000_README b/0000_README |
15 |
index ad2e99c..2d39ba5 100644 |
16 |
--- a/0000_README |
17 |
+++ b/0000_README |
18 |
@@ -394,6 +394,10 @@ Patch: 1087_linux-3.10.88.patch |
19 |
From: http://www.kernel.org |
20 |
Desc: Linux 3.10.88 |
21 |
|
22 |
+Patch: 1088_linux-3.10.89.patch |
23 |
+From: http://www.kernel.org |
24 |
+Desc: Linux 3.10.89 |
25 |
+ |
26 |
Patch: 1500_XATTR_USER_PREFIX.patch |
27 |
From: https://bugs.gentoo.org/show_bug.cgi?id=470644 |
28 |
Desc: Support for namespace user.pax.* on tmpfs. |
29 |
|
30 |
diff --git a/1088_linux-3.10.89.patch b/1088_linux-3.10.89.patch |
31 |
new file mode 100644 |
32 |
index 0000000..cb2dc79 |
33 |
--- /dev/null |
34 |
+++ b/1088_linux-3.10.89.patch |
35 |
@@ -0,0 +1,661 @@ |
36 |
+diff --git a/Makefile b/Makefile |
37 |
+index e94ce68ecf87..ca82393e1eea 100644 |
38 |
+--- a/Makefile |
39 |
++++ b/Makefile |
40 |
+@@ -1,6 +1,6 @@ |
41 |
+ VERSION = 3 |
42 |
+ PATCHLEVEL = 10 |
43 |
+-SUBLEVEL = 88 |
44 |
++SUBLEVEL = 89 |
45 |
+ EXTRAVERSION = |
46 |
+ NAME = TOSSUG Baby Fish |
47 |
+ |
48 |
+diff --git a/arch/x86/crypto/ghash-clmulni-intel_glue.c b/arch/x86/crypto/ghash-clmulni-intel_glue.c |
49 |
+index a8d6f69f92a3..4bcf841e4701 100644 |
50 |
+--- a/arch/x86/crypto/ghash-clmulni-intel_glue.c |
51 |
++++ b/arch/x86/crypto/ghash-clmulni-intel_glue.c |
52 |
+@@ -291,6 +291,7 @@ static struct ahash_alg ghash_async_alg = { |
53 |
+ .cra_name = "ghash", |
54 |
+ .cra_driver_name = "ghash-clmulni", |
55 |
+ .cra_priority = 400, |
56 |
++ .cra_ctxsize = sizeof(struct ghash_async_ctx), |
57 |
+ .cra_flags = CRYPTO_ALG_TYPE_AHASH | CRYPTO_ALG_ASYNC, |
58 |
+ .cra_blocksize = GHASH_BLOCK_SIZE, |
59 |
+ .cra_type = &crypto_ahash_type, |
60 |
+diff --git a/arch/xtensa/Makefile b/arch/xtensa/Makefile |
61 |
+index 136224b74d4f..81250ece3062 100644 |
62 |
+--- a/arch/xtensa/Makefile |
63 |
++++ b/arch/xtensa/Makefile |
64 |
+@@ -55,10 +55,10 @@ ifneq ($(CONFIG_LD_NO_RELAX),) |
65 |
+ LDFLAGS := --no-relax |
66 |
+ endif |
67 |
+ |
68 |
+-ifeq ($(shell echo -e __XTENSA_EB__ | $(CC) -E - | grep -v "\#"),1) |
69 |
++ifeq ($(shell echo __XTENSA_EB__ | $(CC) -E - | grep -v "\#"),1) |
70 |
+ CHECKFLAGS += -D__XTENSA_EB__ |
71 |
+ endif |
72 |
+-ifeq ($(shell echo -e __XTENSA_EL__ | $(CC) -E - | grep -v "\#"),1) |
73 |
++ifeq ($(shell echo __XTENSA_EL__ | $(CC) -E - | grep -v "\#"),1) |
74 |
+ CHECKFLAGS += -D__XTENSA_EL__ |
75 |
+ endif |
76 |
+ |
77 |
+diff --git a/arch/xtensa/boot/Makefile b/arch/xtensa/boot/Makefile |
78 |
+index 64ffc4b53df6..ca20a892021b 100644 |
79 |
+--- a/arch/xtensa/boot/Makefile |
80 |
++++ b/arch/xtensa/boot/Makefile |
81 |
+@@ -12,7 +12,7 @@ |
82 |
+ KBUILD_CFLAGS += -fno-builtin -Iarch/$(ARCH)/boot/include |
83 |
+ HOSTFLAGS += -Iarch/$(ARCH)/boot/include |
84 |
+ |
85 |
+-BIG_ENDIAN := $(shell echo -e __XTENSA_EB__ | $(CC) -E - | grep -v "\#") |
86 |
++BIG_ENDIAN := $(shell echo __XTENSA_EB__ | $(CC) -E - | grep -v "\#") |
87 |
+ |
88 |
+ export ccflags-y |
89 |
+ export BIG_ENDIAN |
90 |
+diff --git a/arch/xtensa/include/asm/traps.h b/arch/xtensa/include/asm/traps.h |
91 |
+index f2faa58f9a43..03d02df47b9a 100644 |
92 |
+--- a/arch/xtensa/include/asm/traps.h |
93 |
++++ b/arch/xtensa/include/asm/traps.h |
94 |
+@@ -24,30 +24,39 @@ static inline void spill_registers(void) |
95 |
+ { |
96 |
+ #if XCHAL_NUM_AREGS > 16 |
97 |
+ __asm__ __volatile__ ( |
98 |
+- " call12 1f\n" |
99 |
++ " call8 1f\n" |
100 |
+ " _j 2f\n" |
101 |
+ " retw\n" |
102 |
+ " .align 4\n" |
103 |
+ "1:\n" |
104 |
++#if XCHAL_NUM_AREGS == 32 |
105 |
++ " _entry a1, 32\n" |
106 |
++ " addi a8, a0, 3\n" |
107 |
++ " _entry a1, 16\n" |
108 |
++ " mov a12, a12\n" |
109 |
++ " retw\n" |
110 |
++#else |
111 |
+ " _entry a1, 48\n" |
112 |
+- " addi a12, a0, 3\n" |
113 |
+-#if XCHAL_NUM_AREGS > 32 |
114 |
+- " .rept (" __stringify(XCHAL_NUM_AREGS) " - 32) / 12\n" |
115 |
++ " call12 1f\n" |
116 |
++ " retw\n" |
117 |
++ " .align 4\n" |
118 |
++ "1:\n" |
119 |
++ " .rept (" __stringify(XCHAL_NUM_AREGS) " - 16) / 12\n" |
120 |
+ " _entry a1, 48\n" |
121 |
+ " mov a12, a0\n" |
122 |
+ " .endr\n" |
123 |
+-#endif |
124 |
+- " _entry a1, 48\n" |
125 |
++ " _entry a1, 16\n" |
126 |
+ #if XCHAL_NUM_AREGS % 12 == 0 |
127 |
+- " mov a8, a8\n" |
128 |
+-#elif XCHAL_NUM_AREGS % 12 == 4 |
129 |
+ " mov a12, a12\n" |
130 |
+-#elif XCHAL_NUM_AREGS % 12 == 8 |
131 |
++#elif XCHAL_NUM_AREGS % 12 == 4 |
132 |
+ " mov a4, a4\n" |
133 |
++#elif XCHAL_NUM_AREGS % 12 == 8 |
134 |
++ " mov a8, a8\n" |
135 |
+ #endif |
136 |
+ " retw\n" |
137 |
++#endif |
138 |
+ "2:\n" |
139 |
+- : : : "a12", "a13", "memory"); |
140 |
++ : : : "a8", "a9", "memory"); |
141 |
+ #else |
142 |
+ __asm__ __volatile__ ( |
143 |
+ " mov a12, a12\n" |
144 |
+diff --git a/arch/xtensa/kernel/entry.S b/arch/xtensa/kernel/entry.S |
145 |
+index 6e53174f8556..b268d3cc01d1 100644 |
146 |
+--- a/arch/xtensa/kernel/entry.S |
147 |
++++ b/arch/xtensa/kernel/entry.S |
148 |
+@@ -549,12 +549,13 @@ user_exception_exit: |
149 |
+ * (if we have restored WSBITS-1 frames). |
150 |
+ */ |
151 |
+ |
152 |
++2: |
153 |
+ #if XCHAL_HAVE_THREADPTR |
154 |
+ l32i a3, a1, PT_THREADPTR |
155 |
+ wur a3, threadptr |
156 |
+ #endif |
157 |
+ |
158 |
+-2: j common_exception_exit |
159 |
++ j common_exception_exit |
160 |
+ |
161 |
+ /* This is the kernel exception exit. |
162 |
+ * We avoided to do a MOVSP when we entered the exception, but we |
163 |
+@@ -1933,7 +1934,7 @@ ENDPROC(system_call) |
164 |
+ mov a12, a0 |
165 |
+ .endr |
166 |
+ #endif |
167 |
+- _entry a1, 48 |
168 |
++ _entry a1, 16 |
169 |
+ #if XCHAL_NUM_AREGS % 12 == 0 |
170 |
+ mov a8, a8 |
171 |
+ #elif XCHAL_NUM_AREGS % 12 == 4 |
172 |
+@@ -1957,7 +1958,7 @@ ENDPROC(system_call) |
173 |
+ |
174 |
+ ENTRY(_switch_to) |
175 |
+ |
176 |
+- entry a1, 16 |
177 |
++ entry a1, 48 |
178 |
+ |
179 |
+ mov a11, a3 # and 'next' (a3) |
180 |
+ |
181 |
+diff --git a/drivers/auxdisplay/ks0108.c b/drivers/auxdisplay/ks0108.c |
182 |
+index 5b93852392b8..0d752851a1ee 100644 |
183 |
+--- a/drivers/auxdisplay/ks0108.c |
184 |
++++ b/drivers/auxdisplay/ks0108.c |
185 |
+@@ -139,6 +139,7 @@ static int __init ks0108_init(void) |
186 |
+ |
187 |
+ ks0108_pardevice = parport_register_device(ks0108_parport, KS0108_NAME, |
188 |
+ NULL, NULL, NULL, PARPORT_DEV_EXCL, NULL); |
189 |
++ parport_put_port(ks0108_parport); |
190 |
+ if (ks0108_pardevice == NULL) { |
191 |
+ printk(KERN_ERR KS0108_NAME ": ERROR: " |
192 |
+ "parport didn't register new device\n"); |
193 |
+diff --git a/drivers/base/devres.c b/drivers/base/devres.c |
194 |
+index 507379e7b763..4e2fb405da87 100644 |
195 |
+--- a/drivers/base/devres.c |
196 |
++++ b/drivers/base/devres.c |
197 |
+@@ -296,10 +296,10 @@ void * devres_get(struct device *dev, void *new_res, |
198 |
+ if (!dr) { |
199 |
+ add_dr(dev, &new_dr->node); |
200 |
+ dr = new_dr; |
201 |
+- new_dr = NULL; |
202 |
++ new_res = NULL; |
203 |
+ } |
204 |
+ spin_unlock_irqrestore(&dev->devres_lock, flags); |
205 |
+- devres_free(new_dr); |
206 |
++ devres_free(new_res); |
207 |
+ |
208 |
+ return dr->data; |
209 |
+ } |
210 |
+diff --git a/drivers/base/platform.c b/drivers/base/platform.c |
211 |
+index 9eda84246ffd..8717be5093a2 100644 |
212 |
+--- a/drivers/base/platform.c |
213 |
++++ b/drivers/base/platform.c |
214 |
+@@ -347,9 +347,7 @@ int platform_device_add(struct platform_device *pdev) |
215 |
+ |
216 |
+ while (--i >= 0) { |
217 |
+ struct resource *r = &pdev->resource[i]; |
218 |
+- unsigned long type = resource_type(r); |
219 |
+- |
220 |
+- if (type == IORESOURCE_MEM || type == IORESOURCE_IO) |
221 |
++ if (r->parent) |
222 |
+ release_resource(r); |
223 |
+ } |
224 |
+ |
225 |
+@@ -380,9 +378,7 @@ void platform_device_del(struct platform_device *pdev) |
226 |
+ |
227 |
+ for (i = 0; i < pdev->num_resources; i++) { |
228 |
+ struct resource *r = &pdev->resource[i]; |
229 |
+- unsigned long type = resource_type(r); |
230 |
+- |
231 |
+- if (type == IORESOURCE_MEM || type == IORESOURCE_IO) |
232 |
++ if (r->parent) |
233 |
+ release_resource(r); |
234 |
+ } |
235 |
+ } |
236 |
+diff --git a/drivers/clk/versatile/clk-sp810.c b/drivers/clk/versatile/clk-sp810.c |
237 |
+index bf9b15a585e1..b9e05bde0c06 100644 |
238 |
+--- a/drivers/clk/versatile/clk-sp810.c |
239 |
++++ b/drivers/clk/versatile/clk-sp810.c |
240 |
+@@ -128,8 +128,8 @@ struct clk *clk_sp810_timerclken_of_get(struct of_phandle_args *clkspec, |
241 |
+ { |
242 |
+ struct clk_sp810 *sp810 = data; |
243 |
+ |
244 |
+- if (WARN_ON(clkspec->args_count != 1 || clkspec->args[0] > |
245 |
+- ARRAY_SIZE(sp810->timerclken))) |
246 |
++ if (WARN_ON(clkspec->args_count != 1 || |
247 |
++ clkspec->args[0] >= ARRAY_SIZE(sp810->timerclken))) |
248 |
+ return NULL; |
249 |
+ |
250 |
+ return sp810->timerclken[clkspec->args[0]].clk; |
251 |
+diff --git a/drivers/gpu/drm/radeon/radeon_connectors.c b/drivers/gpu/drm/radeon/radeon_connectors.c |
252 |
+index fc604fc75797..1fbd38b371d4 100644 |
253 |
+--- a/drivers/gpu/drm/radeon/radeon_connectors.c |
254 |
++++ b/drivers/gpu/drm/radeon/radeon_connectors.c |
255 |
+@@ -78,6 +78,11 @@ void radeon_connector_hotplug(struct drm_connector *connector) |
256 |
+ if (!radeon_hpd_sense(rdev, radeon_connector->hpd.hpd)) { |
257 |
+ drm_helper_connector_dpms(connector, DRM_MODE_DPMS_OFF); |
258 |
+ } else if (radeon_dp_needs_link_train(radeon_connector)) { |
259 |
++ /* Don't try to start link training before we |
260 |
++ * have the dpcd */ |
261 |
++ if (!radeon_dp_getdpcd(radeon_connector)) |
262 |
++ return; |
263 |
++ |
264 |
+ /* set it to OFF so that drm_helper_connector_dpms() |
265 |
+ * won't return immediately since the current state |
266 |
+ * is ON at this point. |
267 |
+diff --git a/drivers/hid/usbhid/hid-core.c b/drivers/hid/usbhid/hid-core.c |
268 |
+index ada164e1b3a1..de904e6a4ab7 100644 |
269 |
+--- a/drivers/hid/usbhid/hid-core.c |
270 |
++++ b/drivers/hid/usbhid/hid-core.c |
271 |
+@@ -180,7 +180,7 @@ static void hid_io_error(struct hid_device *hid) |
272 |
+ if (time_after(jiffies, usbhid->stop_retry)) { |
273 |
+ |
274 |
+ /* Retries failed, so do a port reset unless we lack bandwidth*/ |
275 |
+- if (test_bit(HID_NO_BANDWIDTH, &usbhid->iofl) |
276 |
++ if (!test_bit(HID_NO_BANDWIDTH, &usbhid->iofl) |
277 |
+ && !test_and_set_bit(HID_RESET_PENDING, &usbhid->iofl)) { |
278 |
+ |
279 |
+ schedule_work(&usbhid->reset_work); |
280 |
+diff --git a/drivers/iio/gyro/Kconfig b/drivers/iio/gyro/Kconfig |
281 |
+index 107cafcb89da..953a0621c6fe 100644 |
282 |
+--- a/drivers/iio/gyro/Kconfig |
283 |
++++ b/drivers/iio/gyro/Kconfig |
284 |
+@@ -73,7 +73,8 @@ config IIO_ST_GYRO_SPI_3AXIS |
285 |
+ config ITG3200 |
286 |
+ tristate "InvenSense ITG3200 Digital 3-Axis Gyroscope I2C driver" |
287 |
+ depends on I2C |
288 |
+- select IIO_TRIGGERED_BUFFER if IIO_BUFFER |
289 |
++ select IIO_BUFFER |
290 |
++ select IIO_TRIGGERED_BUFFER |
291 |
+ help |
292 |
+ Say yes here to add support for the InvenSense ITG3200 digital |
293 |
+ 3-axis gyroscope sensor. |
294 |
+diff --git a/drivers/iio/imu/adis16480.c b/drivers/iio/imu/adis16480.c |
295 |
+index b7db38376295..b0d05e88087c 100644 |
296 |
+--- a/drivers/iio/imu/adis16480.c |
297 |
++++ b/drivers/iio/imu/adis16480.c |
298 |
+@@ -110,6 +110,10 @@ |
299 |
+ struct adis16480_chip_info { |
300 |
+ unsigned int num_channels; |
301 |
+ const struct iio_chan_spec *channels; |
302 |
++ unsigned int gyro_max_val; |
303 |
++ unsigned int gyro_max_scale; |
304 |
++ unsigned int accel_max_val; |
305 |
++ unsigned int accel_max_scale; |
306 |
+ }; |
307 |
+ |
308 |
+ struct adis16480 { |
309 |
+@@ -533,19 +537,21 @@ static int adis16480_set_filter_freq(struct iio_dev *indio_dev, |
310 |
+ static int adis16480_read_raw(struct iio_dev *indio_dev, |
311 |
+ const struct iio_chan_spec *chan, int *val, int *val2, long info) |
312 |
+ { |
313 |
++ struct adis16480 *st = iio_priv(indio_dev); |
314 |
++ |
315 |
+ switch (info) { |
316 |
+ case IIO_CHAN_INFO_RAW: |
317 |
+ return adis_single_conversion(indio_dev, chan, 0, val); |
318 |
+ case IIO_CHAN_INFO_SCALE: |
319 |
+ switch (chan->type) { |
320 |
+ case IIO_ANGL_VEL: |
321 |
+- *val = 0; |
322 |
+- *val2 = IIO_DEGREE_TO_RAD(20000); /* 0.02 degree/sec */ |
323 |
+- return IIO_VAL_INT_PLUS_MICRO; |
324 |
++ *val = st->chip_info->gyro_max_scale; |
325 |
++ *val2 = st->chip_info->gyro_max_val; |
326 |
++ return IIO_VAL_FRACTIONAL; |
327 |
+ case IIO_ACCEL: |
328 |
+- *val = 0; |
329 |
+- *val2 = IIO_G_TO_M_S_2(800); /* 0.8 mg */ |
330 |
+- return IIO_VAL_INT_PLUS_MICRO; |
331 |
++ *val = st->chip_info->accel_max_scale; |
332 |
++ *val2 = st->chip_info->accel_max_val; |
333 |
++ return IIO_VAL_FRACTIONAL; |
334 |
+ case IIO_MAGN: |
335 |
+ *val = 0; |
336 |
+ *val2 = 100; /* 0.0001 gauss */ |
337 |
+@@ -702,18 +708,39 @@ static const struct adis16480_chip_info adis16480_chip_info[] = { |
338 |
+ [ADIS16375] = { |
339 |
+ .channels = adis16485_channels, |
340 |
+ .num_channels = ARRAY_SIZE(adis16485_channels), |
341 |
++ /* |
342 |
++ * storing the value in rad/degree and the scale in degree |
343 |
++ * gives us the result in rad and better precession than |
344 |
++ * storing the scale directly in rad. |
345 |
++ */ |
346 |
++ .gyro_max_val = IIO_RAD_TO_DEGREE(22887), |
347 |
++ .gyro_max_scale = 300, |
348 |
++ .accel_max_val = IIO_M_S_2_TO_G(21973), |
349 |
++ .accel_max_scale = 18, |
350 |
+ }, |
351 |
+ [ADIS16480] = { |
352 |
+ .channels = adis16480_channels, |
353 |
+ .num_channels = ARRAY_SIZE(adis16480_channels), |
354 |
++ .gyro_max_val = IIO_RAD_TO_DEGREE(22500), |
355 |
++ .gyro_max_scale = 450, |
356 |
++ .accel_max_val = IIO_M_S_2_TO_G(12500), |
357 |
++ .accel_max_scale = 5, |
358 |
+ }, |
359 |
+ [ADIS16485] = { |
360 |
+ .channels = adis16485_channels, |
361 |
+ .num_channels = ARRAY_SIZE(adis16485_channels), |
362 |
++ .gyro_max_val = IIO_RAD_TO_DEGREE(22500), |
363 |
++ .gyro_max_scale = 450, |
364 |
++ .accel_max_val = IIO_M_S_2_TO_G(20000), |
365 |
++ .accel_max_scale = 5, |
366 |
+ }, |
367 |
+ [ADIS16488] = { |
368 |
+ .channels = adis16480_channels, |
369 |
+ .num_channels = ARRAY_SIZE(adis16480_channels), |
370 |
++ .gyro_max_val = IIO_RAD_TO_DEGREE(22500), |
371 |
++ .gyro_max_scale = 450, |
372 |
++ .accel_max_val = IIO_M_S_2_TO_G(22500), |
373 |
++ .accel_max_scale = 18, |
374 |
+ }, |
375 |
+ }; |
376 |
+ |
377 |
+diff --git a/drivers/of/address.c b/drivers/of/address.c |
378 |
+index 8fb2b5769733..9ceff3c86d74 100644 |
379 |
+--- a/drivers/of/address.c |
380 |
++++ b/drivers/of/address.c |
381 |
+@@ -629,10 +629,10 @@ struct device_node *of_find_matching_node_by_address(struct device_node *from, |
382 |
+ struct resource res; |
383 |
+ |
384 |
+ while (dn) { |
385 |
+- if (of_address_to_resource(dn, 0, &res)) |
386 |
+- continue; |
387 |
+- if (res.start == base_address) |
388 |
++ if (!of_address_to_resource(dn, 0, &res) && |
389 |
++ res.start == base_address) |
390 |
+ return dn; |
391 |
++ |
392 |
+ dn = of_find_matching_node(dn, matches); |
393 |
+ } |
394 |
+ |
395 |
+diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c |
396 |
+index 910339c0791f..390e4094e4d5 100644 |
397 |
+--- a/drivers/pci/quirks.c |
398 |
++++ b/drivers/pci/quirks.c |
399 |
+@@ -2796,12 +2796,15 @@ DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_INTEL, 0x3c28, vtd_mask_spec_errors); |
400 |
+ |
401 |
+ static void fixup_ti816x_class(struct pci_dev *dev) |
402 |
+ { |
403 |
++ u32 class = dev->class; |
404 |
++ |
405 |
+ /* TI 816x devices do not have class code set when in PCIe boot mode */ |
406 |
+- dev_info(&dev->dev, "Setting PCI class for 816x PCIe device\n"); |
407 |
+- dev->class = PCI_CLASS_MULTIMEDIA_VIDEO; |
408 |
++ dev->class = PCI_CLASS_MULTIMEDIA_VIDEO << 8; |
409 |
++ dev_info(&dev->dev, "PCI class overridden (%#08x -> %#08x)\n", |
410 |
++ class, dev->class); |
411 |
+ } |
412 |
+ DECLARE_PCI_FIXUP_CLASS_EARLY(PCI_VENDOR_ID_TI, 0xb800, |
413 |
+- PCI_CLASS_NOT_DEFINED, 0, fixup_ti816x_class); |
414 |
++ PCI_CLASS_NOT_DEFINED, 0, fixup_ti816x_class); |
415 |
+ |
416 |
+ /* Some PCIe devices do not work reliably with the claimed maximum |
417 |
+ * payload size supported. |
418 |
+diff --git a/drivers/tty/serial/8250/8250_pnp.c b/drivers/tty/serial/8250/8250_pnp.c |
419 |
+index 35d9ab95c5cb..91b14202b90b 100644 |
420 |
+--- a/drivers/tty/serial/8250/8250_pnp.c |
421 |
++++ b/drivers/tty/serial/8250/8250_pnp.c |
422 |
+@@ -365,6 +365,11 @@ static const struct pnp_device_id pnp_dev_table[] = { |
423 |
+ /* Winbond CIR port, should not be probed. We should keep track |
424 |
+ of it to prevent the legacy serial driver from probing it */ |
425 |
+ { "WEC1022", CIR_PORT }, |
426 |
++ /* |
427 |
++ * SMSC IrCC SIR/FIR port, should not be probed by serial driver |
428 |
++ * as well so its own driver can bind to it. |
429 |
++ */ |
430 |
++ { "SMCF010", CIR_PORT }, |
431 |
+ { "", 0 } |
432 |
+ }; |
433 |
+ |
434 |
+diff --git a/drivers/usb/dwc3/ep0.c b/drivers/usb/dwc3/ep0.c |
435 |
+index 57d7ec6c8090..27040a6314d4 100644 |
436 |
+--- a/drivers/usb/dwc3/ep0.c |
437 |
++++ b/drivers/usb/dwc3/ep0.c |
438 |
+@@ -804,6 +804,11 @@ static void dwc3_ep0_complete_data(struct dwc3 *dwc, |
439 |
+ unsigned maxp = ep0->endpoint.maxpacket; |
440 |
+ |
441 |
+ transfer_size += (maxp - (transfer_size % maxp)); |
442 |
++ |
443 |
++ /* Maximum of DWC3_EP0_BOUNCE_SIZE can only be received */ |
444 |
++ if (transfer_size > DWC3_EP0_BOUNCE_SIZE) |
445 |
++ transfer_size = DWC3_EP0_BOUNCE_SIZE; |
446 |
++ |
447 |
+ transferred = min_t(u32, ur->length, |
448 |
+ transfer_size - length); |
449 |
+ memcpy(ur->buf, dwc->ep0_bounce, transferred); |
450 |
+@@ -916,11 +921,14 @@ static void __dwc3_ep0_do_control_data(struct dwc3 *dwc, |
451 |
+ return; |
452 |
+ } |
453 |
+ |
454 |
+- WARN_ON(req->request.length > DWC3_EP0_BOUNCE_SIZE); |
455 |
+- |
456 |
+ maxpacket = dep->endpoint.maxpacket; |
457 |
+ transfer_size = roundup(req->request.length, maxpacket); |
458 |
+ |
459 |
++ if (transfer_size > DWC3_EP0_BOUNCE_SIZE) { |
460 |
++ dev_WARN(dwc->dev, "bounce buf can't handle req len\n"); |
461 |
++ transfer_size = DWC3_EP0_BOUNCE_SIZE; |
462 |
++ } |
463 |
++ |
464 |
+ dwc->ep0_bounced = true; |
465 |
+ |
466 |
+ /* |
467 |
+diff --git a/drivers/usb/host/ehci-sysfs.c b/drivers/usb/host/ehci-sysfs.c |
468 |
+index 14ced00ba220..0659024290af 100644 |
469 |
+--- a/drivers/usb/host/ehci-sysfs.c |
470 |
++++ b/drivers/usb/host/ehci-sysfs.c |
471 |
+@@ -29,7 +29,7 @@ static ssize_t show_companion(struct device *dev, |
472 |
+ int count = PAGE_SIZE; |
473 |
+ char *ptr = buf; |
474 |
+ |
475 |
+- ehci = hcd_to_ehci(bus_to_hcd(dev_get_drvdata(dev))); |
476 |
++ ehci = hcd_to_ehci(dev_get_drvdata(dev)); |
477 |
+ nports = HCS_N_PORTS(ehci->hcs_params); |
478 |
+ |
479 |
+ for (index = 0; index < nports; ++index) { |
480 |
+@@ -54,7 +54,7 @@ static ssize_t store_companion(struct device *dev, |
481 |
+ struct ehci_hcd *ehci; |
482 |
+ int portnum, new_owner; |
483 |
+ |
484 |
+- ehci = hcd_to_ehci(bus_to_hcd(dev_get_drvdata(dev))); |
485 |
++ ehci = hcd_to_ehci(dev_get_drvdata(dev)); |
486 |
+ new_owner = PORT_OWNER; /* Owned by companion */ |
487 |
+ if (sscanf(buf, "%d", &portnum) != 1) |
488 |
+ return -EINVAL; |
489 |
+@@ -85,7 +85,7 @@ static ssize_t show_uframe_periodic_max(struct device *dev, |
490 |
+ struct ehci_hcd *ehci; |
491 |
+ int n; |
492 |
+ |
493 |
+- ehci = hcd_to_ehci(bus_to_hcd(dev_get_drvdata(dev))); |
494 |
++ ehci = hcd_to_ehci(dev_get_drvdata(dev)); |
495 |
+ n = scnprintf(buf, PAGE_SIZE, "%d\n", ehci->uframe_periodic_max); |
496 |
+ return n; |
497 |
+ } |
498 |
+@@ -102,7 +102,7 @@ static ssize_t store_uframe_periodic_max(struct device *dev, |
499 |
+ unsigned long flags; |
500 |
+ ssize_t ret; |
501 |
+ |
502 |
+- ehci = hcd_to_ehci(bus_to_hcd(dev_get_drvdata(dev))); |
503 |
++ ehci = hcd_to_ehci(dev_get_drvdata(dev)); |
504 |
+ if (kstrtouint(buf, 0, &uframe_periodic_max) < 0) |
505 |
+ return -EINVAL; |
506 |
+ |
507 |
+diff --git a/drivers/usb/serial/ftdi_sio.c b/drivers/usb/serial/ftdi_sio.c |
508 |
+index b55e5f3a311d..514f3117ee2b 100644 |
509 |
+--- a/drivers/usb/serial/ftdi_sio.c |
510 |
++++ b/drivers/usb/serial/ftdi_sio.c |
511 |
+@@ -621,6 +621,10 @@ static struct usb_device_id id_table_combined [] = { |
512 |
+ { USB_DEVICE(FTDI_VID, FTDI_NT_ORIONLXM_PID), |
513 |
+ .driver_info = (kernel_ulong_t)&ftdi_jtag_quirk }, |
514 |
+ { USB_DEVICE(FTDI_VID, FTDI_SYNAPSE_SS200_PID) }, |
515 |
++ { USB_DEVICE(FTDI_VID, FTDI_CUSTOMWARE_MINIPLEX_PID) }, |
516 |
++ { USB_DEVICE(FTDI_VID, FTDI_CUSTOMWARE_MINIPLEX2_PID) }, |
517 |
++ { USB_DEVICE(FTDI_VID, FTDI_CUSTOMWARE_MINIPLEX2WI_PID) }, |
518 |
++ { USB_DEVICE(FTDI_VID, FTDI_CUSTOMWARE_MINIPLEX3_PID) }, |
519 |
+ /* |
520 |
+ * ELV devices: |
521 |
+ */ |
522 |
+diff --git a/drivers/usb/serial/ftdi_sio_ids.h b/drivers/usb/serial/ftdi_sio_ids.h |
523 |
+index 99316d7cfc03..bfb0ecd98808 100644 |
524 |
+--- a/drivers/usb/serial/ftdi_sio_ids.h |
525 |
++++ b/drivers/usb/serial/ftdi_sio_ids.h |
526 |
+@@ -568,6 +568,14 @@ |
527 |
+ */ |
528 |
+ #define FTDI_SYNAPSE_SS200_PID 0x9090 /* SS200 - SNAP Stick 200 */ |
529 |
+ |
530 |
++/* |
531 |
++ * CustomWare / ShipModul NMEA multiplexers product ids (FTDI_VID) |
532 |
++ */ |
533 |
++#define FTDI_CUSTOMWARE_MINIPLEX_PID 0xfd48 /* MiniPlex first generation NMEA Multiplexer */ |
534 |
++#define FTDI_CUSTOMWARE_MINIPLEX2_PID 0xfd49 /* MiniPlex-USB and MiniPlex-2 series */ |
535 |
++#define FTDI_CUSTOMWARE_MINIPLEX2WI_PID 0xfd4a /* MiniPlex-2Wi */ |
536 |
++#define FTDI_CUSTOMWARE_MINIPLEX3_PID 0xfd4b /* MiniPlex-3 series */ |
537 |
++ |
538 |
+ |
539 |
+ /********************************/ |
540 |
+ /** third-party VID/PID combos **/ |
541 |
+diff --git a/drivers/usb/serial/symbolserial.c b/drivers/usb/serial/symbolserial.c |
542 |
+index 9b1648945e7a..1e2d86d4f539 100644 |
543 |
+--- a/drivers/usb/serial/symbolserial.c |
544 |
++++ b/drivers/usb/serial/symbolserial.c |
545 |
+@@ -97,7 +97,7 @@ exit: |
546 |
+ |
547 |
+ static int symbol_open(struct tty_struct *tty, struct usb_serial_port *port) |
548 |
+ { |
549 |
+- struct symbol_private *priv = usb_get_serial_data(port->serial); |
550 |
++ struct symbol_private *priv = usb_get_serial_port_data(port); |
551 |
+ unsigned long flags; |
552 |
+ int result = 0; |
553 |
+ |
554 |
+@@ -123,7 +123,7 @@ static void symbol_close(struct usb_serial_port *port) |
555 |
+ static void symbol_throttle(struct tty_struct *tty) |
556 |
+ { |
557 |
+ struct usb_serial_port *port = tty->driver_data; |
558 |
+- struct symbol_private *priv = usb_get_serial_data(port->serial); |
559 |
++ struct symbol_private *priv = usb_get_serial_port_data(port); |
560 |
+ |
561 |
+ spin_lock_irq(&priv->lock); |
562 |
+ priv->throttled = true; |
563 |
+@@ -133,7 +133,7 @@ static void symbol_throttle(struct tty_struct *tty) |
564 |
+ static void symbol_unthrottle(struct tty_struct *tty) |
565 |
+ { |
566 |
+ struct usb_serial_port *port = tty->driver_data; |
567 |
+- struct symbol_private *priv = usb_get_serial_data(port->serial); |
568 |
++ struct symbol_private *priv = usb_get_serial_port_data(port); |
569 |
+ int result; |
570 |
+ bool was_throttled; |
571 |
+ |
572 |
+diff --git a/fs/hpfs/namei.c b/fs/hpfs/namei.c |
573 |
+index 345713d2f8f3..6b42789ae799 100644 |
574 |
+--- a/fs/hpfs/namei.c |
575 |
++++ b/fs/hpfs/namei.c |
576 |
+@@ -8,6 +8,17 @@ |
577 |
+ #include <linux/sched.h> |
578 |
+ #include "hpfs_fn.h" |
579 |
+ |
580 |
++static void hpfs_update_directory_times(struct inode *dir) |
581 |
++{ |
582 |
++ time_t t = get_seconds(); |
583 |
++ if (t == dir->i_mtime.tv_sec && |
584 |
++ t == dir->i_ctime.tv_sec) |
585 |
++ return; |
586 |
++ dir->i_mtime.tv_sec = dir->i_ctime.tv_sec = t; |
587 |
++ dir->i_mtime.tv_nsec = dir->i_ctime.tv_nsec = 0; |
588 |
++ hpfs_write_inode_nolock(dir); |
589 |
++} |
590 |
++ |
591 |
+ static int hpfs_mkdir(struct inode *dir, struct dentry *dentry, umode_t mode) |
592 |
+ { |
593 |
+ const unsigned char *name = dentry->d_name.name; |
594 |
+@@ -99,6 +110,7 @@ static int hpfs_mkdir(struct inode *dir, struct dentry *dentry, umode_t mode) |
595 |
+ result->i_mode = mode | S_IFDIR; |
596 |
+ hpfs_write_inode_nolock(result); |
597 |
+ } |
598 |
++ hpfs_update_directory_times(dir); |
599 |
+ d_instantiate(dentry, result); |
600 |
+ hpfs_unlock(dir->i_sb); |
601 |
+ return 0; |
602 |
+@@ -187,6 +199,7 @@ static int hpfs_create(struct inode *dir, struct dentry *dentry, umode_t mode, b |
603 |
+ result->i_mode = mode | S_IFREG; |
604 |
+ hpfs_write_inode_nolock(result); |
605 |
+ } |
606 |
++ hpfs_update_directory_times(dir); |
607 |
+ d_instantiate(dentry, result); |
608 |
+ hpfs_unlock(dir->i_sb); |
609 |
+ return 0; |
610 |
+@@ -262,6 +275,7 @@ static int hpfs_mknod(struct inode *dir, struct dentry *dentry, umode_t mode, de |
611 |
+ insert_inode_hash(result); |
612 |
+ |
613 |
+ hpfs_write_inode_nolock(result); |
614 |
++ hpfs_update_directory_times(dir); |
615 |
+ d_instantiate(dentry, result); |
616 |
+ brelse(bh); |
617 |
+ hpfs_unlock(dir->i_sb); |
618 |
+@@ -340,6 +354,7 @@ static int hpfs_symlink(struct inode *dir, struct dentry *dentry, const char *sy |
619 |
+ insert_inode_hash(result); |
620 |
+ |
621 |
+ hpfs_write_inode_nolock(result); |
622 |
++ hpfs_update_directory_times(dir); |
623 |
+ d_instantiate(dentry, result); |
624 |
+ hpfs_unlock(dir->i_sb); |
625 |
+ return 0; |
626 |
+@@ -423,6 +438,8 @@ again: |
627 |
+ out1: |
628 |
+ hpfs_brelse4(&qbh); |
629 |
+ out: |
630 |
++ if (!err) |
631 |
++ hpfs_update_directory_times(dir); |
632 |
+ hpfs_unlock(dir->i_sb); |
633 |
+ return err; |
634 |
+ } |
635 |
+@@ -477,6 +494,8 @@ static int hpfs_rmdir(struct inode *dir, struct dentry *dentry) |
636 |
+ out1: |
637 |
+ hpfs_brelse4(&qbh); |
638 |
+ out: |
639 |
++ if (!err) |
640 |
++ hpfs_update_directory_times(dir); |
641 |
+ hpfs_unlock(dir->i_sb); |
642 |
+ return err; |
643 |
+ } |
644 |
+@@ -595,7 +614,7 @@ static int hpfs_rename(struct inode *old_dir, struct dentry *old_dentry, |
645 |
+ goto end1; |
646 |
+ } |
647 |
+ |
648 |
+- end: |
649 |
++end: |
650 |
+ hpfs_i(i)->i_parent_dir = new_dir->i_ino; |
651 |
+ if (S_ISDIR(i->i_mode)) { |
652 |
+ inc_nlink(new_dir); |
653 |
+@@ -610,6 +629,10 @@ static int hpfs_rename(struct inode *old_dir, struct dentry *old_dentry, |
654 |
+ brelse(bh); |
655 |
+ } |
656 |
+ end1: |
657 |
++ if (!err) { |
658 |
++ hpfs_update_directory_times(old_dir); |
659 |
++ hpfs_update_directory_times(new_dir); |
660 |
++ } |
661 |
+ hpfs_unlock(i->i_sb); |
662 |
+ return err; |
663 |
+ } |
664 |
+diff --git a/include/linux/iio/iio.h b/include/linux/iio/iio.h |
665 |
+index 3d35b7023591..683911167953 100644 |
666 |
+--- a/include/linux/iio/iio.h |
667 |
++++ b/include/linux/iio/iio.h |
668 |
+@@ -569,6 +569,15 @@ int iio_str_to_fixpoint(const char *str, int fract_mult, int *integer, |
669 |
+ #define IIO_DEGREE_TO_RAD(deg) (((deg) * 314159ULL + 9000000ULL) / 18000000ULL) |
670 |
+ |
671 |
+ /** |
672 |
++ * IIO_RAD_TO_DEGREE() - Convert rad to degree |
673 |
++ * @rad: A value in rad |
674 |
++ * |
675 |
++ * Returns the given value converted from rad to degree |
676 |
++ */ |
677 |
++#define IIO_RAD_TO_DEGREE(rad) \ |
678 |
++ (((rad) * 18000000ULL + 314159ULL / 2) / 314159ULL) |
679 |
++ |
680 |
++/** |
681 |
+ * IIO_G_TO_M_S_2() - Convert g to meter / second**2 |
682 |
+ * @g: A value in g |
683 |
+ * |
684 |
+@@ -576,4 +585,12 @@ int iio_str_to_fixpoint(const char *str, int fract_mult, int *integer, |
685 |
+ */ |
686 |
+ #define IIO_G_TO_M_S_2(g) ((g) * 980665ULL / 100000ULL) |
687 |
+ |
688 |
++/** |
689 |
++ * IIO_M_S_2_TO_G() - Convert meter / second**2 to g |
690 |
++ * @ms2: A value in meter / second**2 |
691 |
++ * |
692 |
++ * Returns the given value converted from meter / second**2 to g |
693 |
++ */ |
694 |
++#define IIO_M_S_2_TO_G(ms2) (((ms2) * 100000ULL + 980665ULL / 2) / 980665ULL) |
695 |
++ |
696 |
+ #endif /* _INDUSTRIAL_IO_H_ */ |