Annotation of /trunk/kernel-lts/patches-3.4/0123-3.4.24-all-fixes.patch
Parent Directory | Revision Log
Revision 2019 -
(hide annotations)
(download)
Tue Jan 8 15:43:33 2013 UTC (11 years, 8 months ago) by niro
File size: 39121 byte(s)
Tue Jan 8 15:43:33 2013 UTC (11 years, 8 months ago) by niro
File size: 39121 byte(s)
-linux-3.4.24
1 | niro | 2019 | diff --git a/arch/arm/include/asm/hwcap.h b/arch/arm/include/asm/hwcap.h |
2 | index 9176261..a2fe893 100644 | ||
3 | --- a/arch/arm/include/asm/hwcap.h | ||
4 | +++ b/arch/arm/include/asm/hwcap.h | ||
5 | @@ -18,11 +18,12 @@ | ||
6 | #define HWCAP_THUMBEE (1 << 11) | ||
7 | #define HWCAP_NEON (1 << 12) | ||
8 | #define HWCAP_VFPv3 (1 << 13) | ||
9 | -#define HWCAP_VFPv3D16 (1 << 14) | ||
10 | +#define HWCAP_VFPv3D16 (1 << 14) /* also set for VFPv4-D16 */ | ||
11 | #define HWCAP_TLS (1 << 15) | ||
12 | #define HWCAP_VFPv4 (1 << 16) | ||
13 | #define HWCAP_IDIVA (1 << 17) | ||
14 | #define HWCAP_IDIVT (1 << 18) | ||
15 | +#define HWCAP_VFPD32 (1 << 19) /* set if VFP has 32 regs (not 16) */ | ||
16 | #define HWCAP_IDIV (HWCAP_IDIVA | HWCAP_IDIVT) | ||
17 | |||
18 | #if defined(__KERNEL__) | ||
19 | diff --git a/arch/arm/include/asm/vfpmacros.h b/arch/arm/include/asm/vfpmacros.h | ||
20 | index bf53047..c49c8f7 100644 | ||
21 | --- a/arch/arm/include/asm/vfpmacros.h | ||
22 | +++ b/arch/arm/include/asm/vfpmacros.h | ||
23 | @@ -27,9 +27,9 @@ | ||
24 | #if __LINUX_ARM_ARCH__ <= 6 | ||
25 | ldr \tmp, =elf_hwcap @ may not have MVFR regs | ||
26 | ldr \tmp, [\tmp, #0] | ||
27 | - tst \tmp, #HWCAP_VFPv3D16 | ||
28 | - ldceql p11, cr0, [\base],#32*4 @ FLDMIAD \base!, {d16-d31} | ||
29 | - addne \base, \base, #32*4 @ step over unused register space | ||
30 | + tst \tmp, #HWCAP_VFPD32 | ||
31 | + ldcnel p11, cr0, [\base],#32*4 @ FLDMIAD \base!, {d16-d31} | ||
32 | + addeq \base, \base, #32*4 @ step over unused register space | ||
33 | #else | ||
34 | VFPFMRX \tmp, MVFR0 @ Media and VFP Feature Register 0 | ||
35 | and \tmp, \tmp, #MVFR0_A_SIMD_MASK @ A_SIMD field | ||
36 | @@ -51,9 +51,9 @@ | ||
37 | #if __LINUX_ARM_ARCH__ <= 6 | ||
38 | ldr \tmp, =elf_hwcap @ may not have MVFR regs | ||
39 | ldr \tmp, [\tmp, #0] | ||
40 | - tst \tmp, #HWCAP_VFPv3D16 | ||
41 | - stceql p11, cr0, [\base],#32*4 @ FSTMIAD \base!, {d16-d31} | ||
42 | - addne \base, \base, #32*4 @ step over unused register space | ||
43 | + tst \tmp, #HWCAP_VFPD32 | ||
44 | + stcnel p11, cr0, [\base],#32*4 @ FSTMIAD \base!, {d16-d31} | ||
45 | + addeq \base, \base, #32*4 @ step over unused register space | ||
46 | #else | ||
47 | VFPFMRX \tmp, MVFR0 @ Media and VFP Feature Register 0 | ||
48 | and \tmp, \tmp, #MVFR0_A_SIMD_MASK @ A_SIMD field | ||
49 | diff --git a/arch/arm/vfp/vfpmodule.c b/arch/arm/vfp/vfpmodule.c | ||
50 | index 1f8241d..3b36062 100644 | ||
51 | --- a/arch/arm/vfp/vfpmodule.c | ||
52 | +++ b/arch/arm/vfp/vfpmodule.c | ||
53 | @@ -701,11 +701,14 @@ static int __init vfp_init(void) | ||
54 | elf_hwcap |= HWCAP_VFPv3; | ||
55 | |||
56 | /* | ||
57 | - * Check for VFPv3 D16. CPUs in this configuration | ||
58 | - * only have 16 x 64bit registers. | ||
59 | + * Check for VFPv3 D16 and VFPv4 D16. CPUs in | ||
60 | + * this configuration only have 16 x 64bit | ||
61 | + * registers. | ||
62 | */ | ||
63 | if (((fmrx(MVFR0) & MVFR0_A_SIMD_MASK)) == 1) | ||
64 | - elf_hwcap |= HWCAP_VFPv3D16; | ||
65 | + elf_hwcap |= HWCAP_VFPv3D16; /* also v4-D16 */ | ||
66 | + else | ||
67 | + elf_hwcap |= HWCAP_VFPD32; | ||
68 | } | ||
69 | #endif | ||
70 | /* | ||
71 | diff --git a/arch/x86/kernel/hpet.c b/arch/x86/kernel/hpet.c | ||
72 | index ad0de0c..2861b4c 100644 | ||
73 | --- a/arch/x86/kernel/hpet.c | ||
74 | +++ b/arch/x86/kernel/hpet.c | ||
75 | @@ -431,7 +431,7 @@ void hpet_msi_unmask(struct irq_data *data) | ||
76 | |||
77 | /* unmask it */ | ||
78 | cfg = hpet_readl(HPET_Tn_CFG(hdev->num)); | ||
79 | - cfg |= HPET_TN_FSB; | ||
80 | + cfg |= HPET_TN_ENABLE | HPET_TN_FSB; | ||
81 | hpet_writel(cfg, HPET_Tn_CFG(hdev->num)); | ||
82 | } | ||
83 | |||
84 | @@ -442,7 +442,7 @@ void hpet_msi_mask(struct irq_data *data) | ||
85 | |||
86 | /* mask it */ | ||
87 | cfg = hpet_readl(HPET_Tn_CFG(hdev->num)); | ||
88 | - cfg &= ~HPET_TN_FSB; | ||
89 | + cfg &= ~(HPET_TN_ENABLE | HPET_TN_FSB); | ||
90 | hpet_writel(cfg, HPET_Tn_CFG(hdev->num)); | ||
91 | } | ||
92 | |||
93 | diff --git a/drivers/acpi/battery.c b/drivers/acpi/battery.c | ||
94 | index 7dd3f9f..6ea287e2 100644 | ||
95 | --- a/drivers/acpi/battery.c | ||
96 | +++ b/drivers/acpi/battery.c | ||
97 | @@ -34,6 +34,7 @@ | ||
98 | #include <linux/dmi.h> | ||
99 | #include <linux/slab.h> | ||
100 | #include <linux/suspend.h> | ||
101 | +#include <asm/unaligned.h> | ||
102 | |||
103 | #ifdef CONFIG_ACPI_PROCFS_POWER | ||
104 | #include <linux/proc_fs.h> | ||
105 | @@ -95,6 +96,18 @@ enum { | ||
106 | ACPI_BATTERY_ALARM_PRESENT, | ||
107 | ACPI_BATTERY_XINFO_PRESENT, | ||
108 | ACPI_BATTERY_QUIRK_PERCENTAGE_CAPACITY, | ||
109 | + /* On Lenovo Thinkpad models from 2010 and 2011, the power unit | ||
110 | + switches between mWh and mAh depending on whether the system | ||
111 | + is running on battery or not. When mAh is the unit, most | ||
112 | + reported values are incorrect and need to be adjusted by | ||
113 | + 10000/design_voltage. Verified on x201, t410, t410s, and x220. | ||
114 | + Pre-2010 and 2012 models appear to always report in mWh and | ||
115 | + are thus unaffected (tested with t42, t61, t500, x200, x300, | ||
116 | + and x230). Also, in mid-2012 Lenovo issued a BIOS update for | ||
117 | + the 2011 models that fixes the issue (tested on x220 with a | ||
118 | + post-1.29 BIOS), but as of Nov. 2012, no such update is | ||
119 | + available for the 2010 models. */ | ||
120 | + ACPI_BATTERY_QUIRK_THINKPAD_MAH, | ||
121 | }; | ||
122 | |||
123 | struct acpi_battery { | ||
124 | @@ -429,6 +442,21 @@ static int acpi_battery_get_info(struct acpi_battery *battery) | ||
125 | kfree(buffer.pointer); | ||
126 | if (test_bit(ACPI_BATTERY_QUIRK_PERCENTAGE_CAPACITY, &battery->flags)) | ||
127 | battery->full_charge_capacity = battery->design_capacity; | ||
128 | + if (test_bit(ACPI_BATTERY_QUIRK_THINKPAD_MAH, &battery->flags) && | ||
129 | + battery->power_unit && battery->design_voltage) { | ||
130 | + battery->design_capacity = battery->design_capacity * | ||
131 | + 10000 / battery->design_voltage; | ||
132 | + battery->full_charge_capacity = battery->full_charge_capacity * | ||
133 | + 10000 / battery->design_voltage; | ||
134 | + battery->design_capacity_warning = | ||
135 | + battery->design_capacity_warning * | ||
136 | + 10000 / battery->design_voltage; | ||
137 | + /* Curiously, design_capacity_low, unlike the rest of them, | ||
138 | + is correct. */ | ||
139 | + /* capacity_granularity_* equal 1 on the systems tested, so | ||
140 | + it's impossible to tell if they would need an adjustment | ||
141 | + or not if their values were higher. */ | ||
142 | + } | ||
143 | return result; | ||
144 | } | ||
145 | |||
146 | @@ -477,6 +505,11 @@ static int acpi_battery_get_state(struct acpi_battery *battery) | ||
147 | && battery->capacity_now >= 0 && battery->capacity_now <= 100) | ||
148 | battery->capacity_now = (battery->capacity_now * | ||
149 | battery->full_charge_capacity) / 100; | ||
150 | + if (test_bit(ACPI_BATTERY_QUIRK_THINKPAD_MAH, &battery->flags) && | ||
151 | + battery->power_unit && battery->design_voltage) { | ||
152 | + battery->capacity_now = battery->capacity_now * | ||
153 | + 10000 / battery->design_voltage; | ||
154 | + } | ||
155 | return result; | ||
156 | } | ||
157 | |||
158 | @@ -586,6 +619,24 @@ static void sysfs_remove_battery(struct acpi_battery *battery) | ||
159 | mutex_unlock(&battery->sysfs_lock); | ||
160 | } | ||
161 | |||
162 | +static void find_battery(const struct dmi_header *dm, void *private) | ||
163 | +{ | ||
164 | + struct acpi_battery *battery = (struct acpi_battery *)private; | ||
165 | + /* Note: the hardcoded offsets below have been extracted from | ||
166 | + the source code of dmidecode. */ | ||
167 | + if (dm->type == DMI_ENTRY_PORTABLE_BATTERY && dm->length >= 8) { | ||
168 | + const u8 *dmi_data = (const u8 *)(dm + 1); | ||
169 | + int dmi_capacity = get_unaligned((const u16 *)(dmi_data + 6)); | ||
170 | + if (dm->length >= 18) | ||
171 | + dmi_capacity *= dmi_data[17]; | ||
172 | + if (battery->design_capacity * battery->design_voltage / 1000 | ||
173 | + != dmi_capacity && | ||
174 | + battery->design_capacity * 10 == dmi_capacity) | ||
175 | + set_bit(ACPI_BATTERY_QUIRK_THINKPAD_MAH, | ||
176 | + &battery->flags); | ||
177 | + } | ||
178 | +} | ||
179 | + | ||
180 | /* | ||
181 | * According to the ACPI spec, some kinds of primary batteries can | ||
182 | * report percentage battery remaining capacity directly to OS. | ||
183 | @@ -611,6 +662,32 @@ static void acpi_battery_quirks(struct acpi_battery *battery) | ||
184 | battery->capacity_now = (battery->capacity_now * | ||
185 | battery->full_charge_capacity) / 100; | ||
186 | } | ||
187 | + | ||
188 | + if (test_bit(ACPI_BATTERY_QUIRK_THINKPAD_MAH, &battery->flags)) | ||
189 | + return ; | ||
190 | + | ||
191 | + if (battery->power_unit && dmi_name_in_vendors("LENOVO")) { | ||
192 | + const char *s; | ||
193 | + s = dmi_get_system_info(DMI_PRODUCT_VERSION); | ||
194 | + if (s && !strnicmp(s, "ThinkPad", 8)) { | ||
195 | + dmi_walk(find_battery, battery); | ||
196 | + if (test_bit(ACPI_BATTERY_QUIRK_THINKPAD_MAH, | ||
197 | + &battery->flags) && | ||
198 | + battery->design_voltage) { | ||
199 | + battery->design_capacity = | ||
200 | + battery->design_capacity * | ||
201 | + 10000 / battery->design_voltage; | ||
202 | + battery->full_charge_capacity = | ||
203 | + battery->full_charge_capacity * | ||
204 | + 10000 / battery->design_voltage; | ||
205 | + battery->design_capacity_warning = | ||
206 | + battery->design_capacity_warning * | ||
207 | + 10000 / battery->design_voltage; | ||
208 | + battery->capacity_now = battery->capacity_now * | ||
209 | + 10000 / battery->design_voltage; | ||
210 | + } | ||
211 | + } | ||
212 | + } | ||
213 | } | ||
214 | |||
215 | static int acpi_battery_update(struct acpi_battery *battery) | ||
216 | diff --git a/drivers/acpi/sleep.c b/drivers/acpi/sleep.c | ||
217 | index 2377445..480b648 100644 | ||
218 | --- a/drivers/acpi/sleep.c | ||
219 | +++ b/drivers/acpi/sleep.c | ||
220 | @@ -508,6 +508,14 @@ static struct dmi_system_id __initdata acpisleep_dmi_table[] = { | ||
221 | }, | ||
222 | { | ||
223 | .callback = init_nvs_nosave, | ||
224 | + .ident = "Sony Vaio VPCEB1S1E", | ||
225 | + .matches = { | ||
226 | + DMI_MATCH(DMI_SYS_VENDOR, "Sony Corporation"), | ||
227 | + DMI_MATCH(DMI_PRODUCT_NAME, "VPCEB1S1E"), | ||
228 | + }, | ||
229 | + }, | ||
230 | + { | ||
231 | + .callback = init_nvs_nosave, | ||
232 | .ident = "Sony Vaio VGN-FW520F", | ||
233 | .matches = { | ||
234 | DMI_MATCH(DMI_SYS_VENDOR, "Sony Corporation"), | ||
235 | diff --git a/drivers/acpi/video.c b/drivers/acpi/video.c | ||
236 | index 62d9ee6..91357e1 100644 | ||
237 | --- a/drivers/acpi/video.c | ||
238 | +++ b/drivers/acpi/video.c | ||
239 | @@ -389,6 +389,12 @@ static int __init video_set_bqc_offset(const struct dmi_system_id *d) | ||
240 | return 0; | ||
241 | } | ||
242 | |||
243 | +static int video_ignore_initial_backlight(const struct dmi_system_id *d) | ||
244 | +{ | ||
245 | + use_bios_initial_backlight = 0; | ||
246 | + return 0; | ||
247 | +} | ||
248 | + | ||
249 | static struct dmi_system_id video_dmi_table[] __initdata = { | ||
250 | /* | ||
251 | * Broken _BQC workaround http://bugzilla.kernel.org/show_bug.cgi?id=13121 | ||
252 | @@ -433,6 +439,14 @@ static struct dmi_system_id video_dmi_table[] __initdata = { | ||
253 | DMI_MATCH(DMI_PRODUCT_NAME, "Aspire 7720"), | ||
254 | }, | ||
255 | }, | ||
256 | + { | ||
257 | + .callback = video_ignore_initial_backlight, | ||
258 | + .ident = "HP Folio 13-2000", | ||
259 | + .matches = { | ||
260 | + DMI_MATCH(DMI_BOARD_VENDOR, "Hewlett-Packard"), | ||
261 | + DMI_MATCH(DMI_PRODUCT_NAME, "HP Folio 13 - 2000 Notebook PC"), | ||
262 | + }, | ||
263 | + }, | ||
264 | {} | ||
265 | }; | ||
266 | |||
267 | diff --git a/drivers/gpu/drm/i915/intel_bios.c b/drivers/gpu/drm/i915/intel_bios.c | ||
268 | index b48fc2a..3fe0524 100644 | ||
269 | --- a/drivers/gpu/drm/i915/intel_bios.c | ||
270 | +++ b/drivers/gpu/drm/i915/intel_bios.c | ||
271 | @@ -459,12 +459,8 @@ parse_edp(struct drm_i915_private *dev_priv, struct bdb_header *bdb) | ||
272 | |||
273 | edp = find_section(bdb, BDB_EDP); | ||
274 | if (!edp) { | ||
275 | - if (SUPPORTS_EDP(dev_priv->dev) && dev_priv->edp.support) { | ||
276 | - DRM_DEBUG_KMS("No eDP BDB found but eDP panel " | ||
277 | - "supported, assume %dbpp panel color " | ||
278 | - "depth.\n", | ||
279 | - dev_priv->edp.bpp); | ||
280 | - } | ||
281 | + if (SUPPORTS_EDP(dev_priv->dev) && dev_priv->edp.support) | ||
282 | + DRM_DEBUG_KMS("No eDP BDB found but eDP panel supported.\n"); | ||
283 | return; | ||
284 | } | ||
285 | |||
286 | @@ -617,9 +613,6 @@ init_vbt_defaults(struct drm_i915_private *dev_priv) | ||
287 | dev_priv->lvds_use_ssc = 1; | ||
288 | dev_priv->lvds_ssc_freq = intel_bios_ssc_frequency(dev, 1); | ||
289 | DRM_DEBUG_KMS("Set default to SSC at %dMHz\n", dev_priv->lvds_ssc_freq); | ||
290 | - | ||
291 | - /* eDP data */ | ||
292 | - dev_priv->edp.bpp = 18; | ||
293 | } | ||
294 | |||
295 | static int __init intel_no_opregion_vbt_callback(const struct dmi_system_id *id) | ||
296 | diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c | ||
297 | index f3b06f0..dd3e7e4 100644 | ||
298 | --- a/drivers/gpu/drm/i915/intel_display.c | ||
299 | +++ b/drivers/gpu/drm/i915/intel_display.c | ||
300 | @@ -4996,6 +4996,17 @@ static bool intel_choose_pipe_bpp_dither(struct drm_crtc *crtc, | ||
301 | } | ||
302 | } | ||
303 | |||
304 | + if (intel_encoder->type == INTEL_OUTPUT_EDP) { | ||
305 | + /* Use VBT settings if we have an eDP panel */ | ||
306 | + unsigned int edp_bpc = dev_priv->edp.bpp / 3; | ||
307 | + | ||
308 | + if (edp_bpc && edp_bpc < display_bpc) { | ||
309 | + DRM_DEBUG_KMS("clamping display bpc (was %d) to eDP (%d)\n", display_bpc, edp_bpc); | ||
310 | + display_bpc = edp_bpc; | ||
311 | + } | ||
312 | + continue; | ||
313 | + } | ||
314 | + | ||
315 | /* | ||
316 | * HDMI is either 12 or 8, so if the display lets 10bpc sneak | ||
317 | * through, clamp it down. (Note: >12bpc will be caught below.) | ||
318 | diff --git a/drivers/hwmon/fam15h_power.c b/drivers/hwmon/fam15h_power.c | ||
319 | index ac2d6cb..770e959 100644 | ||
320 | --- a/drivers/hwmon/fam15h_power.c | ||
321 | +++ b/drivers/hwmon/fam15h_power.c | ||
322 | @@ -31,6 +31,9 @@ MODULE_DESCRIPTION("AMD Family 15h CPU processor power monitor"); | ||
323 | MODULE_AUTHOR("Andreas Herrmann <andreas.herrmann3@amd.com>"); | ||
324 | MODULE_LICENSE("GPL"); | ||
325 | |||
326 | +/* Family 16h Northbridge's function 4 PCI ID */ | ||
327 | +#define PCI_DEVICE_ID_AMD_16H_NB_F4 0x1534 | ||
328 | + | ||
329 | /* D18F3 */ | ||
330 | #define REG_NORTHBRIDGE_CAP 0xe8 | ||
331 | |||
332 | @@ -256,6 +259,7 @@ static void __devexit fam15h_power_remove(struct pci_dev *pdev) | ||
333 | |||
334 | static DEFINE_PCI_DEVICE_TABLE(fam15h_power_id_table) = { | ||
335 | { PCI_VDEVICE(AMD, PCI_DEVICE_ID_AMD_15H_NB_F4) }, | ||
336 | + { PCI_VDEVICE(AMD, PCI_DEVICE_ID_AMD_16H_NB_F4) }, | ||
337 | {} | ||
338 | }; | ||
339 | MODULE_DEVICE_TABLE(pci, fam15h_power_id_table); | ||
340 | diff --git a/drivers/mmc/host/sh_mmcif.c b/drivers/mmc/host/sh_mmcif.c | ||
341 | index 3b8236b..a5786a8 100644 | ||
342 | --- a/drivers/mmc/host/sh_mmcif.c | ||
343 | +++ b/drivers/mmc/host/sh_mmcif.c | ||
344 | @@ -1066,7 +1066,6 @@ static irqreturn_t sh_mmcif_irqt(int irq, void *dev_id) | ||
345 | { | ||
346 | struct sh_mmcif_host *host = dev_id; | ||
347 | struct mmc_request *mrq = host->mrq; | ||
348 | - struct mmc_data *data = mrq->data; | ||
349 | |||
350 | cancel_delayed_work_sync(&host->timeout_work); | ||
351 | |||
352 | @@ -1114,13 +1113,14 @@ static irqreturn_t sh_mmcif_irqt(int irq, void *dev_id) | ||
353 | case MMCIF_WAIT_FOR_READ_END: | ||
354 | case MMCIF_WAIT_FOR_WRITE_END: | ||
355 | if (host->sd_error) | ||
356 | - data->error = sh_mmcif_error_manage(host); | ||
357 | + mrq->data->error = sh_mmcif_error_manage(host); | ||
358 | break; | ||
359 | default: | ||
360 | BUG(); | ||
361 | } | ||
362 | |||
363 | if (host->wait_for != MMCIF_WAIT_FOR_STOP) { | ||
364 | + struct mmc_data *data = mrq->data; | ||
365 | if (!mrq->cmd->error && data && !data->error) | ||
366 | data->bytes_xfered = | ||
367 | data->blocks * data->blksz; | ||
368 | @@ -1191,10 +1191,6 @@ static irqreturn_t sh_mmcif_intr(int irq, void *dev_id) | ||
369 | host->sd_error = true; | ||
370 | dev_dbg(&host->pd->dev, "int err state = %08x\n", state); | ||
371 | } | ||
372 | - if (host->state == STATE_IDLE) { | ||
373 | - dev_info(&host->pd->dev, "Spurious IRQ status 0x%x", state); | ||
374 | - return IRQ_HANDLED; | ||
375 | - } | ||
376 | if (state & ~(INT_CMD12RBE | INT_CMD12CRE)) { | ||
377 | if (!host->dma_active) | ||
378 | return IRQ_WAKE_THREAD; | ||
379 | diff --git a/drivers/pnp/pnpacpi/core.c b/drivers/pnp/pnpacpi/core.c | ||
380 | index d21e8f5..e353788 100644 | ||
381 | --- a/drivers/pnp/pnpacpi/core.c | ||
382 | +++ b/drivers/pnp/pnpacpi/core.c | ||
383 | @@ -95,6 +95,9 @@ static int pnpacpi_set_resources(struct pnp_dev *dev) | ||
384 | return -ENODEV; | ||
385 | } | ||
386 | |||
387 | + if (WARN_ON_ONCE(acpi_dev != dev->data)) | ||
388 | + dev->data = acpi_dev; | ||
389 | + | ||
390 | ret = pnpacpi_build_resource_template(dev, &buffer); | ||
391 | if (ret) | ||
392 | return ret; | ||
393 | diff --git a/drivers/staging/telephony/ixj.c b/drivers/staging/telephony/ixj.c | ||
394 | index f960279..638d2b8 100644 | ||
395 | --- a/drivers/staging/telephony/ixj.c | ||
396 | +++ b/drivers/staging/telephony/ixj.c | ||
397 | @@ -3190,12 +3190,12 @@ static void ixj_write_cid(IXJ *j) | ||
398 | |||
399 | ixj_fsk_alloc(j); | ||
400 | |||
401 | - strcpy(sdmf1, j->cid_send.month); | ||
402 | - strcat(sdmf1, j->cid_send.day); | ||
403 | - strcat(sdmf1, j->cid_send.hour); | ||
404 | - strcat(sdmf1, j->cid_send.min); | ||
405 | - strcpy(sdmf2, j->cid_send.number); | ||
406 | - strcpy(sdmf3, j->cid_send.name); | ||
407 | + strlcpy(sdmf1, j->cid_send.month, sizeof(sdmf1)); | ||
408 | + strlcat(sdmf1, j->cid_send.day, sizeof(sdmf1)); | ||
409 | + strlcat(sdmf1, j->cid_send.hour, sizeof(sdmf1)); | ||
410 | + strlcat(sdmf1, j->cid_send.min, sizeof(sdmf1)); | ||
411 | + strlcpy(sdmf2, j->cid_send.number, sizeof(sdmf2)); | ||
412 | + strlcpy(sdmf3, j->cid_send.name, sizeof(sdmf3)); | ||
413 | |||
414 | len1 = strlen(sdmf1); | ||
415 | len2 = strlen(sdmf2); | ||
416 | @@ -3340,12 +3340,12 @@ static void ixj_write_cidcw(IXJ *j) | ||
417 | ixj_pre_cid(j); | ||
418 | } | ||
419 | j->flags.cidcw_ack = 0; | ||
420 | - strcpy(sdmf1, j->cid_send.month); | ||
421 | - strcat(sdmf1, j->cid_send.day); | ||
422 | - strcat(sdmf1, j->cid_send.hour); | ||
423 | - strcat(sdmf1, j->cid_send.min); | ||
424 | - strcpy(sdmf2, j->cid_send.number); | ||
425 | - strcpy(sdmf3, j->cid_send.name); | ||
426 | + strlcpy(sdmf1, j->cid_send.month, sizeof(sdmf1)); | ||
427 | + strlcat(sdmf1, j->cid_send.day, sizeof(sdmf1)); | ||
428 | + strlcat(sdmf1, j->cid_send.hour, sizeof(sdmf1)); | ||
429 | + strlcat(sdmf1, j->cid_send.min, sizeof(sdmf1)); | ||
430 | + strlcpy(sdmf2, j->cid_send.number, sizeof(sdmf2)); | ||
431 | + strlcpy(sdmf3, j->cid_send.name, sizeof(sdmf3)); | ||
432 | |||
433 | len1 = strlen(sdmf1); | ||
434 | len2 = strlen(sdmf2); | ||
435 | diff --git a/drivers/usb/class/cdc-acm.c b/drivers/usb/class/cdc-acm.c | ||
436 | index c5f7eae..b4e87cf 100644 | ||
437 | --- a/drivers/usb/class/cdc-acm.c | ||
438 | +++ b/drivers/usb/class/cdc-acm.c | ||
439 | @@ -788,6 +788,10 @@ static int get_serial_info(struct acm *acm, struct serial_struct __user *info) | ||
440 | tmp.flags = ASYNC_LOW_LATENCY; | ||
441 | tmp.xmit_fifo_size = acm->writesize; | ||
442 | tmp.baud_base = le32_to_cpu(acm->line.dwDTERate); | ||
443 | + tmp.close_delay = acm->port.close_delay / 10; | ||
444 | + tmp.closing_wait = acm->port.closing_wait == ASYNC_CLOSING_WAIT_NONE ? | ||
445 | + ASYNC_CLOSING_WAIT_NONE : | ||
446 | + acm->port.closing_wait / 10; | ||
447 | |||
448 | if (copy_to_user(info, &tmp, sizeof(tmp))) | ||
449 | return -EFAULT; | ||
450 | @@ -795,6 +799,37 @@ static int get_serial_info(struct acm *acm, struct serial_struct __user *info) | ||
451 | return 0; | ||
452 | } | ||
453 | |||
454 | +static int set_serial_info(struct acm *acm, | ||
455 | + struct serial_struct __user *newinfo) | ||
456 | +{ | ||
457 | + struct serial_struct new_serial; | ||
458 | + unsigned int closing_wait, close_delay; | ||
459 | + int retval = 0; | ||
460 | + | ||
461 | + if (copy_from_user(&new_serial, newinfo, sizeof(new_serial))) | ||
462 | + return -EFAULT; | ||
463 | + | ||
464 | + close_delay = new_serial.close_delay * 10; | ||
465 | + closing_wait = new_serial.closing_wait == ASYNC_CLOSING_WAIT_NONE ? | ||
466 | + ASYNC_CLOSING_WAIT_NONE : new_serial.closing_wait * 10; | ||
467 | + | ||
468 | + mutex_lock(&acm->port.mutex); | ||
469 | + | ||
470 | + if (!capable(CAP_SYS_ADMIN)) { | ||
471 | + if ((close_delay != acm->port.close_delay) || | ||
472 | + (closing_wait != acm->port.closing_wait)) | ||
473 | + retval = -EPERM; | ||
474 | + else | ||
475 | + retval = -EOPNOTSUPP; | ||
476 | + } else { | ||
477 | + acm->port.close_delay = close_delay; | ||
478 | + acm->port.closing_wait = closing_wait; | ||
479 | + } | ||
480 | + | ||
481 | + mutex_unlock(&acm->port.mutex); | ||
482 | + return retval; | ||
483 | +} | ||
484 | + | ||
485 | static int acm_tty_ioctl(struct tty_struct *tty, | ||
486 | unsigned int cmd, unsigned long arg) | ||
487 | { | ||
488 | @@ -805,6 +840,9 @@ static int acm_tty_ioctl(struct tty_struct *tty, | ||
489 | case TIOCGSERIAL: /* gets serial port data */ | ||
490 | rv = get_serial_info(acm, (struct serial_struct __user *) arg); | ||
491 | break; | ||
492 | + case TIOCSSERIAL: | ||
493 | + rv = set_serial_info(acm, (struct serial_struct __user *) arg); | ||
494 | + break; | ||
495 | } | ||
496 | |||
497 | return rv; | ||
498 | diff --git a/drivers/usb/host/ohci-q.c b/drivers/usb/host/ohci-q.c | ||
499 | index c5a1ea9..9d00d47 100644 | ||
500 | --- a/drivers/usb/host/ohci-q.c | ||
501 | +++ b/drivers/usb/host/ohci-q.c | ||
502 | @@ -1128,6 +1128,25 @@ dl_done_list (struct ohci_hcd *ohci) | ||
503 | |||
504 | while (td) { | ||
505 | struct td *td_next = td->next_dl_td; | ||
506 | + struct ed *ed = td->ed; | ||
507 | + | ||
508 | + /* | ||
509 | + * Some OHCI controllers (NVIDIA for sure, maybe others) | ||
510 | + * occasionally forget to add TDs to the done queue. Since | ||
511 | + * TDs for a given endpoint are always processed in order, | ||
512 | + * if we find a TD on the donelist then all of its | ||
513 | + * predecessors must be finished as well. | ||
514 | + */ | ||
515 | + for (;;) { | ||
516 | + struct td *td2; | ||
517 | + | ||
518 | + td2 = list_first_entry(&ed->td_list, struct td, | ||
519 | + td_list); | ||
520 | + if (td2 == td) | ||
521 | + break; | ||
522 | + takeback_td(ohci, td2); | ||
523 | + } | ||
524 | + | ||
525 | takeback_td(ohci, td); | ||
526 | td = td_next; | ||
527 | } | ||
528 | diff --git a/drivers/usb/host/xhci-pci.c b/drivers/usb/host/xhci-pci.c | ||
529 | index 4211017..84e82dc 100644 | ||
530 | --- a/drivers/usb/host/xhci-pci.c | ||
531 | +++ b/drivers/usb/host/xhci-pci.c | ||
532 | @@ -29,6 +29,7 @@ | ||
533 | /* Device for a quirk */ | ||
534 | #define PCI_VENDOR_ID_FRESCO_LOGIC 0x1b73 | ||
535 | #define PCI_DEVICE_ID_FRESCO_LOGIC_PDK 0x1000 | ||
536 | +#define PCI_DEVICE_ID_FRESCO_LOGIC_FL1400 0x1400 | ||
537 | |||
538 | #define PCI_VENDOR_ID_ETRON 0x1b6f | ||
539 | #define PCI_DEVICE_ID_ASROCK_P67 0x7023 | ||
540 | @@ -58,8 +59,10 @@ static void xhci_pci_quirks(struct device *dev, struct xhci_hcd *xhci) | ||
541 | |||
542 | /* Look for vendor-specific quirks */ | ||
543 | if (pdev->vendor == PCI_VENDOR_ID_FRESCO_LOGIC && | ||
544 | - pdev->device == PCI_DEVICE_ID_FRESCO_LOGIC_PDK) { | ||
545 | - if (pdev->revision == 0x0) { | ||
546 | + (pdev->device == PCI_DEVICE_ID_FRESCO_LOGIC_PDK || | ||
547 | + pdev->device == PCI_DEVICE_ID_FRESCO_LOGIC_FL1400)) { | ||
548 | + if (pdev->device == PCI_DEVICE_ID_FRESCO_LOGIC_PDK && | ||
549 | + pdev->revision == 0x0) { | ||
550 | xhci->quirks |= XHCI_RESET_EP_QUIRK; | ||
551 | xhci_dbg(xhci, "QUIRK: Fresco Logic xHC needs configure" | ||
552 | " endpoint cmd after reset endpoint\n"); | ||
553 | diff --git a/drivers/usb/serial/cp210x.c b/drivers/usb/serial/cp210x.c | ||
554 | index 53e7e69..f38a278 100644 | ||
555 | --- a/drivers/usb/serial/cp210x.c | ||
556 | +++ b/drivers/usb/serial/cp210x.c | ||
557 | @@ -120,6 +120,7 @@ static const struct usb_device_id id_table[] = { | ||
558 | { USB_DEVICE(0x10C4, 0x8477) }, /* Balluff RFID */ | ||
559 | { USB_DEVICE(0x10C4, 0x85EA) }, /* AC-Services IBUS-IF */ | ||
560 | { USB_DEVICE(0x10C4, 0x85EB) }, /* AC-Services CIS-IBUS */ | ||
561 | + { USB_DEVICE(0x10C4, 0x85F8) }, /* Virtenio Preon32 */ | ||
562 | { USB_DEVICE(0x10C4, 0x8664) }, /* AC-Services CAN-IF */ | ||
563 | { USB_DEVICE(0x10C4, 0x8665) }, /* AC-Services OBD-IF */ | ||
564 | { USB_DEVICE(0x10C4, 0xEA60) }, /* Silicon Labs factory default */ | ||
565 | diff --git a/drivers/usb/serial/ftdi_sio.c b/drivers/usb/serial/ftdi_sio.c | ||
566 | index 25bb935..25903f5 100644 | ||
567 | --- a/drivers/usb/serial/ftdi_sio.c | ||
568 | +++ b/drivers/usb/serial/ftdi_sio.c | ||
569 | @@ -197,6 +197,7 @@ static struct usb_device_id id_table_combined [] = { | ||
570 | { USB_DEVICE(FTDI_VID, FTDI_OPENDCC_THROTTLE_PID) }, | ||
571 | { USB_DEVICE(FTDI_VID, FTDI_OPENDCC_GATEWAY_PID) }, | ||
572 | { USB_DEVICE(FTDI_VID, FTDI_OPENDCC_GBM_PID) }, | ||
573 | + { USB_DEVICE(NEWPORT_VID, NEWPORT_AGILIS_PID) }, | ||
574 | { USB_DEVICE(INTERBIOMETRICS_VID, INTERBIOMETRICS_IOBOARD_PID) }, | ||
575 | { USB_DEVICE(INTERBIOMETRICS_VID, INTERBIOMETRICS_MINI_IOBOARD_PID) }, | ||
576 | { USB_DEVICE(FTDI_VID, FTDI_SPROG_II) }, | ||
577 | @@ -1810,7 +1811,7 @@ static int ftdi_8u2232c_probe(struct usb_serial *serial) | ||
578 | dbg("%s", __func__); | ||
579 | |||
580 | if ((udev->manufacturer && !strcmp(udev->manufacturer, "CALAO Systems")) || | ||
581 | - (udev->product && !strcmp(udev->product, "BeagleBone/XDS100"))) | ||
582 | + (udev->product && !strcmp(udev->product, "BeagleBone/XDS100V2"))) | ||
583 | return ftdi_jtag_probe(serial); | ||
584 | |||
585 | return 0; | ||
586 | diff --git a/drivers/usb/serial/ftdi_sio_ids.h b/drivers/usb/serial/ftdi_sio_ids.h | ||
587 | index 57c12ef..049b6e7 100644 | ||
588 | --- a/drivers/usb/serial/ftdi_sio_ids.h | ||
589 | +++ b/drivers/usb/serial/ftdi_sio_ids.h | ||
590 | @@ -752,6 +752,12 @@ | ||
591 | #define TTI_VID 0x103E /* Vendor Id */ | ||
592 | #define TTI_QL355P_PID 0x03E8 /* TTi QL355P power supply */ | ||
593 | |||
594 | +/* | ||
595 | + * Newport Cooperation (www.newport.com) | ||
596 | + */ | ||
597 | +#define NEWPORT_VID 0x104D | ||
598 | +#define NEWPORT_AGILIS_PID 0x3000 | ||
599 | + | ||
600 | /* Interbiometrics USB I/O Board */ | ||
601 | /* Developed for Interbiometrics by Rudolf Gugler */ | ||
602 | #define INTERBIOMETRICS_VID 0x1209 | ||
603 | diff --git a/drivers/usb/serial/option.c b/drivers/usb/serial/option.c | ||
604 | index 43aa36b..0c3d290 100644 | ||
605 | --- a/drivers/usb/serial/option.c | ||
606 | +++ b/drivers/usb/serial/option.c | ||
607 | @@ -80,6 +80,7 @@ static void option_instat_callback(struct urb *urb); | ||
608 | #define OPTION_PRODUCT_GTM380_MODEM 0x7201 | ||
609 | |||
610 | #define HUAWEI_VENDOR_ID 0x12D1 | ||
611 | +#define HUAWEI_PRODUCT_E173 0x140C | ||
612 | #define HUAWEI_PRODUCT_K4505 0x1464 | ||
613 | #define HUAWEI_PRODUCT_K3765 0x1465 | ||
614 | #define HUAWEI_PRODUCT_K4605 0x14C6 | ||
615 | @@ -552,6 +553,8 @@ static const struct usb_device_id option_ids[] = { | ||
616 | { USB_DEVICE(QUANTA_VENDOR_ID, QUANTA_PRODUCT_GLX) }, | ||
617 | { USB_DEVICE(QUANTA_VENDOR_ID, QUANTA_PRODUCT_GKE) }, | ||
618 | { USB_DEVICE(QUANTA_VENDOR_ID, QUANTA_PRODUCT_GLE) }, | ||
619 | + { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E173, 0xff, 0xff, 0xff), | ||
620 | + .driver_info = (kernel_ulong_t) &net_intf1_blacklist }, | ||
621 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_K4505, 0xff, 0xff, 0xff), | ||
622 | .driver_info = (kernel_ulong_t) &huawei_cdc12_blacklist }, | ||
623 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_K3765, 0xff, 0xff, 0xff), | ||
624 | @@ -883,6 +886,10 @@ static const struct usb_device_id option_ids[] = { | ||
625 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0126, 0xff, 0xff, 0xff), | ||
626 | .driver_info = (kernel_ulong_t)&net_intf5_blacklist }, | ||
627 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0128, 0xff, 0xff, 0xff) }, | ||
628 | + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0135, 0xff, 0xff, 0xff) }, | ||
629 | + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0136, 0xff, 0xff, 0xff) }, | ||
630 | + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0137, 0xff, 0xff, 0xff) }, | ||
631 | + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0139, 0xff, 0xff, 0xff) }, | ||
632 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0142, 0xff, 0xff, 0xff) }, | ||
633 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0143, 0xff, 0xff, 0xff) }, | ||
634 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0144, 0xff, 0xff, 0xff) }, | ||
635 | @@ -903,20 +910,34 @@ static const struct usb_device_id option_ids[] = { | ||
636 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0165, 0xff, 0xff, 0xff) }, | ||
637 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0167, 0xff, 0xff, 0xff), | ||
638 | .driver_info = (kernel_ulong_t)&net_intf4_blacklist }, | ||
639 | + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0189, 0xff, 0xff, 0xff) }, | ||
640 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0191, 0xff, 0xff, 0xff), /* ZTE EuFi890 */ | ||
641 | .driver_info = (kernel_ulong_t)&net_intf4_blacklist }, | ||
642 | + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0196, 0xff, 0xff, 0xff) }, | ||
643 | + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0197, 0xff, 0xff, 0xff) }, | ||
644 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0199, 0xff, 0xff, 0xff), /* ZTE MF820S */ | ||
645 | .driver_info = (kernel_ulong_t)&net_intf1_blacklist }, | ||
646 | + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0200, 0xff, 0xff, 0xff) }, | ||
647 | + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0201, 0xff, 0xff, 0xff) }, | ||
648 | + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0254, 0xff, 0xff, 0xff) }, | ||
649 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0257, 0xff, 0xff, 0xff), /* ZTE MF821 */ | ||
650 | .driver_info = (kernel_ulong_t)&net_intf3_blacklist }, | ||
651 | + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0265, 0xff, 0xff, 0xff) }, | ||
652 | + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0284, 0xff, 0xff, 0xff) }, | ||
653 | + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0317, 0xff, 0xff, 0xff) }, | ||
654 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0326, 0xff, 0xff, 0xff), | ||
655 | .driver_info = (kernel_ulong_t)&net_intf4_blacklist }, | ||
656 | + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0330, 0xff, 0xff, 0xff) }, | ||
657 | + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0395, 0xff, 0xff, 0xff) }, | ||
658 | + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0414, 0xff, 0xff, 0xff) }, | ||
659 | + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0417, 0xff, 0xff, 0xff) }, | ||
660 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1008, 0xff, 0xff, 0xff), | ||
661 | .driver_info = (kernel_ulong_t)&net_intf4_blacklist }, | ||
662 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1010, 0xff, 0xff, 0xff), | ||
663 | .driver_info = (kernel_ulong_t)&net_intf4_blacklist }, | ||
664 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1012, 0xff, 0xff, 0xff), | ||
665 | .driver_info = (kernel_ulong_t)&net_intf4_blacklist }, | ||
666 | + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1018, 0xff, 0xff, 0xff) }, | ||
667 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1021, 0xff, 0xff, 0xff), | ||
668 | .driver_info = (kernel_ulong_t)&net_intf2_blacklist }, | ||
669 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1057, 0xff, 0xff, 0xff) }, | ||
670 | @@ -1096,6 +1117,10 @@ static const struct usb_device_id option_ids[] = { | ||
671 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1298, 0xff, 0xff, 0xff) }, | ||
672 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1299, 0xff, 0xff, 0xff) }, | ||
673 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1300, 0xff, 0xff, 0xff) }, | ||
674 | + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1301, 0xff, 0xff, 0xff) }, | ||
675 | + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1302, 0xff, 0xff, 0xff) }, | ||
676 | + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1303, 0xff, 0xff, 0xff) }, | ||
677 | + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1333, 0xff, 0xff, 0xff) }, | ||
678 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1401, 0xff, 0xff, 0xff), | ||
679 | .driver_info = (kernel_ulong_t)&net_intf2_blacklist }, | ||
680 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1402, 0xff, 0xff, 0xff), | ||
681 | diff --git a/drivers/usb/storage/Kconfig b/drivers/usb/storage/Kconfig | ||
682 | index 7691c86..685edc8 100644 | ||
683 | --- a/drivers/usb/storage/Kconfig | ||
684 | +++ b/drivers/usb/storage/Kconfig | ||
685 | @@ -203,7 +203,7 @@ config USB_STORAGE_ENE_UB6250 | ||
686 | |||
687 | config USB_UAS | ||
688 | tristate "USB Attached SCSI" | ||
689 | - depends on USB && SCSI | ||
690 | + depends on USB && SCSI && BROKEN | ||
691 | help | ||
692 | The USB Attached SCSI protocol is supported by some USB | ||
693 | storage devices. It permits higher performance by supporting | ||
694 | diff --git a/include/linux/mempolicy.h b/include/linux/mempolicy.h | ||
695 | index 0abf1d4..fe07e5a 100644 | ||
696 | --- a/include/linux/mempolicy.h | ||
697 | +++ b/include/linux/mempolicy.h | ||
698 | @@ -137,16 +137,6 @@ static inline void mpol_cond_put(struct mempolicy *pol) | ||
699 | __mpol_put(pol); | ||
700 | } | ||
701 | |||
702 | -extern struct mempolicy *__mpol_cond_copy(struct mempolicy *tompol, | ||
703 | - struct mempolicy *frompol); | ||
704 | -static inline struct mempolicy *mpol_cond_copy(struct mempolicy *tompol, | ||
705 | - struct mempolicy *frompol) | ||
706 | -{ | ||
707 | - if (!frompol) | ||
708 | - return frompol; | ||
709 | - return __mpol_cond_copy(tompol, frompol); | ||
710 | -} | ||
711 | - | ||
712 | extern struct mempolicy *__mpol_dup(struct mempolicy *pol); | ||
713 | static inline struct mempolicy *mpol_dup(struct mempolicy *pol) | ||
714 | { | ||
715 | @@ -270,12 +260,6 @@ static inline void mpol_cond_put(struct mempolicy *pol) | ||
716 | { | ||
717 | } | ||
718 | |||
719 | -static inline struct mempolicy *mpol_cond_copy(struct mempolicy *to, | ||
720 | - struct mempolicy *from) | ||
721 | -{ | ||
722 | - return from; | ||
723 | -} | ||
724 | - | ||
725 | static inline void mpol_get(struct mempolicy *pol) | ||
726 | { | ||
727 | } | ||
728 | diff --git a/kernel/rcutree.c b/kernel/rcutree.c | ||
729 | index 4eec66e..62c5e9c 100644 | ||
730 | --- a/kernel/rcutree.c | ||
731 | +++ b/kernel/rcutree.c | ||
732 | @@ -202,13 +202,13 @@ DEFINE_PER_CPU(struct rcu_dynticks, rcu_dynticks) = { | ||
733 | .dynticks = ATOMIC_INIT(1), | ||
734 | }; | ||
735 | |||
736 | -static int blimit = 10; /* Maximum callbacks per rcu_do_batch. */ | ||
737 | -static int qhimark = 10000; /* If this many pending, ignore blimit. */ | ||
738 | -static int qlowmark = 100; /* Once only this many pending, use blimit. */ | ||
739 | +static long blimit = 10; /* Maximum callbacks per rcu_do_batch. */ | ||
740 | +static long qhimark = 10000; /* If this many pending, ignore blimit. */ | ||
741 | +static long qlowmark = 100; /* Once only this many pending, use blimit. */ | ||
742 | |||
743 | -module_param(blimit, int, 0); | ||
744 | -module_param(qhimark, int, 0); | ||
745 | -module_param(qlowmark, int, 0); | ||
746 | +module_param(blimit, long, 0); | ||
747 | +module_param(qhimark, long, 0); | ||
748 | +module_param(qlowmark, long, 0); | ||
749 | |||
750 | int rcu_cpu_stall_suppress __read_mostly; /* 1 = suppress stall warnings. */ | ||
751 | int rcu_cpu_stall_timeout __read_mostly = CONFIG_RCU_CPU_STALL_TIMEOUT; | ||
752 | @@ -1476,7 +1476,7 @@ static void rcu_do_batch(struct rcu_state *rsp, struct rcu_data *rdp) | ||
753 | { | ||
754 | unsigned long flags; | ||
755 | struct rcu_head *next, *list, **tail; | ||
756 | - int bl, count, count_lazy; | ||
757 | + long bl, count, count_lazy; | ||
758 | |||
759 | /* If no callbacks are ready, just return.*/ | ||
760 | if (!cpu_has_callbacks_ready_to_invoke(rdp)) { | ||
761 | diff --git a/kernel/trace/ftrace.c b/kernel/trace/ftrace.c | ||
762 | index 0fa92f6..100b7fd 100644 | ||
763 | --- a/kernel/trace/ftrace.c | ||
764 | +++ b/kernel/trace/ftrace.c | ||
765 | @@ -2368,7 +2368,7 @@ static void reset_iter_read(struct ftrace_iterator *iter) | ||
766 | { | ||
767 | iter->pos = 0; | ||
768 | iter->func_pos = 0; | ||
769 | - iter->flags &= ~(FTRACE_ITER_PRINTALL & FTRACE_ITER_HASH); | ||
770 | + iter->flags &= ~(FTRACE_ITER_PRINTALL | FTRACE_ITER_HASH); | ||
771 | } | ||
772 | |||
773 | static void *t_start(struct seq_file *m, loff_t *pos) | ||
774 | diff --git a/kernel/workqueue.c b/kernel/workqueue.c | ||
775 | index bcb9d34..a64b94e 100644 | ||
776 | --- a/kernel/workqueue.c | ||
777 | +++ b/kernel/workqueue.c | ||
778 | @@ -1141,8 +1141,8 @@ int queue_delayed_work_on(int cpu, struct workqueue_struct *wq, | ||
779 | if (!test_and_set_bit(WORK_STRUCT_PENDING_BIT, work_data_bits(work))) { | ||
780 | unsigned int lcpu; | ||
781 | |||
782 | - BUG_ON(timer_pending(timer)); | ||
783 | - BUG_ON(!list_empty(&work->entry)); | ||
784 | + WARN_ON_ONCE(timer_pending(timer)); | ||
785 | + WARN_ON_ONCE(!list_empty(&work->entry)); | ||
786 | |||
787 | timer_stats_timer_set_start_info(&dwork->timer); | ||
788 | |||
789 | diff --git a/mm/dmapool.c b/mm/dmapool.c | ||
790 | index c5ab33b..da1b0f0 100644 | ||
791 | --- a/mm/dmapool.c | ||
792 | +++ b/mm/dmapool.c | ||
793 | @@ -50,7 +50,6 @@ struct dma_pool { /* the pool */ | ||
794 | size_t allocation; | ||
795 | size_t boundary; | ||
796 | char name[32]; | ||
797 | - wait_queue_head_t waitq; | ||
798 | struct list_head pools; | ||
799 | }; | ||
800 | |||
801 | @@ -62,8 +61,6 @@ struct dma_page { /* cacheable header for 'allocation' bytes */ | ||
802 | unsigned int offset; | ||
803 | }; | ||
804 | |||
805 | -#define POOL_TIMEOUT_JIFFIES ((100 /* msec */ * HZ) / 1000) | ||
806 | - | ||
807 | static DEFINE_MUTEX(pools_lock); | ||
808 | |||
809 | static ssize_t | ||
810 | @@ -172,7 +169,6 @@ struct dma_pool *dma_pool_create(const char *name, struct device *dev, | ||
811 | retval->size = size; | ||
812 | retval->boundary = boundary; | ||
813 | retval->allocation = allocation; | ||
814 | - init_waitqueue_head(&retval->waitq); | ||
815 | |||
816 | if (dev) { | ||
817 | int ret; | ||
818 | @@ -227,7 +223,6 @@ static struct dma_page *pool_alloc_page(struct dma_pool *pool, gfp_t mem_flags) | ||
819 | memset(page->vaddr, POOL_POISON_FREED, pool->allocation); | ||
820 | #endif | ||
821 | pool_initialise_page(pool, page); | ||
822 | - list_add(&page->page_list, &pool->page_list); | ||
823 | page->in_use = 0; | ||
824 | page->offset = 0; | ||
825 | } else { | ||
826 | @@ -315,30 +310,21 @@ void *dma_pool_alloc(struct dma_pool *pool, gfp_t mem_flags, | ||
827 | might_sleep_if(mem_flags & __GFP_WAIT); | ||
828 | |||
829 | spin_lock_irqsave(&pool->lock, flags); | ||
830 | - restart: | ||
831 | list_for_each_entry(page, &pool->page_list, page_list) { | ||
832 | if (page->offset < pool->allocation) | ||
833 | goto ready; | ||
834 | } | ||
835 | - page = pool_alloc_page(pool, GFP_ATOMIC); | ||
836 | - if (!page) { | ||
837 | - if (mem_flags & __GFP_WAIT) { | ||
838 | - DECLARE_WAITQUEUE(wait, current); | ||
839 | |||
840 | - __set_current_state(TASK_UNINTERRUPTIBLE); | ||
841 | - __add_wait_queue(&pool->waitq, &wait); | ||
842 | - spin_unlock_irqrestore(&pool->lock, flags); | ||
843 | + /* pool_alloc_page() might sleep, so temporarily drop &pool->lock */ | ||
844 | + spin_unlock_irqrestore(&pool->lock, flags); | ||
845 | |||
846 | - schedule_timeout(POOL_TIMEOUT_JIFFIES); | ||
847 | + page = pool_alloc_page(pool, mem_flags); | ||
848 | + if (!page) | ||
849 | + return NULL; | ||
850 | |||
851 | - spin_lock_irqsave(&pool->lock, flags); | ||
852 | - __remove_wait_queue(&pool->waitq, &wait); | ||
853 | - goto restart; | ||
854 | - } | ||
855 | - retval = NULL; | ||
856 | - goto done; | ||
857 | - } | ||
858 | + spin_lock_irqsave(&pool->lock, flags); | ||
859 | |||
860 | + list_add(&page->page_list, &pool->page_list); | ||
861 | ready: | ||
862 | page->in_use++; | ||
863 | offset = page->offset; | ||
864 | @@ -348,7 +334,6 @@ void *dma_pool_alloc(struct dma_pool *pool, gfp_t mem_flags, | ||
865 | #ifdef DMAPOOL_DEBUG | ||
866 | memset(retval, POOL_POISON_ALLOCATED, pool->size); | ||
867 | #endif | ||
868 | - done: | ||
869 | spin_unlock_irqrestore(&pool->lock, flags); | ||
870 | return retval; | ||
871 | } | ||
872 | @@ -435,8 +420,6 @@ void dma_pool_free(struct dma_pool *pool, void *vaddr, dma_addr_t dma) | ||
873 | page->in_use--; | ||
874 | *(int *)vaddr = page->offset; | ||
875 | page->offset = offset; | ||
876 | - if (waitqueue_active(&pool->waitq)) | ||
877 | - wake_up_locked(&pool->waitq); | ||
878 | /* | ||
879 | * Resist a temptation to do | ||
880 | * if (!is_page_busy(page)) pool_free_page(pool, page); | ||
881 | diff --git a/mm/mempolicy.c b/mm/mempolicy.c | ||
882 | index d1e4bef..458dede 100644 | ||
883 | --- a/mm/mempolicy.c | ||
884 | +++ b/mm/mempolicy.c | ||
885 | @@ -2009,28 +2009,6 @@ struct mempolicy *__mpol_dup(struct mempolicy *old) | ||
886 | return new; | ||
887 | } | ||
888 | |||
889 | -/* | ||
890 | - * If *frompol needs [has] an extra ref, copy *frompol to *tompol , | ||
891 | - * eliminate the * MPOL_F_* flags that require conditional ref and | ||
892 | - * [NOTE!!!] drop the extra ref. Not safe to reference *frompol directly | ||
893 | - * after return. Use the returned value. | ||
894 | - * | ||
895 | - * Allows use of a mempolicy for, e.g., multiple allocations with a single | ||
896 | - * policy lookup, even if the policy needs/has extra ref on lookup. | ||
897 | - * shmem_readahead needs this. | ||
898 | - */ | ||
899 | -struct mempolicy *__mpol_cond_copy(struct mempolicy *tompol, | ||
900 | - struct mempolicy *frompol) | ||
901 | -{ | ||
902 | - if (!mpol_needs_cond_ref(frompol)) | ||
903 | - return frompol; | ||
904 | - | ||
905 | - *tompol = *frompol; | ||
906 | - tompol->flags &= ~MPOL_F_SHARED; /* copy doesn't need unref */ | ||
907 | - __mpol_put(frompol); | ||
908 | - return tompol; | ||
909 | -} | ||
910 | - | ||
911 | /* Slow path of a mempolicy comparison */ | ||
912 | bool __mpol_equal(struct mempolicy *a, struct mempolicy *b) | ||
913 | { | ||
914 | diff --git a/mm/shmem.c b/mm/shmem.c | ||
915 | index a859b06..a409bd8 100644 | ||
916 | --- a/mm/shmem.c | ||
917 | +++ b/mm/shmem.c | ||
918 | @@ -798,24 +798,28 @@ static struct mempolicy *shmem_get_sbmpol(struct shmem_sb_info *sbinfo) | ||
919 | static struct page *shmem_swapin(swp_entry_t swap, gfp_t gfp, | ||
920 | struct shmem_inode_info *info, pgoff_t index) | ||
921 | { | ||
922 | - struct mempolicy mpol, *spol; | ||
923 | struct vm_area_struct pvma; | ||
924 | - | ||
925 | - spol = mpol_cond_copy(&mpol, | ||
926 | - mpol_shared_policy_lookup(&info->policy, index)); | ||
927 | + struct page *page; | ||
928 | |||
929 | /* Create a pseudo vma that just contains the policy */ | ||
930 | pvma.vm_start = 0; | ||
931 | pvma.vm_pgoff = index; | ||
932 | pvma.vm_ops = NULL; | ||
933 | - pvma.vm_policy = spol; | ||
934 | - return swapin_readahead(swap, gfp, &pvma, 0); | ||
935 | + pvma.vm_policy = mpol_shared_policy_lookup(&info->policy, index); | ||
936 | + | ||
937 | + page = swapin_readahead(swap, gfp, &pvma, 0); | ||
938 | + | ||
939 | + /* Drop reference taken by mpol_shared_policy_lookup() */ | ||
940 | + mpol_cond_put(pvma.vm_policy); | ||
941 | + | ||
942 | + return page; | ||
943 | } | ||
944 | |||
945 | static struct page *shmem_alloc_page(gfp_t gfp, | ||
946 | struct shmem_inode_info *info, pgoff_t index) | ||
947 | { | ||
948 | struct vm_area_struct pvma; | ||
949 | + struct page *page; | ||
950 | |||
951 | /* Create a pseudo vma that just contains the policy */ | ||
952 | pvma.vm_start = 0; | ||
953 | @@ -823,10 +827,12 @@ static struct page *shmem_alloc_page(gfp_t gfp, | ||
954 | pvma.vm_ops = NULL; | ||
955 | pvma.vm_policy = mpol_shared_policy_lookup(&info->policy, index); | ||
956 | |||
957 | - /* | ||
958 | - * alloc_page_vma() will drop the shared policy reference | ||
959 | - */ | ||
960 | - return alloc_page_vma(gfp, &pvma, 0); | ||
961 | + page = alloc_page_vma(gfp, &pvma, 0); | ||
962 | + | ||
963 | + /* Drop reference taken by mpol_shared_policy_lookup() */ | ||
964 | + mpol_cond_put(pvma.vm_policy); | ||
965 | + | ||
966 | + return page; | ||
967 | } | ||
968 | #else /* !CONFIG_NUMA */ | ||
969 | #ifdef CONFIG_TMPFS | ||
970 | diff --git a/sound/soc/Makefile b/sound/soc/Makefile | ||
971 | index 2feaf37..0f37086 100644 | ||
972 | --- a/sound/soc/Makefile | ||
973 | +++ b/sound/soc/Makefile | ||
974 | @@ -1,8 +1,9 @@ | ||
975 | snd-soc-core-objs := soc-core.o soc-dapm.o soc-jack.o soc-cache.o soc-utils.o | ||
976 | snd-soc-core-objs += soc-pcm.o soc-io.o | ||
977 | |||
978 | -snd-soc-dmaengine-pcm-objs := soc-dmaengine-pcm.o | ||
979 | -obj-$(CONFIG_SND_SOC_DMAENGINE_PCM) += snd-soc-dmaengine-pcm.o | ||
980 | +ifneq ($(CONFIG_SND_SOC_DMAENGINE_PCM),) | ||
981 | +snd-soc-core-objs += soc-dmaengine-pcm.o | ||
982 | +endif | ||
983 | |||
984 | obj-$(CONFIG_SND_SOC) += snd-soc-core.o | ||
985 | obj-$(CONFIG_SND_SOC) += codecs/ | ||
986 | diff --git a/tools/perf/builtin-test.c b/tools/perf/builtin-test.c | ||
987 | index 223ffdc..3487b4b 100644 | ||
988 | --- a/tools/perf/builtin-test.c | ||
989 | +++ b/tools/perf/builtin-test.c | ||
990 | @@ -1154,19 +1154,13 @@ static int test__parse_events(void) | ||
991 | return ret; | ||
992 | } | ||
993 | |||
994 | -static int sched__get_first_possible_cpu(pid_t pid, cpu_set_t **maskp, | ||
995 | - size_t *sizep) | ||
996 | +static int sched__get_first_possible_cpu(pid_t pid, cpu_set_t *maskp) | ||
997 | { | ||
998 | - cpu_set_t *mask; | ||
999 | - size_t size; | ||
1000 | int i, cpu = -1, nrcpus = 1024; | ||
1001 | realloc: | ||
1002 | - mask = CPU_ALLOC(nrcpus); | ||
1003 | - size = CPU_ALLOC_SIZE(nrcpus); | ||
1004 | - CPU_ZERO_S(size, mask); | ||
1005 | + CPU_ZERO(maskp); | ||
1006 | |||
1007 | - if (sched_getaffinity(pid, size, mask) == -1) { | ||
1008 | - CPU_FREE(mask); | ||
1009 | + if (sched_getaffinity(pid, sizeof(*maskp), maskp) == -1) { | ||
1010 | if (errno == EINVAL && nrcpus < (1024 << 8)) { | ||
1011 | nrcpus = nrcpus << 2; | ||
1012 | goto realloc; | ||
1013 | @@ -1176,19 +1170,14 @@ realloc: | ||
1014 | } | ||
1015 | |||
1016 | for (i = 0; i < nrcpus; i++) { | ||
1017 | - if (CPU_ISSET_S(i, size, mask)) { | ||
1018 | - if (cpu == -1) { | ||
1019 | + if (CPU_ISSET(i, maskp)) { | ||
1020 | + if (cpu == -1) | ||
1021 | cpu = i; | ||
1022 | - *maskp = mask; | ||
1023 | - *sizep = size; | ||
1024 | - } else | ||
1025 | - CPU_CLR_S(i, size, mask); | ||
1026 | + else | ||
1027 | + CPU_CLR(i, maskp); | ||
1028 | } | ||
1029 | } | ||
1030 | |||
1031 | - if (cpu == -1) | ||
1032 | - CPU_FREE(mask); | ||
1033 | - | ||
1034 | return cpu; | ||
1035 | } | ||
1036 | |||
1037 | @@ -1199,8 +1188,8 @@ static int test__PERF_RECORD(void) | ||
1038 | .freq = 10, | ||
1039 | .mmap_pages = 256, | ||
1040 | }; | ||
1041 | - cpu_set_t *cpu_mask = NULL; | ||
1042 | - size_t cpu_mask_size = 0; | ||
1043 | + cpu_set_t cpu_mask; | ||
1044 | + size_t cpu_mask_size = sizeof(cpu_mask); | ||
1045 | struct perf_evlist *evlist = perf_evlist__new(NULL, NULL); | ||
1046 | struct perf_evsel *evsel; | ||
1047 | struct perf_sample sample; | ||
1048 | @@ -1265,8 +1254,7 @@ static int test__PERF_RECORD(void) | ||
1049 | evsel->attr.sample_type |= PERF_SAMPLE_TIME; | ||
1050 | perf_evlist__config_attrs(evlist, &opts); | ||
1051 | |||
1052 | - err = sched__get_first_possible_cpu(evlist->workload.pid, &cpu_mask, | ||
1053 | - &cpu_mask_size); | ||
1054 | + err = sched__get_first_possible_cpu(evlist->workload.pid, &cpu_mask); | ||
1055 | if (err < 0) { | ||
1056 | pr_debug("sched__get_first_possible_cpu: %s\n", strerror(errno)); | ||
1057 | goto out_delete_evlist; | ||
1058 | @@ -1277,9 +1265,9 @@ static int test__PERF_RECORD(void) | ||
1059 | /* | ||
1060 | * So that we can check perf_sample.cpu on all the samples. | ||
1061 | */ | ||
1062 | - if (sched_setaffinity(evlist->workload.pid, cpu_mask_size, cpu_mask) < 0) { | ||
1063 | + if (sched_setaffinity(evlist->workload.pid, cpu_mask_size, &cpu_mask) < 0) { | ||
1064 | pr_debug("sched_setaffinity: %s\n", strerror(errno)); | ||
1065 | - goto out_free_cpu_mask; | ||
1066 | + goto out_delete_evlist; | ||
1067 | } | ||
1068 | |||
1069 | /* | ||
1070 | @@ -1472,8 +1460,6 @@ found_exit: | ||
1071 | } | ||
1072 | out_err: | ||
1073 | perf_evlist__munmap(evlist); | ||
1074 | -out_free_cpu_mask: | ||
1075 | - CPU_FREE(cpu_mask); | ||
1076 | out_delete_evlist: | ||
1077 | perf_evlist__delete(evlist); | ||
1078 | out: |