Contents of /trunk/kernel-alx/patches-3.4/0123-3.4.24-all-fixes.patch
Parent Directory | Revision Log
Revision 2110 -
(show annotations)
(download)
Tue Mar 12 12:15:23 2013 UTC (11 years, 6 months ago) by niro
File size: 39121 byte(s)
Tue Mar 12 12:15:23 2013 UTC (11 years, 6 months ago) by niro
File size: 39121 byte(s)
-sync with upstream
1 | 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: |