Annotation of /trunk/kernel-lts/patches-3.4/0134-3.4.35-all-fixes.patch
Parent Directory | Revision Log
Revision 2089 -
(hide annotations)
(download)
Tue Mar 5 09:00:56 2013 UTC (11 years, 6 months ago) by niro
File size: 46737 byte(s)
Tue Mar 5 09:00:56 2013 UTC (11 years, 6 months ago) by niro
File size: 46737 byte(s)
-linux-3.4.35
1 | niro | 2089 | diff --git a/Documentation/kernel-parameters.txt b/Documentation/kernel-parameters.txt |
2 | index c1601e5..753d18a 100644 | ||
3 | --- a/Documentation/kernel-parameters.txt | ||
4 | +++ b/Documentation/kernel-parameters.txt | ||
5 | @@ -557,6 +557,8 @@ bytes respectively. Such letter suffixes can also be entirely omitted. | ||
6 | UART at the specified I/O port or MMIO address, | ||
7 | switching to the matching ttyS device later. The | ||
8 | options are the same as for ttyS, above. | ||
9 | + hvc<n> Use the hypervisor console device <n>. This is for | ||
10 | + both Xen and PowerPC hypervisors. | ||
11 | |||
12 | If the device connected to the port is not a TTY but a braille | ||
13 | device, prepend "brl," before the device type, for instance | ||
14 | @@ -742,6 +744,7 @@ bytes respectively. Such letter suffixes can also be entirely omitted. | ||
15 | |||
16 | earlyprintk= [X86,SH,BLACKFIN] | ||
17 | earlyprintk=vga | ||
18 | + earlyprintk=xen | ||
19 | earlyprintk=serial[,ttySn[,baudrate]] | ||
20 | earlyprintk=ttySn[,baudrate] | ||
21 | earlyprintk=dbgp[debugController#] | ||
22 | @@ -759,6 +762,8 @@ bytes respectively. Such letter suffixes can also be entirely omitted. | ||
23 | The VGA output is eventually overwritten by the real | ||
24 | console. | ||
25 | |||
26 | + The xen output can only be used by Xen PV guests. | ||
27 | + | ||
28 | ekgdboc= [X86,KGDB] Allow early kernel console debugging | ||
29 | ekgdboc=kbd | ||
30 | |||
31 | diff --git a/arch/x86/kernel/head.c b/arch/x86/kernel/head.c | ||
32 | index 48d9d4e..992f442 100644 | ||
33 | --- a/arch/x86/kernel/head.c | ||
34 | +++ b/arch/x86/kernel/head.c | ||
35 | @@ -5,8 +5,6 @@ | ||
36 | #include <asm/setup.h> | ||
37 | #include <asm/bios_ebda.h> | ||
38 | |||
39 | -#define BIOS_LOWMEM_KILOBYTES 0x413 | ||
40 | - | ||
41 | /* | ||
42 | * The BIOS places the EBDA/XBDA at the top of conventional | ||
43 | * memory, and usually decreases the reported amount of | ||
44 | @@ -16,17 +14,30 @@ | ||
45 | * chipset: reserve a page before VGA to prevent PCI prefetch | ||
46 | * into it (errata #56). Usually the page is reserved anyways, | ||
47 | * unless you have no PS/2 mouse plugged in. | ||
48 | + * | ||
49 | + * This functions is deliberately very conservative. Losing | ||
50 | + * memory in the bottom megabyte is rarely a problem, as long | ||
51 | + * as we have enough memory to install the trampoline. Using | ||
52 | + * memory that is in use by the BIOS or by some DMA device | ||
53 | + * the BIOS didn't shut down *is* a big problem. | ||
54 | */ | ||
55 | + | ||
56 | +#define BIOS_LOWMEM_KILOBYTES 0x413 | ||
57 | +#define LOWMEM_CAP 0x9f000U /* Absolute maximum */ | ||
58 | +#define INSANE_CUTOFF 0x20000U /* Less than this = insane */ | ||
59 | + | ||
60 | void __init reserve_ebda_region(void) | ||
61 | { | ||
62 | unsigned int lowmem, ebda_addr; | ||
63 | |||
64 | - /* To determine the position of the EBDA and the */ | ||
65 | - /* end of conventional memory, we need to look at */ | ||
66 | - /* the BIOS data area. In a paravirtual environment */ | ||
67 | - /* that area is absent. We'll just have to assume */ | ||
68 | - /* that the paravirt case can handle memory setup */ | ||
69 | - /* correctly, without our help. */ | ||
70 | + /* | ||
71 | + * To determine the position of the EBDA and the | ||
72 | + * end of conventional memory, we need to look at | ||
73 | + * the BIOS data area. In a paravirtual environment | ||
74 | + * that area is absent. We'll just have to assume | ||
75 | + * that the paravirt case can handle memory setup | ||
76 | + * correctly, without our help. | ||
77 | + */ | ||
78 | if (paravirt_enabled()) | ||
79 | return; | ||
80 | |||
81 | @@ -37,19 +48,23 @@ void __init reserve_ebda_region(void) | ||
82 | /* start of EBDA area */ | ||
83 | ebda_addr = get_bios_ebda(); | ||
84 | |||
85 | - /* Fixup: bios puts an EBDA in the top 64K segment */ | ||
86 | - /* of conventional memory, but does not adjust lowmem. */ | ||
87 | - if ((lowmem - ebda_addr) <= 0x10000) | ||
88 | - lowmem = ebda_addr; | ||
89 | + /* | ||
90 | + * Note: some old Dells seem to need 4k EBDA without | ||
91 | + * reporting so, so just consider the memory above 0x9f000 | ||
92 | + * to be off limits (bugzilla 2990). | ||
93 | + */ | ||
94 | + | ||
95 | + /* If the EBDA address is below 128K, assume it is bogus */ | ||
96 | + if (ebda_addr < INSANE_CUTOFF) | ||
97 | + ebda_addr = LOWMEM_CAP; | ||
98 | |||
99 | - /* Fixup: bios does not report an EBDA at all. */ | ||
100 | - /* Some old Dells seem to need 4k anyhow (bugzilla 2990) */ | ||
101 | - if ((ebda_addr == 0) && (lowmem >= 0x9f000)) | ||
102 | - lowmem = 0x9f000; | ||
103 | + /* If lowmem is less than 128K, assume it is bogus */ | ||
104 | + if (lowmem < INSANE_CUTOFF) | ||
105 | + lowmem = LOWMEM_CAP; | ||
106 | |||
107 | - /* Paranoia: should never happen, but... */ | ||
108 | - if ((lowmem == 0) || (lowmem >= 0x100000)) | ||
109 | - lowmem = 0x9f000; | ||
110 | + /* Use the lower of the lowmem and EBDA markers as the cutoff */ | ||
111 | + lowmem = min(lowmem, ebda_addr); | ||
112 | + lowmem = min(lowmem, LOWMEM_CAP); /* Absolute cap */ | ||
113 | |||
114 | /* reserve all memory between lowmem and the 1MB mark */ | ||
115 | memblock_reserve(lowmem, 0x100000 - lowmem); | ||
116 | diff --git a/arch/x86/platform/efi/efi.c b/arch/x86/platform/efi/efi.c | ||
117 | index 3705bb0..1e40637 100644 | ||
118 | --- a/arch/x86/platform/efi/efi.c | ||
119 | +++ b/arch/x86/platform/efi/efi.c | ||
120 | @@ -84,9 +84,10 @@ int efi_enabled(int facility) | ||
121 | } | ||
122 | EXPORT_SYMBOL(efi_enabled); | ||
123 | |||
124 | +static bool disable_runtime = false; | ||
125 | static int __init setup_noefi(char *arg) | ||
126 | { | ||
127 | - clear_bit(EFI_RUNTIME_SERVICES, &x86_efi_facility); | ||
128 | + disable_runtime = true; | ||
129 | return 0; | ||
130 | } | ||
131 | early_param("noefi", setup_noefi); | ||
132 | @@ -733,7 +734,7 @@ void __init efi_init(void) | ||
133 | if (!efi_is_native()) | ||
134 | pr_info("No EFI runtime due to 32/64-bit mismatch with kernel\n"); | ||
135 | else { | ||
136 | - if (efi_runtime_init()) | ||
137 | + if (disable_runtime || efi_runtime_init()) | ||
138 | return; | ||
139 | set_bit(EFI_RUNTIME_SERVICES, &x86_efi_facility); | ||
140 | } | ||
141 | diff --git a/block/genhd.c b/block/genhd.c | ||
142 | index 9cf5583..60108d9 100644 | ||
143 | --- a/block/genhd.c | ||
144 | +++ b/block/genhd.c | ||
145 | @@ -25,7 +25,7 @@ static DEFINE_MUTEX(block_class_lock); | ||
146 | struct kobject *block_depr; | ||
147 | |||
148 | /* for extended dynamic devt allocation, currently only one major is used */ | ||
149 | -#define MAX_EXT_DEVT (1 << MINORBITS) | ||
150 | +#define NR_EXT_DEVT (1 << MINORBITS) | ||
151 | |||
152 | /* For extended devt allocation. ext_devt_mutex prevents look up | ||
153 | * results from going away underneath its user. | ||
154 | @@ -420,17 +420,18 @@ int blk_alloc_devt(struct hd_struct *part, dev_t *devt) | ||
155 | do { | ||
156 | if (!idr_pre_get(&ext_devt_idr, GFP_KERNEL)) | ||
157 | return -ENOMEM; | ||
158 | + mutex_lock(&ext_devt_mutex); | ||
159 | rc = idr_get_new(&ext_devt_idr, part, &idx); | ||
160 | + if (!rc && idx >= NR_EXT_DEVT) { | ||
161 | + idr_remove(&ext_devt_idr, idx); | ||
162 | + rc = -EBUSY; | ||
163 | + } | ||
164 | + mutex_unlock(&ext_devt_mutex); | ||
165 | } while (rc == -EAGAIN); | ||
166 | |||
167 | if (rc) | ||
168 | return rc; | ||
169 | |||
170 | - if (idx > MAX_EXT_DEVT) { | ||
171 | - idr_remove(&ext_devt_idr, idx); | ||
172 | - return -EBUSY; | ||
173 | - } | ||
174 | - | ||
175 | *devt = MKDEV(BLOCK_EXT_MAJOR, blk_mangle_minor(idx)); | ||
176 | return 0; | ||
177 | } | ||
178 | @@ -644,7 +645,6 @@ void del_gendisk(struct gendisk *disk) | ||
179 | disk_part_iter_exit(&piter); | ||
180 | |||
181 | invalidate_partition(disk, 0); | ||
182 | - blk_free_devt(disk_to_dev(disk)->devt); | ||
183 | set_capacity(disk, 0); | ||
184 | disk->flags &= ~GENHD_FL_UP; | ||
185 | |||
186 | @@ -662,6 +662,7 @@ void del_gendisk(struct gendisk *disk) | ||
187 | if (!sysfs_deprecated) | ||
188 | sysfs_remove_link(block_depr, dev_name(disk_to_dev(disk))); | ||
189 | device_del(disk_to_dev(disk)); | ||
190 | + blk_free_devt(disk_to_dev(disk)->devt); | ||
191 | } | ||
192 | EXPORT_SYMBOL(del_gendisk); | ||
193 | |||
194 | diff --git a/block/partition-generic.c b/block/partition-generic.c | ||
195 | index 6df5d69..7b8b8d1 100644 | ||
196 | --- a/block/partition-generic.c | ||
197 | +++ b/block/partition-generic.c | ||
198 | @@ -249,11 +249,11 @@ void delete_partition(struct gendisk *disk, int partno) | ||
199 | if (!part) | ||
200 | return; | ||
201 | |||
202 | - blk_free_devt(part_devt(part)); | ||
203 | rcu_assign_pointer(ptbl->part[partno], NULL); | ||
204 | rcu_assign_pointer(ptbl->last_lookup, NULL); | ||
205 | kobject_put(part->holder_dir); | ||
206 | device_del(part_to_dev(part)); | ||
207 | + blk_free_devt(part_devt(part)); | ||
208 | |||
209 | hd_struct_put(part); | ||
210 | } | ||
211 | diff --git a/drivers/acpi/sleep.c b/drivers/acpi/sleep.c | ||
212 | index aa0a904..189c704 100644 | ||
213 | --- a/drivers/acpi/sleep.c | ||
214 | +++ b/drivers/acpi/sleep.c | ||
215 | @@ -186,6 +186,14 @@ static struct dmi_system_id __initdata acpisleep_dmi_table[] = { | ||
216 | }, | ||
217 | { | ||
218 | .callback = init_nvs_nosave, | ||
219 | + .ident = "Sony Vaio VGN-FW41E_H", | ||
220 | + .matches = { | ||
221 | + DMI_MATCH(DMI_SYS_VENDOR, "Sony Corporation"), | ||
222 | + DMI_MATCH(DMI_PRODUCT_NAME, "VGN-FW41E_H"), | ||
223 | + }, | ||
224 | + }, | ||
225 | + { | ||
226 | + .callback = init_nvs_nosave, | ||
227 | .ident = "Sony Vaio VGN-FW21E", | ||
228 | .matches = { | ||
229 | DMI_MATCH(DMI_SYS_VENDOR, "Sony Corporation"), | ||
230 | diff --git a/drivers/ata/ata_piix.c b/drivers/ata/ata_piix.c | ||
231 | index 3c809bf..88f6908 100644 | ||
232 | --- a/drivers/ata/ata_piix.c | ||
233 | +++ b/drivers/ata/ata_piix.c | ||
234 | @@ -331,6 +331,23 @@ static const struct pci_device_id piix_pci_tbl[] = { | ||
235 | { 0x8086, 0x8c09, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_2port_sata }, | ||
236 | /* SATA Controller IDE (DH89xxCC) */ | ||
237 | { 0x8086, 0x2326, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_2port_sata }, | ||
238 | + /* SATA Controller IDE (Avoton) */ | ||
239 | + { 0x8086, 0x1f20, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_sata_snb }, | ||
240 | + /* SATA Controller IDE (Avoton) */ | ||
241 | + { 0x8086, 0x1f21, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_sata_snb }, | ||
242 | + /* SATA Controller IDE (Avoton) */ | ||
243 | + { 0x8086, 0x1f30, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_2port_sata }, | ||
244 | + /* SATA Controller IDE (Avoton) */ | ||
245 | + { 0x8086, 0x1f31, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_2port_sata }, | ||
246 | + /* SATA Controller IDE (Wellsburg) */ | ||
247 | + { 0x8086, 0x8d00, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_sata_snb }, | ||
248 | + /* SATA Controller IDE (Wellsburg) */ | ||
249 | + { 0x8086, 0x8d08, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_2port_sata }, | ||
250 | + /* SATA Controller IDE (Wellsburg) */ | ||
251 | + { 0x8086, 0x8d60, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_sata_snb }, | ||
252 | + /* SATA Controller IDE (Wellsburg) */ | ||
253 | + { 0x8086, 0x8d68, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_2port_sata }, | ||
254 | + | ||
255 | { } /* terminate list */ | ||
256 | }; | ||
257 | |||
258 | diff --git a/drivers/block/xen-blkback/blkback.c b/drivers/block/xen-blkback/blkback.c | ||
259 | index c6decb9..73d8c92 100644 | ||
260 | --- a/drivers/block/xen-blkback/blkback.c | ||
261 | +++ b/drivers/block/xen-blkback/blkback.c | ||
262 | @@ -623,7 +623,6 @@ static int dispatch_rw_block_io(struct xen_blkif *blkif, | ||
263 | goto fail_response; | ||
264 | } | ||
265 | |||
266 | - preq.dev = req->u.rw.handle; | ||
267 | preq.sector_number = req->u.rw.sector_number; | ||
268 | preq.nr_sects = 0; | ||
269 | |||
270 | diff --git a/drivers/block/xen-blkback/xenbus.c b/drivers/block/xen-blkback/xenbus.c | ||
271 | index 4f66171..a155254 100644 | ||
272 | --- a/drivers/block/xen-blkback/xenbus.c | ||
273 | +++ b/drivers/block/xen-blkback/xenbus.c | ||
274 | @@ -367,6 +367,7 @@ static int xen_blkbk_remove(struct xenbus_device *dev) | ||
275 | be->blkif = NULL; | ||
276 | } | ||
277 | |||
278 | + kfree(be->mode); | ||
279 | kfree(be); | ||
280 | dev_set_drvdata(&dev->dev, NULL); | ||
281 | return 0; | ||
282 | @@ -502,6 +503,7 @@ static void backend_changed(struct xenbus_watch *watch, | ||
283 | = container_of(watch, struct backend_info, backend_watch); | ||
284 | struct xenbus_device *dev = be->dev; | ||
285 | int cdrom = 0; | ||
286 | + unsigned long handle; | ||
287 | char *device_type; | ||
288 | |||
289 | DPRINTK(""); | ||
290 | @@ -521,10 +523,10 @@ static void backend_changed(struct xenbus_watch *watch, | ||
291 | return; | ||
292 | } | ||
293 | |||
294 | - if ((be->major || be->minor) && | ||
295 | - ((be->major != major) || (be->minor != minor))) { | ||
296 | - pr_warn(DRV_PFX "changing physical device (from %x:%x to %x:%x) not supported.\n", | ||
297 | - be->major, be->minor, major, minor); | ||
298 | + if (be->major | be->minor) { | ||
299 | + if (be->major != major || be->minor != minor) | ||
300 | + pr_warn(DRV_PFX "changing physical device (from %x:%x to %x:%x) not supported.\n", | ||
301 | + be->major, be->minor, major, minor); | ||
302 | return; | ||
303 | } | ||
304 | |||
305 | @@ -542,36 +544,33 @@ static void backend_changed(struct xenbus_watch *watch, | ||
306 | kfree(device_type); | ||
307 | } | ||
308 | |||
309 | - if (be->major == 0 && be->minor == 0) { | ||
310 | - /* Front end dir is a number, which is used as the handle. */ | ||
311 | - | ||
312 | - char *p = strrchr(dev->otherend, '/') + 1; | ||
313 | - long handle; | ||
314 | - err = strict_strtoul(p, 0, &handle); | ||
315 | - if (err) | ||
316 | - return; | ||
317 | + /* Front end dir is a number, which is used as the handle. */ | ||
318 | + err = strict_strtoul(strrchr(dev->otherend, '/') + 1, 0, &handle); | ||
319 | + if (err) | ||
320 | + return; | ||
321 | |||
322 | - be->major = major; | ||
323 | - be->minor = minor; | ||
324 | + be->major = major; | ||
325 | + be->minor = minor; | ||
326 | |||
327 | - err = xen_vbd_create(be->blkif, handle, major, minor, | ||
328 | - (NULL == strchr(be->mode, 'w')), cdrom); | ||
329 | - if (err) { | ||
330 | - be->major = 0; | ||
331 | - be->minor = 0; | ||
332 | - xenbus_dev_fatal(dev, err, "creating vbd structure"); | ||
333 | - return; | ||
334 | - } | ||
335 | + err = xen_vbd_create(be->blkif, handle, major, minor, | ||
336 | + !strchr(be->mode, 'w'), cdrom); | ||
337 | |||
338 | + if (err) | ||
339 | + xenbus_dev_fatal(dev, err, "creating vbd structure"); | ||
340 | + else { | ||
341 | err = xenvbd_sysfs_addif(dev); | ||
342 | if (err) { | ||
343 | xen_vbd_free(&be->blkif->vbd); | ||
344 | - be->major = 0; | ||
345 | - be->minor = 0; | ||
346 | xenbus_dev_fatal(dev, err, "creating sysfs entries"); | ||
347 | - return; | ||
348 | } | ||
349 | + } | ||
350 | |||
351 | + if (err) { | ||
352 | + kfree(be->mode); | ||
353 | + be->mode = NULL; | ||
354 | + be->major = 0; | ||
355 | + be->minor = 0; | ||
356 | + } else { | ||
357 | /* We're potentially connected now */ | ||
358 | xen_update_blkif_status(be->blkif); | ||
359 | } | ||
360 | diff --git a/drivers/firewire/core-device.c b/drivers/firewire/core-device.c | ||
361 | index 68109e9..04ebeaf 100644 | ||
362 | --- a/drivers/firewire/core-device.c | ||
363 | +++ b/drivers/firewire/core-device.c | ||
364 | @@ -999,6 +999,10 @@ static void fw_device_init(struct work_struct *work) | ||
365 | ret = idr_pre_get(&fw_device_idr, GFP_KERNEL) ? | ||
366 | idr_get_new(&fw_device_idr, device, &minor) : | ||
367 | -ENOMEM; | ||
368 | + if (minor >= 1 << MINORBITS) { | ||
369 | + idr_remove(&fw_device_idr, minor); | ||
370 | + minor = -ENOSPC; | ||
371 | + } | ||
372 | up_write(&fw_device_rwsem); | ||
373 | |||
374 | if (ret < 0) | ||
375 | diff --git a/drivers/hid/hid-core.c b/drivers/hid/hid-core.c | ||
376 | index 1a92a27..ff73d60 100644 | ||
377 | --- a/drivers/hid/hid-core.c | ||
378 | +++ b/drivers/hid/hid-core.c | ||
379 | @@ -1922,6 +1922,7 @@ static const struct hid_device_id hid_ignore_list[] = { | ||
380 | { HID_USB_DEVICE(USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_HYBRID) }, | ||
381 | { HID_USB_DEVICE(USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_HEATCONTROL) }, | ||
382 | { HID_USB_DEVICE(USB_VENDOR_ID_MADCATZ, USB_DEVICE_ID_MADCATZ_BEATPAD) }, | ||
383 | + { HID_USB_DEVICE(USB_VENDOR_ID_MASTERKIT, USB_DEVICE_ID_MASTERKIT_MA901RADIO) }, | ||
384 | { HID_USB_DEVICE(USB_VENDOR_ID_MCC, USB_DEVICE_ID_MCC_PMD1024LS) }, | ||
385 | { HID_USB_DEVICE(USB_VENDOR_ID_MCC, USB_DEVICE_ID_MCC_PMD1208LS) }, | ||
386 | { HID_USB_DEVICE(USB_VENDOR_ID_MICROCHIP, USB_DEVICE_ID_PICKIT1) }, | ||
387 | diff --git a/drivers/hid/hid-ids.h b/drivers/hid/hid-ids.h | ||
388 | index 5583899..02f4664 100644 | ||
389 | --- a/drivers/hid/hid-ids.h | ||
390 | +++ b/drivers/hid/hid-ids.h | ||
391 | @@ -520,6 +520,9 @@ | ||
392 | #define USB_VENDOR_ID_MADCATZ 0x0738 | ||
393 | #define USB_DEVICE_ID_MADCATZ_BEATPAD 0x4540 | ||
394 | |||
395 | +#define USB_VENDOR_ID_MASTERKIT 0x16c0 | ||
396 | +#define USB_DEVICE_ID_MASTERKIT_MA901RADIO 0x05df | ||
397 | + | ||
398 | #define USB_VENDOR_ID_MCC 0x09db | ||
399 | #define USB_DEVICE_ID_MCC_PMD1024LS 0x0076 | ||
400 | #define USB_DEVICE_ID_MCC_PMD1208LS 0x007a | ||
401 | diff --git a/drivers/iommu/amd_iommu_init.c b/drivers/iommu/amd_iommu_init.c | ||
402 | index ef0ae93..b573f80 100644 | ||
403 | --- a/drivers/iommu/amd_iommu_init.c | ||
404 | +++ b/drivers/iommu/amd_iommu_init.c | ||
405 | @@ -1572,8 +1572,6 @@ int __init amd_iommu_init_hardware(void) | ||
406 | if (amd_iommu_pd_alloc_bitmap == NULL) | ||
407 | goto free; | ||
408 | |||
409 | - /* init the device table */ | ||
410 | - init_device_table(); | ||
411 | |||
412 | /* | ||
413 | * let all alias entries point to itself | ||
414 | @@ -1655,6 +1653,7 @@ out: | ||
415 | */ | ||
416 | static int __init amd_iommu_init(void) | ||
417 | { | ||
418 | + struct amd_iommu *iommu; | ||
419 | int ret = 0; | ||
420 | |||
421 | ret = amd_iommu_init_hardware(); | ||
422 | @@ -1673,6 +1672,12 @@ static int __init amd_iommu_init(void) | ||
423 | if (ret) | ||
424 | goto free; | ||
425 | |||
426 | + /* init the device table */ | ||
427 | + init_device_table(); | ||
428 | + | ||
429 | + for_each_iommu(iommu) | ||
430 | + iommu_flush_all_caches(iommu); | ||
431 | + | ||
432 | amd_iommu_init_api(); | ||
433 | |||
434 | x86_platform.iommu_shutdown = disable_iommus; | ||
435 | diff --git a/drivers/media/rc/rc-main.c b/drivers/media/rc/rc-main.c | ||
436 | index cabc19c..cec1f8c 100644 | ||
437 | --- a/drivers/media/rc/rc-main.c | ||
438 | +++ b/drivers/media/rc/rc-main.c | ||
439 | @@ -778,8 +778,10 @@ static ssize_t show_protocols(struct device *device, | ||
440 | } else if (dev->raw) { | ||
441 | enabled = dev->raw->enabled_protocols; | ||
442 | allowed = ir_raw_get_allowed_protocols(); | ||
443 | - } else | ||
444 | + } else { | ||
445 | + mutex_unlock(&dev->lock); | ||
446 | return -ENODEV; | ||
447 | + } | ||
448 | |||
449 | IR_dprintk(1, "allowed - 0x%llx, enabled - 0x%llx\n", | ||
450 | (long long)allowed, | ||
451 | diff --git a/drivers/net/wireless/ath/ath9k/ar9003_calib.c b/drivers/net/wireless/ath/ath9k/ar9003_calib.c | ||
452 | index 63089cc..9284bca 100644 | ||
453 | --- a/drivers/net/wireless/ath/ath9k/ar9003_calib.c | ||
454 | +++ b/drivers/net/wireless/ath/ath9k/ar9003_calib.c | ||
455 | @@ -938,6 +938,8 @@ static bool ar9003_hw_init_cal(struct ath_hw *ah, | ||
456 | AR_PHY_CL_TAB_1, | ||
457 | AR_PHY_CL_TAB_2 }; | ||
458 | |||
459 | + ar9003_hw_set_chain_masks(ah, ah->caps.rx_chainmask, ah->caps.tx_chainmask); | ||
460 | + | ||
461 | if (rtt) { | ||
462 | if (!ar9003_hw_rtt_restore(ah, chan)) | ||
463 | run_rtt_cal = true; | ||
464 | diff --git a/drivers/net/wireless/ath/ath9k/ar9003_phy.c b/drivers/net/wireless/ath/ath9k/ar9003_phy.c | ||
465 | index 600aca9..f86ee0c 100644 | ||
466 | --- a/drivers/net/wireless/ath/ath9k/ar9003_phy.c | ||
467 | +++ b/drivers/net/wireless/ath/ath9k/ar9003_phy.c | ||
468 | @@ -543,7 +543,7 @@ static void ar9003_hw_init_bb(struct ath_hw *ah, | ||
469 | udelay(synthDelay + BASE_ACTIVATE_DELAY); | ||
470 | } | ||
471 | |||
472 | -static void ar9003_hw_set_chain_masks(struct ath_hw *ah, u8 rx, u8 tx) | ||
473 | +void ar9003_hw_set_chain_masks(struct ath_hw *ah, u8 rx, u8 tx) | ||
474 | { | ||
475 | switch (rx) { | ||
476 | case 0x5: | ||
477 | diff --git a/drivers/net/wireless/ath/ath9k/hw.h b/drivers/net/wireless/ath/ath9k/hw.h | ||
478 | index f8e1fbb..d5c5dca 100644 | ||
479 | --- a/drivers/net/wireless/ath/ath9k/hw.h | ||
480 | +++ b/drivers/net/wireless/ath/ath9k/hw.h | ||
481 | @@ -1014,6 +1014,7 @@ int ar9003_paprd_setup_gain_table(struct ath_hw *ah, int chain); | ||
482 | int ar9003_paprd_init_table(struct ath_hw *ah); | ||
483 | bool ar9003_paprd_is_done(struct ath_hw *ah); | ||
484 | void ar9003_hw_set_paprd_txdesc(struct ath_hw *ah, void *ds, u8 chains); | ||
485 | +void ar9003_hw_set_chain_masks(struct ath_hw *ah, u8 rx, u8 tx); | ||
486 | |||
487 | /* Hardware family op attach helpers */ | ||
488 | void ar5008_hw_attach_phy_ops(struct ath_hw *ah); | ||
489 | diff --git a/drivers/power/ab8500_btemp.c b/drivers/power/ab8500_btemp.c | ||
490 | index d8bb993..2a6bf76 100644 | ||
491 | --- a/drivers/power/ab8500_btemp.c | ||
492 | +++ b/drivers/power/ab8500_btemp.c | ||
493 | @@ -1115,7 +1115,7 @@ static void __exit ab8500_btemp_exit(void) | ||
494 | platform_driver_unregister(&ab8500_btemp_driver); | ||
495 | } | ||
496 | |||
497 | -subsys_initcall_sync(ab8500_btemp_init); | ||
498 | +device_initcall(ab8500_btemp_init); | ||
499 | module_exit(ab8500_btemp_exit); | ||
500 | |||
501 | MODULE_LICENSE("GPL v2"); | ||
502 | diff --git a/drivers/power/abx500_chargalg.c b/drivers/power/abx500_chargalg.c | ||
503 | index 804b88c..d8cd151 100644 | ||
504 | --- a/drivers/power/abx500_chargalg.c | ||
505 | +++ b/drivers/power/abx500_chargalg.c | ||
506 | @@ -1698,7 +1698,7 @@ static ssize_t abx500_chargalg_sysfs_charger(struct kobject *kobj, | ||
507 | static struct attribute abx500_chargalg_en_charger = \ | ||
508 | { | ||
509 | .name = "chargalg", | ||
510 | - .mode = S_IWUGO, | ||
511 | + .mode = S_IWUSR, | ||
512 | }; | ||
513 | |||
514 | static struct attribute *abx500_chargalg_chg[] = { | ||
515 | diff --git a/drivers/staging/comedi/comedi_fops.c b/drivers/staging/comedi/comedi_fops.c | ||
516 | index cf67ce5..3799cf1 100644 | ||
517 | --- a/drivers/staging/comedi/comedi_fops.c | ||
518 | +++ b/drivers/staging/comedi/comedi_fops.c | ||
519 | @@ -1577,7 +1577,7 @@ static unsigned int comedi_poll(struct file *file, poll_table * wait) | ||
520 | |||
521 | mask = 0; | ||
522 | read_subdev = comedi_get_read_subdevice(dev_file_info); | ||
523 | - if (read_subdev) { | ||
524 | + if (read_subdev && read_subdev->async) { | ||
525 | poll_wait(file, &read_subdev->async->wait_head, wait); | ||
526 | if (!read_subdev->busy | ||
527 | || comedi_buf_read_n_available(read_subdev->async) > 0 | ||
528 | @@ -1587,7 +1587,7 @@ static unsigned int comedi_poll(struct file *file, poll_table * wait) | ||
529 | } | ||
530 | } | ||
531 | write_subdev = comedi_get_write_subdevice(dev_file_info); | ||
532 | - if (write_subdev) { | ||
533 | + if (write_subdev && write_subdev->async) { | ||
534 | poll_wait(file, &write_subdev->async->wait_head, wait); | ||
535 | comedi_buf_write_alloc(write_subdev->async, | ||
536 | write_subdev->async->prealloc_bufsz); | ||
537 | @@ -1629,7 +1629,7 @@ static ssize_t comedi_write(struct file *file, const char __user *buf, | ||
538 | } | ||
539 | |||
540 | s = comedi_get_write_subdevice(dev_file_info); | ||
541 | - if (s == NULL) { | ||
542 | + if (s == NULL || s->async == NULL) { | ||
543 | retval = -EIO; | ||
544 | goto done; | ||
545 | } | ||
546 | @@ -1740,7 +1740,7 @@ static ssize_t comedi_read(struct file *file, char __user *buf, size_t nbytes, | ||
547 | } | ||
548 | |||
549 | s = comedi_get_read_subdevice(dev_file_info); | ||
550 | - if (s == NULL) { | ||
551 | + if (s == NULL || s->async == NULL) { | ||
552 | retval = -EIO; | ||
553 | goto done; | ||
554 | } | ||
555 | diff --git a/drivers/staging/comedi/drivers/ni_labpc.c b/drivers/staging/comedi/drivers/ni_labpc.c | ||
556 | index 721b2be..0517a23 100644 | ||
557 | --- a/drivers/staging/comedi/drivers/ni_labpc.c | ||
558 | +++ b/drivers/staging/comedi/drivers/ni_labpc.c | ||
559 | @@ -1264,7 +1264,9 @@ static int labpc_ai_cmd(struct comedi_device *dev, struct comedi_subdevice *s) | ||
560 | else | ||
561 | channel = CR_CHAN(cmd->chanlist[0]); | ||
562 | /* munge channel bits for differential / scan disabled mode */ | ||
563 | - if (labpc_ai_scan_mode(cmd) != MODE_SINGLE_CHAN && aref == AREF_DIFF) | ||
564 | + if ((labpc_ai_scan_mode(cmd) == MODE_SINGLE_CHAN || | ||
565 | + labpc_ai_scan_mode(cmd) == MODE_SINGLE_CHAN_INTERVAL) && | ||
566 | + aref == AREF_DIFF) | ||
567 | channel *= 2; | ||
568 | devpriv->command1_bits |= ADC_CHAN_BITS(channel); | ||
569 | devpriv->command1_bits |= thisboard->ai_range_code[range]; | ||
570 | @@ -1280,21 +1282,6 @@ static int labpc_ai_cmd(struct comedi_device *dev, struct comedi_subdevice *s) | ||
571 | devpriv->write_byte(devpriv->command1_bits, | ||
572 | dev->iobase + COMMAND1_REG); | ||
573 | } | ||
574 | - /* setup any external triggering/pacing (command4 register) */ | ||
575 | - devpriv->command4_bits = 0; | ||
576 | - if (cmd->convert_src != TRIG_EXT) | ||
577 | - devpriv->command4_bits |= EXT_CONVERT_DISABLE_BIT; | ||
578 | - /* XXX should discard first scan when using interval scanning | ||
579 | - * since manual says it is not synced with scan clock */ | ||
580 | - if (labpc_use_continuous_mode(cmd) == 0) { | ||
581 | - devpriv->command4_bits |= INTERVAL_SCAN_EN_BIT; | ||
582 | - if (cmd->scan_begin_src == TRIG_EXT) | ||
583 | - devpriv->command4_bits |= EXT_SCAN_EN_BIT; | ||
584 | - } | ||
585 | - /* single-ended/differential */ | ||
586 | - if (aref == AREF_DIFF) | ||
587 | - devpriv->command4_bits |= ADC_DIFF_BIT; | ||
588 | - devpriv->write_byte(devpriv->command4_bits, dev->iobase + COMMAND4_REG); | ||
589 | |||
590 | devpriv->write_byte(cmd->chanlist_len, | ||
591 | dev->iobase + INTERVAL_COUNT_REG); | ||
592 | @@ -1374,6 +1361,22 @@ static int labpc_ai_cmd(struct comedi_device *dev, struct comedi_subdevice *s) | ||
593 | devpriv->command3_bits &= ~ADC_FNE_INTR_EN_BIT; | ||
594 | devpriv->write_byte(devpriv->command3_bits, dev->iobase + COMMAND3_REG); | ||
595 | |||
596 | + /* setup any external triggering/pacing (command4 register) */ | ||
597 | + devpriv->command4_bits = 0; | ||
598 | + if (cmd->convert_src != TRIG_EXT) | ||
599 | + devpriv->command4_bits |= EXT_CONVERT_DISABLE_BIT; | ||
600 | + /* XXX should discard first scan when using interval scanning | ||
601 | + * since manual says it is not synced with scan clock */ | ||
602 | + if (labpc_use_continuous_mode(cmd) == 0) { | ||
603 | + devpriv->command4_bits |= INTERVAL_SCAN_EN_BIT; | ||
604 | + if (cmd->scan_begin_src == TRIG_EXT) | ||
605 | + devpriv->command4_bits |= EXT_SCAN_EN_BIT; | ||
606 | + } | ||
607 | + /* single-ended/differential */ | ||
608 | + if (aref == AREF_DIFF) | ||
609 | + devpriv->command4_bits |= ADC_DIFF_BIT; | ||
610 | + devpriv->write_byte(devpriv->command4_bits, dev->iobase + COMMAND4_REG); | ||
611 | + | ||
612 | /* startup acquisition */ | ||
613 | |||
614 | /* command2 reg */ | ||
615 | diff --git a/drivers/target/target_core_device.c b/drivers/target/target_core_device.c | ||
616 | index 4ecf9d6..79d9865 100644 | ||
617 | --- a/drivers/target/target_core_device.c | ||
618 | +++ b/drivers/target/target_core_device.c | ||
619 | @@ -1483,24 +1483,18 @@ static struct se_lun *core_dev_get_lun(struct se_portal_group *tpg, u32 unpacked | ||
620 | |||
621 | struct se_lun_acl *core_dev_init_initiator_node_lun_acl( | ||
622 | struct se_portal_group *tpg, | ||
623 | + struct se_node_acl *nacl, | ||
624 | u32 mapped_lun, | ||
625 | - char *initiatorname, | ||
626 | int *ret) | ||
627 | { | ||
628 | struct se_lun_acl *lacl; | ||
629 | - struct se_node_acl *nacl; | ||
630 | |||
631 | - if (strlen(initiatorname) >= TRANSPORT_IQN_LEN) { | ||
632 | + if (strlen(nacl->initiatorname) >= TRANSPORT_IQN_LEN) { | ||
633 | pr_err("%s InitiatorName exceeds maximum size.\n", | ||
634 | tpg->se_tpg_tfo->get_fabric_name()); | ||
635 | *ret = -EOVERFLOW; | ||
636 | return NULL; | ||
637 | } | ||
638 | - nacl = core_tpg_get_initiator_node_acl(tpg, initiatorname); | ||
639 | - if (!nacl) { | ||
640 | - *ret = -EINVAL; | ||
641 | - return NULL; | ||
642 | - } | ||
643 | lacl = kzalloc(sizeof(struct se_lun_acl), GFP_KERNEL); | ||
644 | if (!lacl) { | ||
645 | pr_err("Unable to allocate memory for struct se_lun_acl.\n"); | ||
646 | @@ -1511,7 +1505,8 @@ struct se_lun_acl *core_dev_init_initiator_node_lun_acl( | ||
647 | INIT_LIST_HEAD(&lacl->lacl_list); | ||
648 | lacl->mapped_lun = mapped_lun; | ||
649 | lacl->se_lun_nacl = nacl; | ||
650 | - snprintf(lacl->initiatorname, TRANSPORT_IQN_LEN, "%s", initiatorname); | ||
651 | + snprintf(lacl->initiatorname, TRANSPORT_IQN_LEN, "%s", | ||
652 | + nacl->initiatorname); | ||
653 | |||
654 | return lacl; | ||
655 | } | ||
656 | diff --git a/drivers/target/target_core_fabric_configfs.c b/drivers/target/target_core_fabric_configfs.c | ||
657 | index 817ba7c..6b79ee7 100644 | ||
658 | --- a/drivers/target/target_core_fabric_configfs.c | ||
659 | +++ b/drivers/target/target_core_fabric_configfs.c | ||
660 | @@ -356,9 +356,17 @@ static struct config_group *target_fabric_make_mappedlun( | ||
661 | ret = -EINVAL; | ||
662 | goto out; | ||
663 | } | ||
664 | + if (mapped_lun > (TRANSPORT_MAX_LUNS_PER_TPG-1)) { | ||
665 | + pr_err("Mapped LUN: %lu exceeds TRANSPORT_MAX_LUNS_PER_TPG" | ||
666 | + "-1: %u for Target Portal Group: %u\n", mapped_lun, | ||
667 | + TRANSPORT_MAX_LUNS_PER_TPG-1, | ||
668 | + se_tpg->se_tpg_tfo->tpg_get_tag(se_tpg)); | ||
669 | + ret = -EINVAL; | ||
670 | + goto out; | ||
671 | + } | ||
672 | |||
673 | - lacl = core_dev_init_initiator_node_lun_acl(se_tpg, mapped_lun, | ||
674 | - config_item_name(acl_ci), &ret); | ||
675 | + lacl = core_dev_init_initiator_node_lun_acl(se_tpg, se_nacl, | ||
676 | + mapped_lun, &ret); | ||
677 | if (!lacl) { | ||
678 | ret = -EINVAL; | ||
679 | goto out; | ||
680 | diff --git a/drivers/target/target_core_internal.h b/drivers/target/target_core_internal.h | ||
681 | index 21c0563..17179b1 100644 | ||
682 | --- a/drivers/target/target_core_internal.h | ||
683 | +++ b/drivers/target/target_core_internal.h | ||
684 | @@ -61,7 +61,7 @@ struct se_lun *core_dev_add_lun(struct se_portal_group *, struct se_hba *, | ||
685 | int core_dev_del_lun(struct se_portal_group *, u32); | ||
686 | struct se_lun *core_get_lun_from_tpg(struct se_portal_group *, u32); | ||
687 | struct se_lun_acl *core_dev_init_initiator_node_lun_acl(struct se_portal_group *, | ||
688 | - u32, char *, int *); | ||
689 | + struct se_node_acl *, u32, int *); | ||
690 | int core_dev_add_initiator_node_lun_acl(struct se_portal_group *, | ||
691 | struct se_lun_acl *, u32, u32); | ||
692 | int core_dev_del_initiator_node_lun_acl(struct se_portal_group *, | ||
693 | diff --git a/drivers/target/target_core_tpg.c b/drivers/target/target_core_tpg.c | ||
694 | index ba537b6..0e17fa3 100644 | ||
695 | --- a/drivers/target/target_core_tpg.c | ||
696 | +++ b/drivers/target/target_core_tpg.c | ||
697 | @@ -114,16 +114,10 @@ struct se_node_acl *core_tpg_get_initiator_node_acl( | ||
698 | struct se_node_acl *acl; | ||
699 | |||
700 | spin_lock_irq(&tpg->acl_node_lock); | ||
701 | - list_for_each_entry(acl, &tpg->acl_node_list, acl_list) { | ||
702 | - if (!strcmp(acl->initiatorname, initiatorname) && | ||
703 | - !acl->dynamic_node_acl) { | ||
704 | - spin_unlock_irq(&tpg->acl_node_lock); | ||
705 | - return acl; | ||
706 | - } | ||
707 | - } | ||
708 | + acl = __core_tpg_get_initiator_node_acl(tpg, initiatorname); | ||
709 | spin_unlock_irq(&tpg->acl_node_lock); | ||
710 | |||
711 | - return NULL; | ||
712 | + return acl; | ||
713 | } | ||
714 | |||
715 | /* core_tpg_add_node_to_devs(): | ||
716 | diff --git a/drivers/vhost/vhost.c b/drivers/vhost/vhost.c | ||
717 | index 51e4c1e..1a9e2a9 100644 | ||
718 | --- a/drivers/vhost/vhost.c | ||
719 | +++ b/drivers/vhost/vhost.c | ||
720 | @@ -1074,7 +1074,7 @@ static int translate_desc(struct vhost_dev *dev, u64 addr, u32 len, | ||
721 | } | ||
722 | _iov = iov + ret; | ||
723 | size = reg->memory_size - addr + reg->guest_phys_addr; | ||
724 | - _iov->iov_len = min((u64)len, size); | ||
725 | + _iov->iov_len = min((u64)len - s, size); | ||
726 | _iov->iov_base = (void __user *)(unsigned long) | ||
727 | (reg->userspace_addr + addr - reg->guest_phys_addr); | ||
728 | s += size; | ||
729 | diff --git a/fs/direct-io.c b/fs/direct-io.c | ||
730 | index f4aadd1..29c4fda 100644 | ||
731 | --- a/fs/direct-io.c | ||
732 | +++ b/fs/direct-io.c | ||
733 | @@ -305,9 +305,9 @@ static ssize_t dio_complete(struct dio *dio, loff_t offset, ssize_t ret, bool is | ||
734 | dio->end_io(dio->iocb, offset, transferred, | ||
735 | dio->private, ret, is_async); | ||
736 | } else { | ||
737 | + inode_dio_done(dio->inode); | ||
738 | if (is_async) | ||
739 | aio_complete(dio->iocb, ret, 0); | ||
740 | - inode_dio_done(dio->inode); | ||
741 | } | ||
742 | |||
743 | return ret; | ||
744 | diff --git a/fs/ext4/balloc.c b/fs/ext4/balloc.c | ||
745 | index df76291..3e1018a 100644 | ||
746 | --- a/fs/ext4/balloc.c | ||
747 | +++ b/fs/ext4/balloc.c | ||
748 | @@ -326,7 +326,7 @@ err_out: | ||
749 | return 0; | ||
750 | } | ||
751 | /** | ||
752 | - * ext4_read_block_bitmap() | ||
753 | + * ext4_read_block_bitmap_nowait() | ||
754 | * @sb: super block | ||
755 | * @block_group: given block group | ||
756 | * | ||
757 | @@ -422,6 +422,8 @@ ext4_read_block_bitmap(struct super_block *sb, ext4_group_t block_group) | ||
758 | struct buffer_head *bh; | ||
759 | |||
760 | bh = ext4_read_block_bitmap_nowait(sb, block_group); | ||
761 | + if (!bh) | ||
762 | + return NULL; | ||
763 | if (ext4_wait_block_bitmap(sb, block_group, bh)) { | ||
764 | put_bh(bh); | ||
765 | return NULL; | ||
766 | @@ -447,11 +449,16 @@ static int ext4_has_free_clusters(struct ext4_sb_info *sbi, | ||
767 | |||
768 | free_clusters = percpu_counter_read_positive(fcc); | ||
769 | dirty_clusters = percpu_counter_read_positive(dcc); | ||
770 | - root_clusters = EXT4_B2C(sbi, ext4_r_blocks_count(sbi->s_es)); | ||
771 | + | ||
772 | + /* | ||
773 | + * r_blocks_count should always be multiple of the cluster ratio so | ||
774 | + * we are safe to do a plane bit shift only. | ||
775 | + */ | ||
776 | + root_clusters = ext4_r_blocks_count(sbi->s_es) >> sbi->s_cluster_bits; | ||
777 | |||
778 | if (free_clusters - (nclusters + root_clusters + dirty_clusters) < | ||
779 | EXT4_FREECLUSTERS_WATERMARK) { | ||
780 | - free_clusters = EXT4_C2B(sbi, percpu_counter_sum_positive(fcc)); | ||
781 | + free_clusters = percpu_counter_sum_positive(fcc); | ||
782 | dirty_clusters = percpu_counter_sum_positive(dcc); | ||
783 | } | ||
784 | /* Check whether we have space after accounting for current | ||
785 | diff --git a/fs/ext4/mballoc.c b/fs/ext4/mballoc.c | ||
786 | index e77c4fe..3122ece 100644 | ||
787 | --- a/fs/ext4/mballoc.c | ||
788 | +++ b/fs/ext4/mballoc.c | ||
789 | @@ -4126,7 +4126,7 @@ static void ext4_mb_add_n_trim(struct ext4_allocation_context *ac) | ||
790 | /* The max size of hash table is PREALLOC_TB_SIZE */ | ||
791 | order = PREALLOC_TB_SIZE - 1; | ||
792 | /* Add the prealloc space to lg */ | ||
793 | - rcu_read_lock(); | ||
794 | + spin_lock(&lg->lg_prealloc_lock); | ||
795 | list_for_each_entry_rcu(tmp_pa, &lg->lg_prealloc_list[order], | ||
796 | pa_inode_list) { | ||
797 | spin_lock(&tmp_pa->pa_lock); | ||
798 | @@ -4150,12 +4150,12 @@ static void ext4_mb_add_n_trim(struct ext4_allocation_context *ac) | ||
799 | if (!added) | ||
800 | list_add_tail_rcu(&pa->pa_inode_list, | ||
801 | &lg->lg_prealloc_list[order]); | ||
802 | - rcu_read_unlock(); | ||
803 | + spin_unlock(&lg->lg_prealloc_lock); | ||
804 | |||
805 | /* Now trim the list to be not more than 8 elements */ | ||
806 | if (lg_prealloc_count > 8) { | ||
807 | ext4_mb_discard_lg_preallocations(sb, lg, | ||
808 | - order, lg_prealloc_count); | ||
809 | + order, lg_prealloc_count); | ||
810 | return; | ||
811 | } | ||
812 | return ; | ||
813 | diff --git a/fs/ext4/xattr.c b/fs/ext4/xattr.c | ||
814 | index e88748e..e712a8c 100644 | ||
815 | --- a/fs/ext4/xattr.c | ||
816 | +++ b/fs/ext4/xattr.c | ||
817 | @@ -495,7 +495,7 @@ ext4_xattr_release_block(handle_t *handle, struct inode *inode, | ||
818 | error = ext4_handle_dirty_metadata(handle, inode, bh); | ||
819 | if (IS_SYNC(inode)) | ||
820 | ext4_handle_sync(handle); | ||
821 | - dquot_free_block(inode, 1); | ||
822 | + dquot_free_block(inode, EXT4_C2B(EXT4_SB(inode->i_sb), 1)); | ||
823 | ea_bdebug(bh, "refcount now=%d; releasing", | ||
824 | le32_to_cpu(BHDR(bh)->h_refcount)); | ||
825 | } | ||
826 | @@ -784,7 +784,8 @@ inserted: | ||
827 | else { | ||
828 | /* The old block is released after updating | ||
829 | the inode. */ | ||
830 | - error = dquot_alloc_block(inode, 1); | ||
831 | + error = dquot_alloc_block(inode, | ||
832 | + EXT4_C2B(EXT4_SB(sb), 1)); | ||
833 | if (error) | ||
834 | goto cleanup; | ||
835 | error = ext4_journal_get_write_access(handle, | ||
836 | @@ -880,7 +881,7 @@ cleanup: | ||
837 | return error; | ||
838 | |||
839 | cleanup_dquot: | ||
840 | - dquot_free_block(inode, 1); | ||
841 | + dquot_free_block(inode, EXT4_C2B(EXT4_SB(sb), 1)); | ||
842 | goto cleanup; | ||
843 | |||
844 | bad_block: | ||
845 | diff --git a/fs/fuse/dir.c b/fs/fuse/dir.c | ||
846 | index bc43832..d48478a 100644 | ||
847 | --- a/fs/fuse/dir.c | ||
848 | +++ b/fs/fuse/dir.c | ||
849 | @@ -645,7 +645,14 @@ static int fuse_unlink(struct inode *dir, struct dentry *entry) | ||
850 | |||
851 | spin_lock(&fc->lock); | ||
852 | fi->attr_version = ++fc->attr_version; | ||
853 | - drop_nlink(inode); | ||
854 | + /* | ||
855 | + * If i_nlink == 0 then unlink doesn't make sense, yet this can | ||
856 | + * happen if userspace filesystem is careless. It would be | ||
857 | + * difficult to enforce correct nlink usage so just ignore this | ||
858 | + * condition here | ||
859 | + */ | ||
860 | + if (inode->i_nlink > 0) | ||
861 | + drop_nlink(inode); | ||
862 | spin_unlock(&fc->lock); | ||
863 | fuse_invalidate_attr(inode); | ||
864 | fuse_invalidate_attr(dir); | ||
865 | diff --git a/fs/nfsd/nfs4state.c b/fs/nfsd/nfs4state.c | ||
866 | index 537731e..abd785e 100644 | ||
867 | --- a/fs/nfsd/nfs4state.c | ||
868 | +++ b/fs/nfsd/nfs4state.c | ||
869 | @@ -1053,6 +1053,8 @@ free_client(struct nfs4_client *clp) | ||
870 | put_group_info(clp->cl_cred.cr_group_info); | ||
871 | kfree(clp->cl_principal); | ||
872 | kfree(clp->cl_name.data); | ||
873 | + idr_remove_all(&clp->cl_stateids); | ||
874 | + idr_destroy(&clp->cl_stateids); | ||
875 | kfree(clp); | ||
876 | } | ||
877 | |||
878 | diff --git a/fs/ocfs2/aops.c b/fs/ocfs2/aops.c | ||
879 | index 6577432..340bd02 100644 | ||
880 | --- a/fs/ocfs2/aops.c | ||
881 | +++ b/fs/ocfs2/aops.c | ||
882 | @@ -593,9 +593,9 @@ static void ocfs2_dio_end_io(struct kiocb *iocb, | ||
883 | level = ocfs2_iocb_rw_locked_level(iocb); | ||
884 | ocfs2_rw_unlock(inode, level); | ||
885 | |||
886 | + inode_dio_done(inode); | ||
887 | if (is_async) | ||
888 | aio_complete(iocb, ret, 0); | ||
889 | - inode_dio_done(inode); | ||
890 | } | ||
891 | |||
892 | /* | ||
893 | diff --git a/fs/ocfs2/suballoc.c b/fs/ocfs2/suballoc.c | ||
894 | index f169da4..b7e74b5 100644 | ||
895 | --- a/fs/ocfs2/suballoc.c | ||
896 | +++ b/fs/ocfs2/suballoc.c | ||
897 | @@ -642,7 +642,7 @@ ocfs2_block_group_alloc_discontig(handle_t *handle, | ||
898 | * cluster groups will be staying in cache for the duration of | ||
899 | * this operation. | ||
900 | */ | ||
901 | - ac->ac_allow_chain_relink = 0; | ||
902 | + ac->ac_disable_chain_relink = 1; | ||
903 | |||
904 | /* Claim the first region */ | ||
905 | status = ocfs2_block_group_claim_bits(osb, handle, ac, min_bits, | ||
906 | @@ -1823,7 +1823,7 @@ static int ocfs2_search_chain(struct ocfs2_alloc_context *ac, | ||
907 | * Do this *after* figuring out how many bits we're taking out | ||
908 | * of our target group. | ||
909 | */ | ||
910 | - if (ac->ac_allow_chain_relink && | ||
911 | + if (!ac->ac_disable_chain_relink && | ||
912 | (prev_group_bh) && | ||
913 | (ocfs2_block_group_reasonably_empty(bg, res->sr_bits))) { | ||
914 | status = ocfs2_relink_block_group(handle, alloc_inode, | ||
915 | @@ -1928,7 +1928,6 @@ static int ocfs2_claim_suballoc_bits(struct ocfs2_alloc_context *ac, | ||
916 | |||
917 | victim = ocfs2_find_victim_chain(cl); | ||
918 | ac->ac_chain = victim; | ||
919 | - ac->ac_allow_chain_relink = 1; | ||
920 | |||
921 | status = ocfs2_search_chain(ac, handle, bits_wanted, min_bits, | ||
922 | res, &bits_left); | ||
923 | @@ -1947,7 +1946,7 @@ static int ocfs2_claim_suballoc_bits(struct ocfs2_alloc_context *ac, | ||
924 | * searching each chain in order. Don't allow chain relinking | ||
925 | * because we only calculate enough journal credits for one | ||
926 | * relink per alloc. */ | ||
927 | - ac->ac_allow_chain_relink = 0; | ||
928 | + ac->ac_disable_chain_relink = 1; | ||
929 | for (i = 0; i < le16_to_cpu(cl->cl_next_free_rec); i ++) { | ||
930 | if (i == victim) | ||
931 | continue; | ||
932 | diff --git a/fs/ocfs2/suballoc.h b/fs/ocfs2/suballoc.h | ||
933 | index b8afabf..a36d0aa 100644 | ||
934 | --- a/fs/ocfs2/suballoc.h | ||
935 | +++ b/fs/ocfs2/suballoc.h | ||
936 | @@ -49,7 +49,7 @@ struct ocfs2_alloc_context { | ||
937 | |||
938 | /* these are used by the chain search */ | ||
939 | u16 ac_chain; | ||
940 | - int ac_allow_chain_relink; | ||
941 | + int ac_disable_chain_relink; | ||
942 | group_search_t *ac_group_search; | ||
943 | |||
944 | u64 ac_last_group; | ||
945 | diff --git a/fs/ocfs2/xattr.c b/fs/ocfs2/xattr.c | ||
946 | index 0ba9ea1..2e3ea30 100644 | ||
947 | --- a/fs/ocfs2/xattr.c | ||
948 | +++ b/fs/ocfs2/xattr.c | ||
949 | @@ -7189,7 +7189,7 @@ int ocfs2_init_security_and_acl(struct inode *dir, | ||
950 | struct buffer_head *dir_bh = NULL; | ||
951 | |||
952 | ret = ocfs2_init_security_get(inode, dir, qstr, NULL); | ||
953 | - if (!ret) { | ||
954 | + if (ret) { | ||
955 | mlog_errno(ret); | ||
956 | goto leave; | ||
957 | } | ||
958 | diff --git a/fs/pstore/platform.c b/fs/pstore/platform.c | ||
959 | index 82c585f..4a66a5c 100644 | ||
960 | --- a/fs/pstore/platform.c | ||
961 | +++ b/fs/pstore/platform.c | ||
962 | @@ -88,6 +88,27 @@ static const char *get_reason_str(enum kmsg_dump_reason reason) | ||
963 | } | ||
964 | } | ||
965 | |||
966 | +bool pstore_cannot_block_path(enum kmsg_dump_reason reason) | ||
967 | +{ | ||
968 | + /* | ||
969 | + * In case of NMI path, pstore shouldn't be blocked | ||
970 | + * regardless of reason. | ||
971 | + */ | ||
972 | + if (in_nmi()) | ||
973 | + return true; | ||
974 | + | ||
975 | + switch (reason) { | ||
976 | + /* In panic case, other cpus are stopped by smp_send_stop(). */ | ||
977 | + case KMSG_DUMP_PANIC: | ||
978 | + /* Emergency restart shouldn't be blocked by spin lock. */ | ||
979 | + case KMSG_DUMP_EMERG: | ||
980 | + return true; | ||
981 | + default: | ||
982 | + return false; | ||
983 | + } | ||
984 | +} | ||
985 | +EXPORT_SYMBOL_GPL(pstore_cannot_block_path); | ||
986 | + | ||
987 | /* | ||
988 | * callback from kmsg_dump. (s2,l2) has the most recently | ||
989 | * written bytes, older bytes are in (s1,l1). Save as much | ||
990 | @@ -111,10 +132,12 @@ static void pstore_dump(struct kmsg_dumper *dumper, | ||
991 | |||
992 | why = get_reason_str(reason); | ||
993 | |||
994 | - if (in_nmi()) { | ||
995 | - is_locked = spin_trylock(&psinfo->buf_lock); | ||
996 | - if (!is_locked) | ||
997 | - pr_err("pstore dump routine blocked in NMI, may corrupt error record\n"); | ||
998 | + if (pstore_cannot_block_path(reason)) { | ||
999 | + is_locked = spin_trylock_irqsave(&psinfo->buf_lock, flags); | ||
1000 | + if (!is_locked) { | ||
1001 | + pr_err("pstore dump routine blocked in %s path, may corrupt error record\n" | ||
1002 | + , in_nmi() ? "NMI" : why); | ||
1003 | + } | ||
1004 | } else | ||
1005 | spin_lock_irqsave(&psinfo->buf_lock, flags); | ||
1006 | oopscount++; | ||
1007 | @@ -145,9 +168,9 @@ static void pstore_dump(struct kmsg_dumper *dumper, | ||
1008 | total += l1_cpy + l2_cpy; | ||
1009 | part++; | ||
1010 | } | ||
1011 | - if (in_nmi()) { | ||
1012 | + if (pstore_cannot_block_path(reason)) { | ||
1013 | if (is_locked) | ||
1014 | - spin_unlock(&psinfo->buf_lock); | ||
1015 | + spin_unlock_irqrestore(&psinfo->buf_lock, flags); | ||
1016 | } else | ||
1017 | spin_unlock_irqrestore(&psinfo->buf_lock, flags); | ||
1018 | } | ||
1019 | diff --git a/include/linux/auto_fs.h b/include/linux/auto_fs.h | ||
1020 | index da64e15..6cdabb4 100644 | ||
1021 | --- a/include/linux/auto_fs.h | ||
1022 | +++ b/include/linux/auto_fs.h | ||
1023 | @@ -31,25 +31,16 @@ | ||
1024 | #define AUTOFS_MIN_PROTO_VERSION AUTOFS_PROTO_VERSION | ||
1025 | |||
1026 | /* | ||
1027 | - * Architectures where both 32- and 64-bit binaries can be executed | ||
1028 | - * on 64-bit kernels need this. This keeps the structure format | ||
1029 | - * uniform, and makes sure the wait_queue_token isn't too big to be | ||
1030 | - * passed back down to the kernel. | ||
1031 | - * | ||
1032 | - * This assumes that on these architectures: | ||
1033 | - * mode 32 bit 64 bit | ||
1034 | - * ------------------------- | ||
1035 | - * int 32 bit 32 bit | ||
1036 | - * long 32 bit 64 bit | ||
1037 | - * | ||
1038 | - * If so, 32-bit user-space code should be backwards compatible. | ||
1039 | + * The wait_queue_token (autofs_wqt_t) is part of a structure which is passed | ||
1040 | + * back to the kernel via ioctl from userspace. On architectures where 32- and | ||
1041 | + * 64-bit userspace binaries can be executed it's important that the size of | ||
1042 | + * autofs_wqt_t stays constant between 32- and 64-bit Linux kernels so that we | ||
1043 | + * do not break the binary ABI interface by changing the structure size. | ||
1044 | */ | ||
1045 | - | ||
1046 | -#if defined(__sparc__) || defined(__mips__) || defined(__x86_64__) \ | ||
1047 | - || defined(__powerpc__) || defined(__s390__) | ||
1048 | -typedef unsigned int autofs_wqt_t; | ||
1049 | -#else | ||
1050 | +#if defined(__ia64__) || defined(__alpha__) /* pure 64bit architectures */ | ||
1051 | typedef unsigned long autofs_wqt_t; | ||
1052 | +#else | ||
1053 | +typedef unsigned int autofs_wqt_t; | ||
1054 | #endif | ||
1055 | |||
1056 | /* Packet types */ | ||
1057 | diff --git a/include/linux/pstore.h b/include/linux/pstore.h | ||
1058 | index e1461e1..318cca1 100644 | ||
1059 | --- a/include/linux/pstore.h | ||
1060 | +++ b/include/linux/pstore.h | ||
1061 | @@ -54,12 +54,18 @@ struct pstore_info { | ||
1062 | |||
1063 | #ifdef CONFIG_PSTORE | ||
1064 | extern int pstore_register(struct pstore_info *); | ||
1065 | +extern bool pstore_cannot_block_path(enum kmsg_dump_reason reason); | ||
1066 | #else | ||
1067 | static inline int | ||
1068 | pstore_register(struct pstore_info *psi) | ||
1069 | { | ||
1070 | return -ENODEV; | ||
1071 | } | ||
1072 | +static inline bool | ||
1073 | +pstore_cannot_block_path(enum kmsg_dump_reason reason) | ||
1074 | +{ | ||
1075 | + return false; | ||
1076 | +} | ||
1077 | #endif | ||
1078 | |||
1079 | #endif /*_LINUX_PSTORE_H*/ | ||
1080 | diff --git a/include/linux/quota.h b/include/linux/quota.h | ||
1081 | index c09fa04..ffd8607 100644 | ||
1082 | --- a/include/linux/quota.h | ||
1083 | +++ b/include/linux/quota.h | ||
1084 | @@ -417,6 +417,7 @@ struct quota_module_name { | ||
1085 | #define INIT_QUOTA_MODULE_NAMES {\ | ||
1086 | {QFMT_VFS_OLD, "quota_v1"},\ | ||
1087 | {QFMT_VFS_V0, "quota_v2"},\ | ||
1088 | + {QFMT_VFS_V1, "quota_v2"},\ | ||
1089 | {0, NULL}} | ||
1090 | |||
1091 | #endif /* __KERNEL__ */ | ||
1092 | diff --git a/kernel/cgroup.c b/kernel/cgroup.c | ||
1093 | index a5dccd4..a4c47d1b 100644 | ||
1094 | --- a/kernel/cgroup.c | ||
1095 | +++ b/kernel/cgroup.c | ||
1096 | @@ -378,12 +378,20 @@ static void __put_css_set(struct css_set *cg, int taskexit) | ||
1097 | struct cgroup *cgrp = link->cgrp; | ||
1098 | list_del(&link->cg_link_list); | ||
1099 | list_del(&link->cgrp_link_list); | ||
1100 | + | ||
1101 | + /* | ||
1102 | + * We may not be holding cgroup_mutex, and if cgrp->count is | ||
1103 | + * dropped to 0 the cgroup can be destroyed at any time, hence | ||
1104 | + * rcu_read_lock is used to keep it alive. | ||
1105 | + */ | ||
1106 | + rcu_read_lock(); | ||
1107 | if (atomic_dec_and_test(&cgrp->count) && | ||
1108 | notify_on_release(cgrp)) { | ||
1109 | if (taskexit) | ||
1110 | set_bit(CGRP_RELEASABLE, &cgrp->flags); | ||
1111 | check_for_release(cgrp); | ||
1112 | } | ||
1113 | + rcu_read_unlock(); | ||
1114 | |||
1115 | kfree(link); | ||
1116 | } | ||
1117 | diff --git a/kernel/cpuset.c b/kernel/cpuset.c | ||
1118 | index 5fc1570..8fe6f6b6 100644 | ||
1119 | --- a/kernel/cpuset.c | ||
1120 | +++ b/kernel/cpuset.c | ||
1121 | @@ -2479,8 +2479,16 @@ void cpuset_print_task_mems_allowed(struct task_struct *tsk) | ||
1122 | |||
1123 | dentry = task_cs(tsk)->css.cgroup->dentry; | ||
1124 | spin_lock(&cpuset_buffer_lock); | ||
1125 | - snprintf(cpuset_name, CPUSET_NAME_LEN, | ||
1126 | - dentry ? (const char *)dentry->d_name.name : "/"); | ||
1127 | + | ||
1128 | + if (!dentry) { | ||
1129 | + strcpy(cpuset_name, "/"); | ||
1130 | + } else { | ||
1131 | + spin_lock(&dentry->d_lock); | ||
1132 | + strlcpy(cpuset_name, (const char *)dentry->d_name.name, | ||
1133 | + CPUSET_NAME_LEN); | ||
1134 | + spin_unlock(&dentry->d_lock); | ||
1135 | + } | ||
1136 | + | ||
1137 | nodelist_scnprintf(cpuset_nodelist, CPUSET_NODELIST_LEN, | ||
1138 | tsk->mems_allowed); | ||
1139 | printk(KERN_INFO "%s cpuset=%s mems_allowed=%s\n", | ||
1140 | diff --git a/kernel/posix-timers.c b/kernel/posix-timers.c | ||
1141 | index 69185ae..e885be1 100644 | ||
1142 | --- a/kernel/posix-timers.c | ||
1143 | +++ b/kernel/posix-timers.c | ||
1144 | @@ -639,6 +639,13 @@ static struct k_itimer *__lock_timer(timer_t timer_id, unsigned long *flags) | ||
1145 | { | ||
1146 | struct k_itimer *timr; | ||
1147 | |||
1148 | + /* | ||
1149 | + * timer_t could be any type >= int and we want to make sure any | ||
1150 | + * @timer_id outside positive int range fails lookup. | ||
1151 | + */ | ||
1152 | + if ((unsigned long long)timer_id > INT_MAX) | ||
1153 | + return NULL; | ||
1154 | + | ||
1155 | rcu_read_lock(); | ||
1156 | timr = idr_find(&posix_timers_id, (int)timer_id); | ||
1157 | if (timr) { | ||
1158 | diff --git a/kernel/sysctl_binary.c b/kernel/sysctl_binary.c | ||
1159 | index a650694..9f9aa32 100644 | ||
1160 | --- a/kernel/sysctl_binary.c | ||
1161 | +++ b/kernel/sysctl_binary.c | ||
1162 | @@ -1194,9 +1194,10 @@ static ssize_t bin_dn_node_address(struct file *file, | ||
1163 | |||
1164 | /* Convert the decnet address to binary */ | ||
1165 | result = -EIO; | ||
1166 | - nodep = strchr(buf, '.') + 1; | ||
1167 | + nodep = strchr(buf, '.'); | ||
1168 | if (!nodep) | ||
1169 | goto out; | ||
1170 | + ++nodep; | ||
1171 | |||
1172 | area = simple_strtoul(buf, NULL, 10); | ||
1173 | node = simple_strtoul(nodep, NULL, 10); | ||
1174 | diff --git a/kernel/trace/ftrace.c b/kernel/trace/ftrace.c | ||
1175 | index 6b194d8..4a86e64 100644 | ||
1176 | --- a/kernel/trace/ftrace.c | ||
1177 | +++ b/kernel/trace/ftrace.c | ||
1178 | @@ -3841,37 +3841,51 @@ static void ftrace_init_module(struct module *mod, | ||
1179 | ftrace_process_locs(mod, start, end); | ||
1180 | } | ||
1181 | |||
1182 | -static int ftrace_module_notify(struct notifier_block *self, | ||
1183 | - unsigned long val, void *data) | ||
1184 | +static int ftrace_module_notify_enter(struct notifier_block *self, | ||
1185 | + unsigned long val, void *data) | ||
1186 | { | ||
1187 | struct module *mod = data; | ||
1188 | |||
1189 | - switch (val) { | ||
1190 | - case MODULE_STATE_COMING: | ||
1191 | + if (val == MODULE_STATE_COMING) | ||
1192 | ftrace_init_module(mod, mod->ftrace_callsites, | ||
1193 | mod->ftrace_callsites + | ||
1194 | mod->num_ftrace_callsites); | ||
1195 | - break; | ||
1196 | - case MODULE_STATE_GOING: | ||
1197 | + return 0; | ||
1198 | +} | ||
1199 | + | ||
1200 | +static int ftrace_module_notify_exit(struct notifier_block *self, | ||
1201 | + unsigned long val, void *data) | ||
1202 | +{ | ||
1203 | + struct module *mod = data; | ||
1204 | + | ||
1205 | + if (val == MODULE_STATE_GOING) | ||
1206 | ftrace_release_mod(mod); | ||
1207 | - break; | ||
1208 | - } | ||
1209 | |||
1210 | return 0; | ||
1211 | } | ||
1212 | #else | ||
1213 | -static int ftrace_module_notify(struct notifier_block *self, | ||
1214 | - unsigned long val, void *data) | ||
1215 | +static int ftrace_module_notify_enter(struct notifier_block *self, | ||
1216 | + unsigned long val, void *data) | ||
1217 | +{ | ||
1218 | + return 0; | ||
1219 | +} | ||
1220 | +static int ftrace_module_notify_exit(struct notifier_block *self, | ||
1221 | + unsigned long val, void *data) | ||
1222 | { | ||
1223 | return 0; | ||
1224 | } | ||
1225 | #endif /* CONFIG_MODULES */ | ||
1226 | |||
1227 | -struct notifier_block ftrace_module_nb = { | ||
1228 | - .notifier_call = ftrace_module_notify, | ||
1229 | +struct notifier_block ftrace_module_enter_nb = { | ||
1230 | + .notifier_call = ftrace_module_notify_enter, | ||
1231 | .priority = INT_MAX, /* Run before anything that can use kprobes */ | ||
1232 | }; | ||
1233 | |||
1234 | +struct notifier_block ftrace_module_exit_nb = { | ||
1235 | + .notifier_call = ftrace_module_notify_exit, | ||
1236 | + .priority = INT_MIN, /* Run after anything that can remove kprobes */ | ||
1237 | +}; | ||
1238 | + | ||
1239 | extern unsigned long __start_mcount_loc[]; | ||
1240 | extern unsigned long __stop_mcount_loc[]; | ||
1241 | |||
1242 | @@ -3903,9 +3917,13 @@ void __init ftrace_init(void) | ||
1243 | __start_mcount_loc, | ||
1244 | __stop_mcount_loc); | ||
1245 | |||
1246 | - ret = register_module_notifier(&ftrace_module_nb); | ||
1247 | + ret = register_module_notifier(&ftrace_module_enter_nb); | ||
1248 | + if (ret) | ||
1249 | + pr_warning("Failed to register trace ftrace module enter notifier\n"); | ||
1250 | + | ||
1251 | + ret = register_module_notifier(&ftrace_module_exit_nb); | ||
1252 | if (ret) | ||
1253 | - pr_warning("Failed to register trace ftrace module notifier\n"); | ||
1254 | + pr_warning("Failed to register trace ftrace module exit notifier\n"); | ||
1255 | |||
1256 | set_ftrace_early_filters(); | ||
1257 | |||
1258 | diff --git a/lib/idr.c b/lib/idr.c | ||
1259 | index 4046e29..e90d2d0 100644 | ||
1260 | --- a/lib/idr.c | ||
1261 | +++ b/lib/idr.c | ||
1262 | @@ -625,7 +625,14 @@ void *idr_get_next(struct idr *idp, int *nextidp) | ||
1263 | return p; | ||
1264 | } | ||
1265 | |||
1266 | - id += 1 << n; | ||
1267 | + /* | ||
1268 | + * Proceed to the next layer at the current level. Unlike | ||
1269 | + * idr_for_each(), @id isn't guaranteed to be aligned to | ||
1270 | + * layer boundary at this point and adding 1 << n may | ||
1271 | + * incorrectly skip IDs. Make sure we jump to the | ||
1272 | + * beginning of the next layer using round_up(). | ||
1273 | + */ | ||
1274 | + id = round_up(id + 1, 1 << n); | ||
1275 | while (n < fls(id)) { | ||
1276 | n += IDR_BITS; | ||
1277 | p = *--paa; | ||
1278 | diff --git a/net/sunrpc/svc_xprt.c b/net/sunrpc/svc_xprt.c | ||
1279 | index fd9b288..aec7dbb 100644 | ||
1280 | --- a/net/sunrpc/svc_xprt.c | ||
1281 | +++ b/net/sunrpc/svc_xprt.c | ||
1282 | @@ -817,7 +817,6 @@ static void svc_age_temp_xprts(unsigned long closure) | ||
1283 | struct svc_serv *serv = (struct svc_serv *)closure; | ||
1284 | struct svc_xprt *xprt; | ||
1285 | struct list_head *le, *next; | ||
1286 | - LIST_HEAD(to_be_aged); | ||
1287 | |||
1288 | dprintk("svc_age_temp_xprts\n"); | ||
1289 | |||
1290 | @@ -838,25 +837,15 @@ static void svc_age_temp_xprts(unsigned long closure) | ||
1291 | if (atomic_read(&xprt->xpt_ref.refcount) > 1 || | ||
1292 | test_bit(XPT_BUSY, &xprt->xpt_flags)) | ||
1293 | continue; | ||
1294 | - svc_xprt_get(xprt); | ||
1295 | - list_move(le, &to_be_aged); | ||
1296 | + list_del_init(le); | ||
1297 | set_bit(XPT_CLOSE, &xprt->xpt_flags); | ||
1298 | set_bit(XPT_DETACHED, &xprt->xpt_flags); | ||
1299 | - } | ||
1300 | - spin_unlock_bh(&serv->sv_lock); | ||
1301 | - | ||
1302 | - while (!list_empty(&to_be_aged)) { | ||
1303 | - le = to_be_aged.next; | ||
1304 | - /* fiddling the xpt_list node is safe 'cos we're XPT_DETACHED */ | ||
1305 | - list_del_init(le); | ||
1306 | - xprt = list_entry(le, struct svc_xprt, xpt_list); | ||
1307 | - | ||
1308 | dprintk("queuing xprt %p for closing\n", xprt); | ||
1309 | |||
1310 | /* a thread will dequeue and close it soon */ | ||
1311 | svc_xprt_enqueue(xprt); | ||
1312 | - svc_xprt_put(xprt); | ||
1313 | } | ||
1314 | + spin_unlock_bh(&serv->sv_lock); | ||
1315 | |||
1316 | mod_timer(&serv->sv_temptimer, jiffies + svc_conn_age_period * HZ); | ||
1317 | } | ||
1318 | diff --git a/sound/pci/hda/patch_hdmi.c b/sound/pci/hda/patch_hdmi.c | ||
1319 | index 02a6e3f..fa2ce0c 100644 | ||
1320 | --- a/sound/pci/hda/patch_hdmi.c | ||
1321 | +++ b/sound/pci/hda/patch_hdmi.c | ||
1322 | @@ -1244,6 +1244,9 @@ static int generic_hdmi_build_jack(struct hda_codec *codec, int pin_idx) | ||
1323 | |||
1324 | if (pcmdev > 0) | ||
1325 | sprintf(hdmi_str + strlen(hdmi_str), ",pcm=%d", pcmdev); | ||
1326 | + if (!is_jack_detectable(codec, per_pin->pin_nid)) | ||
1327 | + strncat(hdmi_str, " Phantom", | ||
1328 | + sizeof(hdmi_str) - strlen(hdmi_str) - 1); | ||
1329 | |||
1330 | return snd_hda_jack_add_kctl(codec, per_pin->pin_nid, hdmi_str, 0); | ||
1331 | } | ||
1332 | diff --git a/tools/perf/Makefile b/tools/perf/Makefile | ||
1333 | index c3dd3d4..2db7ba0 100644 | ||
1334 | --- a/tools/perf/Makefile | ||
1335 | +++ b/tools/perf/Makefile | ||
1336 | @@ -241,13 +241,13 @@ $(OUTPUT)util/parse-events-flex.c: util/parse-events.l | ||
1337 | $(QUIET_FLEX)$(FLEX) --header-file=$(OUTPUT)util/parse-events-flex.h -t util/parse-events.l > $(OUTPUT)util/parse-events-flex.c | ||
1338 | |||
1339 | $(OUTPUT)util/parse-events-bison.c: util/parse-events.y | ||
1340 | - $(QUIET_BISON)$(BISON) -v util/parse-events.y -d -o $(OUTPUT)util/parse-events-bison.c | ||
1341 | + $(QUIET_BISON)$(BISON) -v util/parse-events.y -d -o $(OUTPUT)util/parse-events-bison.c -p parse_events_ | ||
1342 | |||
1343 | $(OUTPUT)util/pmu-flex.c: util/pmu.l | ||
1344 | $(QUIET_FLEX)$(FLEX) --header-file=$(OUTPUT)util/pmu-flex.h -t util/pmu.l > $(OUTPUT)util/pmu-flex.c | ||
1345 | |||
1346 | $(OUTPUT)util/pmu-bison.c: util/pmu.y | ||
1347 | - $(QUIET_BISON)$(BISON) -v util/pmu.y -d -o $(OUTPUT)util/pmu-bison.c | ||
1348 | + $(QUIET_BISON)$(BISON) -v util/pmu.y -d -o $(OUTPUT)util/pmu-bison.c -p perf_pmu_ | ||
1349 | |||
1350 | $(OUTPUT)util/parse-events.o: $(OUTPUT)util/parse-events-flex.c $(OUTPUT)util/parse-events-bison.c | ||
1351 | $(OUTPUT)util/pmu.o: $(OUTPUT)util/pmu-flex.c $(OUTPUT)util/pmu-bison.c | ||
1352 | diff --git a/tools/perf/util/parse-events.y b/tools/perf/util/parse-events.y | ||
1353 | index d9637da..3f35ea3 100644 | ||
1354 | --- a/tools/perf/util/parse-events.y | ||
1355 | +++ b/tools/perf/util/parse-events.y | ||
1356 | @@ -1,5 +1,4 @@ | ||
1357 | |||
1358 | -%name-prefix "parse_events_" | ||
1359 | %parse-param {struct list_head *list_all} | ||
1360 | %parse-param {struct list_head *list_event} | ||
1361 | %parse-param {int *idx} | ||
1362 | diff --git a/tools/perf/util/pmu.y b/tools/perf/util/pmu.y | ||
1363 | index 20ea77e..522943f 100644 | ||
1364 | --- a/tools/perf/util/pmu.y | ||
1365 | +++ b/tools/perf/util/pmu.y | ||
1366 | @@ -1,5 +1,4 @@ | ||
1367 | |||
1368 | -%name-prefix "perf_pmu_" | ||
1369 | %parse-param {struct list_head *format} | ||
1370 | %parse-param {char *name} | ||
1371 |