Annotation of /trunk/kernel26-alx/patches-2.6.27-r3/0120-2.6.27.21-all-fixes.patch
Parent Directory | Revision Log
Revision 1176 -
(hide annotations)
(download)
Thu Oct 14 15:11:06 2010 UTC (13 years, 11 months ago) by niro
File size: 31827 byte(s)
Thu Oct 14 15:11:06 2010 UTC (13 years, 11 months ago) by niro
File size: 31827 byte(s)
-2.6.27-alx-r3: new magellan 0.5.2 kernel
1 | niro | 1176 | diff --git a/Makefile b/Makefile |
2 | index 9f4860d..0664c76 100644 | ||
3 | --- a/Makefile | ||
4 | +++ b/Makefile | ||
5 | @@ -555,6 +555,9 @@ KBUILD_CFLAGS += $(call cc-option,-Wdeclaration-after-statement,) | ||
6 | # disable pointer signed / unsigned warnings in gcc 4.0 | ||
7 | KBUILD_CFLAGS += $(call cc-option,-Wno-pointer-sign,) | ||
8 | |||
9 | +# disable invalid "can't wrap" optimzations for signed / pointers | ||
10 | +KBUILD_CFLAGS += $(call cc-option,-fwrapv) | ||
11 | + | ||
12 | # Add user supplied CPPFLAGS, AFLAGS and CFLAGS as the last assignments | ||
13 | # But warn user when we do so | ||
14 | warn-assign = \ | ||
15 | diff --git a/arch/ia64/Kconfig b/arch/ia64/Kconfig | ||
16 | index fb7e69c..48dfb6f 100644 | ||
17 | --- a/arch/ia64/Kconfig | ||
18 | +++ b/arch/ia64/Kconfig | ||
19 | @@ -444,8 +444,7 @@ config HOLES_IN_ZONE | ||
20 | default y if VIRTUAL_MEM_MAP | ||
21 | |||
22 | config HAVE_ARCH_EARLY_PFN_TO_NID | ||
23 | - def_bool y | ||
24 | - depends on NEED_MULTIPLE_NODES | ||
25 | + def_bool NUMA && SPARSEMEM | ||
26 | |||
27 | config HAVE_ARCH_NODEDATA_EXTENSION | ||
28 | def_bool y | ||
29 | diff --git a/arch/powerpc/sysdev/fsl_soc.c b/arch/powerpc/sysdev/fsl_soc.c | ||
30 | index 214388e..dd1d7ed 100644 | ||
31 | --- a/arch/powerpc/sysdev/fsl_soc.c | ||
32 | +++ b/arch/powerpc/sysdev/fsl_soc.c | ||
33 | @@ -255,7 +255,7 @@ static int __init gfar_mdio_of_init(void) | ||
34 | gfar_mdio_of_init_one(np); | ||
35 | |||
36 | /* try the deprecated version */ | ||
37 | - for_each_compatible_node(np, "mdio", "gianfar"); | ||
38 | + for_each_compatible_node(np, "mdio", "gianfar") | ||
39 | gfar_mdio_of_init_one(np); | ||
40 | |||
41 | return 0; | ||
42 | diff --git a/arch/s390/lib/div64.c b/arch/s390/lib/div64.c | ||
43 | index a5f8300..d9e62c0 100644 | ||
44 | --- a/arch/s390/lib/div64.c | ||
45 | +++ b/arch/s390/lib/div64.c | ||
46 | @@ -61,7 +61,7 @@ static uint32_t __div64_31(uint64_t *n, uint32_t base) | ||
47 | " clr %0,%3\n" | ||
48 | " jl 0f\n" | ||
49 | " slr %0,%3\n" | ||
50 | - " alr %1,%2\n" | ||
51 | + " ahi %1,1\n" | ||
52 | "0:\n" | ||
53 | : "+d" (reg2), "+d" (reg3), "=d" (tmp) | ||
54 | : "d" (base), "2" (1UL) : "cc" ); | ||
55 | diff --git a/arch/x86/kernel/cpu/intel.c b/arch/x86/kernel/cpu/intel.c | ||
56 | index b75f256..31027aa 100644 | ||
57 | --- a/arch/x86/kernel/cpu/intel.c | ||
58 | +++ b/arch/x86/kernel/cpu/intel.c | ||
59 | @@ -32,6 +32,19 @@ struct movsl_mask movsl_mask __read_mostly; | ||
60 | |||
61 | static void __cpuinit early_init_intel(struct cpuinfo_x86 *c) | ||
62 | { | ||
63 | + /* Unmask CPUID levels if masked: */ | ||
64 | + if (c->x86 == 6 && c->x86_model >= 15) { | ||
65 | + u64 misc_enable; | ||
66 | + | ||
67 | + rdmsrl(MSR_IA32_MISC_ENABLE, misc_enable); | ||
68 | + | ||
69 | + if (misc_enable & MSR_IA32_MISC_ENABLE_LIMIT_CPUID) { | ||
70 | + misc_enable &= ~MSR_IA32_MISC_ENABLE_LIMIT_CPUID; | ||
71 | + wrmsrl(MSR_IA32_MISC_ENABLE, misc_enable); | ||
72 | + c->cpuid_level = cpuid_eax(0); | ||
73 | + } | ||
74 | + } | ||
75 | + | ||
76 | /* Netburst reports 64 bytes clflush size, but does IO in 128 bytes */ | ||
77 | if (c->x86 == 15 && c->x86_cache_alignment == 64) | ||
78 | c->x86_cache_alignment = 128; | ||
79 | diff --git a/arch/x86/kernel/cpu/intel_64.c b/arch/x86/kernel/cpu/intel_64.c | ||
80 | index 1019c58..7ccd551 100644 | ||
81 | --- a/arch/x86/kernel/cpu/intel_64.c | ||
82 | +++ b/arch/x86/kernel/cpu/intel_64.c | ||
83 | @@ -9,6 +9,19 @@ | ||
84 | |||
85 | static void __cpuinit early_init_intel(struct cpuinfo_x86 *c) | ||
86 | { | ||
87 | + /* Unmask CPUID levels if masked: */ | ||
88 | + if (c->x86 == 6 && c->x86_model >= 15) { | ||
89 | + u64 misc_enable; | ||
90 | + | ||
91 | + rdmsrl(MSR_IA32_MISC_ENABLE, misc_enable); | ||
92 | + | ||
93 | + if (misc_enable & MSR_IA32_MISC_ENABLE_LIMIT_CPUID) { | ||
94 | + misc_enable &= ~MSR_IA32_MISC_ENABLE_LIMIT_CPUID; | ||
95 | + wrmsrl(MSR_IA32_MISC_ENABLE, misc_enable); | ||
96 | + c->cpuid_level = cpuid_eax(0); | ||
97 | + } | ||
98 | + } | ||
99 | + | ||
100 | if ((c->x86 == 0xf && c->x86_model >= 0x03) || | ||
101 | (c->x86 == 0x6 && c->x86_model >= 0x0e)) | ||
102 | set_cpu_cap(c, X86_FEATURE_CONSTANT_TSC); | ||
103 | diff --git a/drivers/ata/ata_piix.c b/drivers/ata/ata_piix.c | ||
104 | index e6b4606..d78a5b2 100644 | ||
105 | --- a/drivers/ata/ata_piix.c | ||
106 | +++ b/drivers/ata/ata_piix.c | ||
107 | @@ -1363,6 +1363,39 @@ static const int *__devinit piix_init_sata_map(struct pci_dev *pdev, | ||
108 | return map; | ||
109 | } | ||
110 | |||
111 | +static bool piix_no_sidpr(struct ata_host *host) | ||
112 | +{ | ||
113 | + struct pci_dev *pdev = to_pci_dev(host->dev); | ||
114 | + | ||
115 | + /* | ||
116 | + * Samsung DB-P70 only has three ATA ports exposed and | ||
117 | + * curiously the unconnected first port reports link online | ||
118 | + * while not responding to SRST protocol causing excessive | ||
119 | + * detection delay. | ||
120 | + * | ||
121 | + * Unfortunately, the system doesn't carry enough DMI | ||
122 | + * information to identify the machine but does have subsystem | ||
123 | + * vendor and device set. As it's unclear whether the | ||
124 | + * subsystem vendor/device is used only for this specific | ||
125 | + * board, the port can't be disabled solely with the | ||
126 | + * information; however, turning off SIDPR access works around | ||
127 | + * the problem. Turn it off. | ||
128 | + * | ||
129 | + * This problem is reported in bnc#441240. | ||
130 | + * | ||
131 | + * https://bugzilla.novell.com/show_bug.cgi?id=441420 | ||
132 | + */ | ||
133 | + if (pdev->vendor == PCI_VENDOR_ID_INTEL && pdev->device == 0x2920 && | ||
134 | + pdev->subsystem_vendor == PCI_VENDOR_ID_SAMSUNG && | ||
135 | + pdev->subsystem_device == 0xb049) { | ||
136 | + dev_printk(KERN_WARNING, host->dev, | ||
137 | + "Samsung DB-P70 detected, disabling SIDPR\n"); | ||
138 | + return true; | ||
139 | + } | ||
140 | + | ||
141 | + return false; | ||
142 | +} | ||
143 | + | ||
144 | static void __devinit piix_init_sidpr(struct ata_host *host) | ||
145 | { | ||
146 | struct pci_dev *pdev = to_pci_dev(host->dev); | ||
147 | @@ -1376,6 +1409,10 @@ static void __devinit piix_init_sidpr(struct ata_host *host) | ||
148 | if (hpriv->map[i] == IDE) | ||
149 | return; | ||
150 | |||
151 | + /* is it blacklisted? */ | ||
152 | + if (piix_no_sidpr(host)) | ||
153 | + return; | ||
154 | + | ||
155 | if (!(host->ports[0]->flags & PIIX_FLAG_SIDPR)) | ||
156 | return; | ||
157 | |||
158 | diff --git a/drivers/md/dm-crypt.c b/drivers/md/dm-crypt.c | ||
159 | index 1395643..8ac02cf 100644 | ||
160 | --- a/drivers/md/dm-crypt.c | ||
161 | +++ b/drivers/md/dm-crypt.c | ||
162 | @@ -59,6 +59,7 @@ struct dm_crypt_io { | ||
163 | }; | ||
164 | |||
165 | struct dm_crypt_request { | ||
166 | + struct convert_context *ctx; | ||
167 | struct scatterlist sg_in; | ||
168 | struct scatterlist sg_out; | ||
169 | }; | ||
170 | @@ -336,6 +337,18 @@ static void crypt_convert_init(struct crypt_config *cc, | ||
171 | atomic_set(&ctx->pending, 1); | ||
172 | } | ||
173 | |||
174 | +static struct dm_crypt_request *dmreq_of_req(struct crypt_config *cc, | ||
175 | + struct ablkcipher_request *req) | ||
176 | +{ | ||
177 | + return (struct dm_crypt_request *)((char *)req + cc->dmreq_start); | ||
178 | +} | ||
179 | + | ||
180 | +static struct ablkcipher_request *req_of_dmreq(struct crypt_config *cc, | ||
181 | + struct dm_crypt_request *dmreq) | ||
182 | +{ | ||
183 | + return (struct ablkcipher_request *)((char *)dmreq - cc->dmreq_start); | ||
184 | +} | ||
185 | + | ||
186 | static int crypt_convert_block(struct crypt_config *cc, | ||
187 | struct convert_context *ctx, | ||
188 | struct ablkcipher_request *req) | ||
189 | @@ -346,10 +359,11 @@ static int crypt_convert_block(struct crypt_config *cc, | ||
190 | u8 *iv; | ||
191 | int r = 0; | ||
192 | |||
193 | - dmreq = (struct dm_crypt_request *)((char *)req + cc->dmreq_start); | ||
194 | + dmreq = dmreq_of_req(cc, req); | ||
195 | iv = (u8 *)ALIGN((unsigned long)(dmreq + 1), | ||
196 | crypto_ablkcipher_alignmask(cc->tfm) + 1); | ||
197 | |||
198 | + dmreq->ctx = ctx; | ||
199 | sg_init_table(&dmreq->sg_in, 1); | ||
200 | sg_set_page(&dmreq->sg_in, bv_in->bv_page, 1 << SECTOR_SHIFT, | ||
201 | bv_in->bv_offset + ctx->offset_in); | ||
202 | @@ -396,8 +410,9 @@ static void crypt_alloc_req(struct crypt_config *cc, | ||
203 | cc->req = mempool_alloc(cc->req_pool, GFP_NOIO); | ||
204 | ablkcipher_request_set_tfm(cc->req, cc->tfm); | ||
205 | ablkcipher_request_set_callback(cc->req, CRYPTO_TFM_REQ_MAY_BACKLOG | | ||
206 | - CRYPTO_TFM_REQ_MAY_SLEEP, | ||
207 | - kcryptd_async_done, ctx); | ||
208 | + CRYPTO_TFM_REQ_MAY_SLEEP, | ||
209 | + kcryptd_async_done, | ||
210 | + dmreq_of_req(cc, cc->req)); | ||
211 | } | ||
212 | |||
213 | /* | ||
214 | @@ -757,7 +772,8 @@ static void kcryptd_crypt_read_convert(struct dm_crypt_io *io) | ||
215 | static void kcryptd_async_done(struct crypto_async_request *async_req, | ||
216 | int error) | ||
217 | { | ||
218 | - struct convert_context *ctx = async_req->data; | ||
219 | + struct dm_crypt_request *dmreq = async_req->data; | ||
220 | + struct convert_context *ctx = dmreq->ctx; | ||
221 | struct dm_crypt_io *io = container_of(ctx, struct dm_crypt_io, ctx); | ||
222 | struct crypt_config *cc = io->target->private; | ||
223 | |||
224 | @@ -766,7 +782,7 @@ static void kcryptd_async_done(struct crypto_async_request *async_req, | ||
225 | return; | ||
226 | } | ||
227 | |||
228 | - mempool_free(ablkcipher_request_cast(async_req), cc->req_pool); | ||
229 | + mempool_free(req_of_dmreq(cc, dmreq), cc->req_pool); | ||
230 | |||
231 | if (!atomic_dec_and_test(&ctx->pending)) | ||
232 | return; | ||
233 | diff --git a/drivers/md/dm-io.c b/drivers/md/dm-io.c | ||
234 | index 4789c42..427e5ed 100644 | ||
235 | --- a/drivers/md/dm-io.c | ||
236 | +++ b/drivers/md/dm-io.c | ||
237 | @@ -292,6 +292,8 @@ static void do_region(int rw, unsigned region, struct dm_io_region *where, | ||
238 | (PAGE_SIZE >> SECTOR_SHIFT)); | ||
239 | num_bvecs = 1 + min_t(int, bio_get_nr_vecs(where->bdev), | ||
240 | num_bvecs); | ||
241 | + if (unlikely(num_bvecs > BIO_MAX_PAGES)) | ||
242 | + num_bvecs = BIO_MAX_PAGES; | ||
243 | bio = bio_alloc_bioset(GFP_NOIO, num_bvecs, io->client->bios); | ||
244 | bio->bi_sector = where->sector + (where->count - remaining); | ||
245 | bio->bi_bdev = where->bdev; | ||
246 | diff --git a/drivers/md/dm-ioctl.c b/drivers/md/dm-ioctl.c | ||
247 | index b262c00..b8ab11f 100644 | ||
248 | --- a/drivers/md/dm-ioctl.c | ||
249 | +++ b/drivers/md/dm-ioctl.c | ||
250 | @@ -704,7 +704,8 @@ static int dev_rename(struct dm_ioctl *param, size_t param_size) | ||
251 | char *new_name = (char *) param + param->data_start; | ||
252 | |||
253 | if (new_name < param->data || | ||
254 | - invalid_str(new_name, (void *) param + param_size)) { | ||
255 | + invalid_str(new_name, (void *) param + param_size) || | ||
256 | + strlen(new_name) > DM_NAME_LEN - 1) { | ||
257 | DMWARN("Invalid new logical volume name supplied."); | ||
258 | return -EINVAL; | ||
259 | } | ||
260 | diff --git a/drivers/media/video/cx23885/cx23885-417.c b/drivers/media/video/cx23885/cx23885-417.c | ||
261 | index 7b0e8c0..b2c68bc 100644 | ||
262 | --- a/drivers/media/video/cx23885/cx23885-417.c | ||
263 | +++ b/drivers/media/video/cx23885/cx23885-417.c | ||
264 | @@ -1585,7 +1585,8 @@ static int mpeg_open(struct inode *inode, struct file *file) | ||
265 | |||
266 | list_for_each(list, &cx23885_devlist) { | ||
267 | h = list_entry(list, struct cx23885_dev, devlist); | ||
268 | - if (h->v4l_device->minor == minor) { | ||
269 | + if (h->v4l_device && | ||
270 | + h->v4l_device->minor == minor) { | ||
271 | dev = h; | ||
272 | break; | ||
273 | } | ||
274 | diff --git a/drivers/media/video/cx23885/cx23885-video.c b/drivers/media/video/cx23885/cx23885-video.c | ||
275 | index 6047c78..7d2802a 100644 | ||
276 | --- a/drivers/media/video/cx23885/cx23885-video.c | ||
277 | +++ b/drivers/media/video/cx23885/cx23885-video.c | ||
278 | @@ -733,12 +733,13 @@ static int video_open(struct inode *inode, struct file *file) | ||
279 | |||
280 | list_for_each(list, &cx23885_devlist) { | ||
281 | h = list_entry(list, struct cx23885_dev, devlist); | ||
282 | - if (h->video_dev->minor == minor) { | ||
283 | + if (h->video_dev && | ||
284 | + h->video_dev->minor == minor) { | ||
285 | dev = h; | ||
286 | type = V4L2_BUF_TYPE_VIDEO_CAPTURE; | ||
287 | } | ||
288 | if (h->vbi_dev && | ||
289 | - h->vbi_dev->minor == minor) { | ||
290 | + h->vbi_dev->minor == minor) { | ||
291 | dev = h; | ||
292 | type = V4L2_BUF_TYPE_VBI_CAPTURE; | ||
293 | } | ||
294 | diff --git a/drivers/misc/thinkpad_acpi.c b/drivers/misc/thinkpad_acpi.c | ||
295 | index 6b93007..34bb0e4 100644 | ||
296 | --- a/drivers/misc/thinkpad_acpi.c | ||
297 | +++ b/drivers/misc/thinkpad_acpi.c | ||
298 | @@ -6826,7 +6826,7 @@ MODULE_ALIAS(TPACPI_DRVR_SHORTNAME); | ||
299 | * if it is not there yet. | ||
300 | */ | ||
301 | #define IBM_BIOS_MODULE_ALIAS(__type) \ | ||
302 | - MODULE_ALIAS("dmi:bvnIBM:bvr" __type "ET??WW") | ||
303 | + MODULE_ALIAS("dmi:bvnIBM:bvr" __type "ET??WW*") | ||
304 | |||
305 | /* Non-ancient thinkpads */ | ||
306 | MODULE_ALIAS("dmi:bvnIBM:*:svnIBM:*:pvrThinkPad*:rvnIBM:*"); | ||
307 | @@ -6835,9 +6835,9 @@ MODULE_ALIAS("dmi:bvnLENOVO:*:svnLENOVO:*:pvrThinkPad*:rvnLENOVO:*"); | ||
308 | /* Ancient thinkpad BIOSes have to be identified by | ||
309 | * BIOS type or model number, and there are far less | ||
310 | * BIOS types than model numbers... */ | ||
311 | -IBM_BIOS_MODULE_ALIAS("I[B,D,H,I,M,N,O,T,W,V,Y,Z]"); | ||
312 | -IBM_BIOS_MODULE_ALIAS("1[0,3,6,8,A-G,I,K,M-P,S,T]"); | ||
313 | -IBM_BIOS_MODULE_ALIAS("K[U,X-Z]"); | ||
314 | +IBM_BIOS_MODULE_ALIAS("I[BDHIMNOTWVYZ]"); | ||
315 | +IBM_BIOS_MODULE_ALIAS("1[0368A-GIKM-PST]"); | ||
316 | +IBM_BIOS_MODULE_ALIAS("K[UX-Z]"); | ||
317 | |||
318 | MODULE_AUTHOR("Borislav Deianov, Henrique de Moraes Holschuh"); | ||
319 | MODULE_DESCRIPTION(TPACPI_DESC); | ||
320 | diff --git a/drivers/usb/core/devio.c b/drivers/usb/core/devio.c | ||
321 | index e52e54e..8d2d79e 100644 | ||
322 | --- a/drivers/usb/core/devio.c | ||
323 | +++ b/drivers/usb/core/devio.c | ||
324 | @@ -359,11 +359,6 @@ static void destroy_async(struct dev_state *ps, struct list_head *list) | ||
325 | spin_lock_irqsave(&ps->lock, flags); | ||
326 | } | ||
327 | spin_unlock_irqrestore(&ps->lock, flags); | ||
328 | - as = async_getcompleted(ps); | ||
329 | - while (as) { | ||
330 | - free_async(as); | ||
331 | - as = async_getcompleted(ps); | ||
332 | - } | ||
333 | } | ||
334 | |||
335 | static void destroy_async_on_interface(struct dev_state *ps, | ||
336 | @@ -639,6 +634,7 @@ static int usbdev_release(struct inode *inode, struct file *file) | ||
337 | struct dev_state *ps = file->private_data; | ||
338 | struct usb_device *dev = ps->dev; | ||
339 | unsigned int ifnum; | ||
340 | + struct async *as; | ||
341 | |||
342 | usb_lock_device(dev); | ||
343 | |||
344 | @@ -657,6 +653,12 @@ static int usbdev_release(struct inode *inode, struct file *file) | ||
345 | usb_unlock_device(dev); | ||
346 | usb_put_dev(dev); | ||
347 | put_pid(ps->disc_pid); | ||
348 | + | ||
349 | + as = async_getcompleted(ps); | ||
350 | + while (as) { | ||
351 | + free_async(as); | ||
352 | + as = async_getcompleted(ps); | ||
353 | + } | ||
354 | kfree(ps); | ||
355 | return 0; | ||
356 | } | ||
357 | diff --git a/drivers/usb/host/ehci-q.c b/drivers/usb/host/ehci-q.c | ||
358 | index 3712b92..ecc9b66 100644 | ||
359 | --- a/drivers/usb/host/ehci-q.c | ||
360 | +++ b/drivers/usb/host/ehci-q.c | ||
361 | @@ -1095,7 +1095,8 @@ static void start_unlink_async (struct ehci_hcd *ehci, struct ehci_qh *qh) | ||
362 | prev->qh_next = qh->qh_next; | ||
363 | wmb (); | ||
364 | |||
365 | - if (unlikely (ehci_to_hcd(ehci)->state == HC_STATE_HALT)) { | ||
366 | + /* If the controller isn't running, we don't have to wait for it */ | ||
367 | + if (unlikely(!HC_IS_RUNNING(ehci_to_hcd(ehci)->state))) { | ||
368 | /* if (unlikely (qh->reclaim != 0)) | ||
369 | * this will recurse, probably not much | ||
370 | */ | ||
371 | diff --git a/drivers/usb/host/ehci-sched.c b/drivers/usb/host/ehci-sched.c | ||
372 | index 07bcb93..1d0b49e 100644 | ||
373 | --- a/drivers/usb/host/ehci-sched.c | ||
374 | +++ b/drivers/usb/host/ehci-sched.c | ||
375 | @@ -1536,7 +1536,7 @@ itd_link_urb ( | ||
376 | struct ehci_itd, itd_list); | ||
377 | list_move_tail (&itd->itd_list, &stream->td_list); | ||
378 | itd->stream = iso_stream_get (stream); | ||
379 | - itd->urb = usb_get_urb (urb); | ||
380 | + itd->urb = urb; | ||
381 | itd_init (ehci, stream, itd); | ||
382 | } | ||
383 | |||
384 | @@ -1645,7 +1645,7 @@ itd_complete ( | ||
385 | (void) disable_periodic(ehci); | ||
386 | ehci_to_hcd(ehci)->self.bandwidth_isoc_reqs--; | ||
387 | |||
388 | - if (unlikely (list_empty (&stream->td_list))) { | ||
389 | + if (unlikely(list_is_singular(&stream->td_list))) { | ||
390 | ehci_to_hcd(ehci)->self.bandwidth_allocated | ||
391 | -= stream->bandwidth; | ||
392 | ehci_vdbg (ehci, | ||
393 | @@ -1656,7 +1656,6 @@ itd_complete ( | ||
394 | iso_stream_put (ehci, stream); | ||
395 | |||
396 | done: | ||
397 | - usb_put_urb(urb); | ||
398 | itd->urb = NULL; | ||
399 | if (ehci->clock_frame != itd->frame || itd->index[7] != -1) { | ||
400 | /* OK to recycle this ITD now. */ | ||
401 | @@ -1949,7 +1948,7 @@ sitd_link_urb ( | ||
402 | struct ehci_sitd, sitd_list); | ||
403 | list_move_tail (&sitd->sitd_list, &stream->td_list); | ||
404 | sitd->stream = iso_stream_get (stream); | ||
405 | - sitd->urb = usb_get_urb (urb); | ||
406 | + sitd->urb = urb; | ||
407 | |||
408 | sitd_patch(ehci, stream, sitd, sched, packet); | ||
409 | sitd_link (ehci, (next_uframe >> 3) % ehci->periodic_size, | ||
410 | @@ -2034,7 +2033,7 @@ sitd_complete ( | ||
411 | (void) disable_periodic(ehci); | ||
412 | ehci_to_hcd(ehci)->self.bandwidth_isoc_reqs--; | ||
413 | |||
414 | - if (list_empty (&stream->td_list)) { | ||
415 | + if (list_is_singular(&stream->td_list)) { | ||
416 | ehci_to_hcd(ehci)->self.bandwidth_allocated | ||
417 | -= stream->bandwidth; | ||
418 | ehci_vdbg (ehci, | ||
419 | @@ -2045,7 +2044,6 @@ sitd_complete ( | ||
420 | iso_stream_put (ehci, stream); | ||
421 | /* OK to recycle this SITD now that its completion callback ran. */ | ||
422 | done: | ||
423 | - usb_put_urb(urb); | ||
424 | sitd->urb = NULL; | ||
425 | sitd->stream = NULL; | ||
426 | list_move(&sitd->sitd_list, &stream->free_list); | ||
427 | diff --git a/drivers/usb/serial/cp2101.c b/drivers/usb/serial/cp2101.c | ||
428 | index 1279553..69e6687 100644 | ||
429 | --- a/drivers/usb/serial/cp2101.c | ||
430 | +++ b/drivers/usb/serial/cp2101.c | ||
431 | @@ -77,6 +77,7 @@ static struct usb_device_id id_table [] = { | ||
432 | { USB_DEVICE(0x10C4, 0x814A) }, /* West Mountain Radio RIGblaster P&P */ | ||
433 | { USB_DEVICE(0x10C4, 0x814B) }, /* West Mountain Radio RIGtalk */ | ||
434 | { USB_DEVICE(0x10C4, 0x815E) }, /* Helicomm IP-Link 1220-DVM */ | ||
435 | + { USB_DEVICE(0x10C4, 0x819F) }, /* MJS USB Toslink Switcher */ | ||
436 | { USB_DEVICE(0x10C4, 0x81A6) }, /* ThinkOptics WavIt */ | ||
437 | { USB_DEVICE(0x10C4, 0x81AC) }, /* MSD Dash Hawk */ | ||
438 | { USB_DEVICE(0x10C4, 0x81C8) }, /* Lipowsky Industrie Elektronik GmbH, Baby-JTAG */ | ||
439 | diff --git a/drivers/usb/serial/ftdi_sio.c b/drivers/usb/serial/ftdi_sio.c | ||
440 | index 3dc93b5..2d78712 100644 | ||
441 | --- a/drivers/usb/serial/ftdi_sio.c | ||
442 | +++ b/drivers/usb/serial/ftdi_sio.c | ||
443 | @@ -657,6 +657,11 @@ static struct usb_device_id id_table_combined [] = { | ||
444 | { USB_DEVICE(PAPOUCH_VID, PAPOUCH_QUIDO4x4_PID) }, | ||
445 | { USB_DEVICE(FTDI_VID, FTDI_DOMINTELL_DGQG_PID) }, | ||
446 | { USB_DEVICE(FTDI_VID, FTDI_DOMINTELL_DUSB_PID) }, | ||
447 | + { USB_DEVICE(ATMEL_VID, STK541_PID) }, | ||
448 | + { USB_DEVICE(DE_VID, STB_PID) }, | ||
449 | + { USB_DEVICE(DE_VID, WHT_PID) }, | ||
450 | + { USB_DEVICE(ADI_VID, ADI_GNICE_PID), | ||
451 | + .driver_info = (kernel_ulong_t)&ftdi_jtag_quirk }, | ||
452 | { }, /* Optional parameter entry */ | ||
453 | { } /* Terminating entry */ | ||
454 | }; | ||
455 | diff --git a/drivers/usb/serial/ftdi_sio.h b/drivers/usb/serial/ftdi_sio.h | ||
456 | index 8a5b6df..80fa76e 100644 | ||
457 | --- a/drivers/usb/serial/ftdi_sio.h | ||
458 | +++ b/drivers/usb/serial/ftdi_sio.h | ||
459 | @@ -870,6 +870,26 @@ | ||
460 | #define RATOC_PRODUCT_ID_USB60F 0xb020 | ||
461 | |||
462 | /* | ||
463 | + * Atmel STK541 | ||
464 | + */ | ||
465 | +#define ATMEL_VID 0x03eb /* Vendor ID */ | ||
466 | +#define STK541_PID 0x2109 /* Zigbee Controller */ | ||
467 | + | ||
468 | +/* | ||
469 | + * Dresden Elektronic Sensor Terminal Board | ||
470 | + */ | ||
471 | +#define DE_VID 0x1cf1 /* Vendor ID */ | ||
472 | +#define STB_PID 0x0001 /* Sensor Terminal Board */ | ||
473 | +#define WHT_PID 0x0004 /* Wireless Handheld Terminal */ | ||
474 | + | ||
475 | +/* | ||
476 | + * Blackfin gnICE JTAG | ||
477 | + * http://docs.blackfin.uclinux.org/doku.php?id=hw:jtag:gnice | ||
478 | + */ | ||
479 | +#define ADI_VID 0x0456 | ||
480 | +#define ADI_GNICE_PID 0xF000 | ||
481 | + | ||
482 | +/* | ||
483 | * BmRequestType: 1100 0000b | ||
484 | * bRequest: FTDI_E2_READ | ||
485 | * wValue: 0 | ||
486 | diff --git a/drivers/usb/serial/option.c b/drivers/usb/serial/option.c | ||
487 | index 9930150..211cd61 100644 | ||
488 | --- a/drivers/usb/serial/option.c | ||
489 | +++ b/drivers/usb/serial/option.c | ||
490 | @@ -89,6 +89,7 @@ static int option_send_setup(struct tty_struct *tty, struct usb_serial_port *po | ||
491 | #define OPTION_PRODUCT_ETNA_MODEM_GT 0x7041 | ||
492 | #define OPTION_PRODUCT_ETNA_MODEM_EX 0x7061 | ||
493 | #define OPTION_PRODUCT_ETNA_KOI_MODEM 0x7100 | ||
494 | +#define OPTION_PRODUCT_GTM380_MODEM 0x7201 | ||
495 | |||
496 | #define HUAWEI_VENDOR_ID 0x12D1 | ||
497 | #define HUAWEI_PRODUCT_E600 0x1001 | ||
498 | @@ -190,6 +191,7 @@ static int option_send_setup(struct tty_struct *tty, struct usb_serial_port *po | ||
499 | /* OVATION PRODUCTS */ | ||
500 | #define NOVATELWIRELESS_PRODUCT_MC727 0x4100 | ||
501 | #define NOVATELWIRELESS_PRODUCT_MC950D 0x4400 | ||
502 | +#define NOVATELWIRELESS_PRODUCT_U727 0x5010 | ||
503 | |||
504 | /* FUTURE NOVATEL PRODUCTS */ | ||
505 | #define NOVATELWIRELESS_PRODUCT_EVDO_FULLSPEED 0X6000 | ||
506 | @@ -281,14 +283,11 @@ static int option_send_setup(struct tty_struct *tty, struct usb_serial_port *po | ||
507 | |||
508 | /* ZTE PRODUCTS */ | ||
509 | #define ZTE_VENDOR_ID 0x19d2 | ||
510 | +#define ZTE_PRODUCT_MF622 0x0001 | ||
511 | #define ZTE_PRODUCT_MF628 0x0015 | ||
512 | #define ZTE_PRODUCT_MF626 0x0031 | ||
513 | #define ZTE_PRODUCT_CDMA_TECH 0xfffe | ||
514 | |||
515 | -/* Ericsson products */ | ||
516 | -#define ERICSSON_VENDOR_ID 0x0bdb | ||
517 | -#define ERICSSON_PRODUCT_F3507G 0x1900 | ||
518 | - | ||
519 | #define BENQ_VENDOR_ID 0x04a5 | ||
520 | #define BENQ_PRODUCT_H10 0x4068 | ||
521 | |||
522 | @@ -317,6 +316,7 @@ static struct usb_device_id option_ids[] = { | ||
523 | { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_ETNA_MODEM_GT) }, | ||
524 | { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_ETNA_MODEM_EX) }, | ||
525 | { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_ETNA_KOI_MODEM) }, | ||
526 | + { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_GTM380_MODEM) }, | ||
527 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E600, 0xff, 0xff, 0xff) }, | ||
528 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E220, 0xff, 0xff, 0xff) }, | ||
529 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E220BIS, 0xff, 0xff, 0xff) }, | ||
530 | @@ -402,6 +402,7 @@ static struct usb_device_id option_ids[] = { | ||
531 | { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_EU870D) }, /* Novatel EU850D/EU860D/EU870D */ | ||
532 | { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_MC950D) }, /* Novatel MC930D/MC950D */ | ||
533 | { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_MC727) }, /* Novatel MC727/U727/USB727 */ | ||
534 | + { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_U727) }, /* Novatel MC727/U727/USB727 */ | ||
535 | { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_EVDO_FULLSPEED) }, /* Novatel EVDO product */ | ||
536 | { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_HSPA_FULLSPEED) }, /* Novatel HSPA product */ | ||
537 | { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_EVDO_EMBEDDED_FULLSPEED) }, /* Novatel EVDO Embedded product */ | ||
538 | @@ -429,7 +430,6 @@ static struct usb_device_id option_ids[] = { | ||
539 | { USB_DEVICE(DELL_VENDOR_ID, DELL_PRODUCT_5520_MINICARD_CINGULAR) }, /* Dell Wireless HSDPA 5520 == Novatel Expedite EU860D */ | ||
540 | { USB_DEVICE(DELL_VENDOR_ID, DELL_PRODUCT_5520_MINICARD_GENERIC_L) }, /* Dell Wireless HSDPA 5520 */ | ||
541 | { USB_DEVICE(DELL_VENDOR_ID, DELL_PRODUCT_5520_MINICARD_GENERIC_I) }, /* Dell Wireless 5520 Voda I Mobile Broadband (3G HSDPA) Minicard */ | ||
542 | - { USB_DEVICE(DELL_VENDOR_ID, 0x8147) }, /* Dell Wireless 5530 Mobile Broadband (3G HSPA) Mini-Card */ | ||
543 | { USB_DEVICE(DELL_VENDOR_ID, DELL_PRODUCT_5730_MINICARD_SPRINT) }, /* Dell Wireless 5730 Mobile Broadband EVDO/HSPA Mini-Card */ | ||
544 | { USB_DEVICE(DELL_VENDOR_ID, DELL_PRODUCT_5730_MINICARD_TELUS) }, /* Dell Wireless 5730 Mobile Broadband EVDO/HSPA Mini-Card */ | ||
545 | { USB_DEVICE(DELL_VENDOR_ID, DELL_PRODUCT_5730_MINICARD_VZW) }, /* Dell Wireless 5730 Mobile Broadband EVDO/HSPA Mini-Card */ | ||
546 | @@ -497,10 +497,10 @@ static struct usb_device_id option_ids[] = { | ||
547 | { USB_DEVICE(QUALCOMM_VENDOR_ID, 0x6613)}, /* Onda H600/ZTE MF330 */ | ||
548 | { USB_DEVICE(MAXON_VENDOR_ID, 0x6280) }, /* BP3-USB & BP3-EXT HSDPA */ | ||
549 | { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_UC864E) }, | ||
550 | + { USB_DEVICE(ZTE_VENDOR_ID, ZTE_PRODUCT_MF622) }, | ||
551 | { USB_DEVICE(ZTE_VENDOR_ID, ZTE_PRODUCT_MF626) }, | ||
552 | { USB_DEVICE(ZTE_VENDOR_ID, ZTE_PRODUCT_MF628) }, | ||
553 | { USB_DEVICE(ZTE_VENDOR_ID, ZTE_PRODUCT_CDMA_TECH) }, | ||
554 | - { USB_DEVICE(ERICSSON_VENDOR_ID, ERICSSON_PRODUCT_F3507G) }, | ||
555 | { USB_DEVICE(BENQ_VENDOR_ID, BENQ_PRODUCT_H10) }, | ||
556 | { USB_DEVICE(0x1da5, 0x4515) }, /* BenQ H20 */ | ||
557 | { } /* Terminating entry */ | ||
558 | diff --git a/drivers/usb/storage/unusual_devs.h b/drivers/usb/storage/unusual_devs.h | ||
559 | index 019bd62..d21995a 100644 | ||
560 | --- a/drivers/usb/storage/unusual_devs.h | ||
561 | +++ b/drivers/usb/storage/unusual_devs.h | ||
562 | @@ -219,7 +219,7 @@ UNUSUAL_DEV( 0x0421, 0x047c, 0x0370, 0x0610, | ||
563 | US_FL_MAX_SECTORS_64 ), | ||
564 | |||
565 | /* Reported by Manuel Osdoba <manuel.osdoba@tu-ilmenau.de> */ | ||
566 | -UNUSUAL_DEV( 0x0421, 0x0492, 0x0452, 0x0452, | ||
567 | +UNUSUAL_DEV( 0x0421, 0x0492, 0x0452, 0x9999, | ||
568 | "Nokia", | ||
569 | "Nokia 6233", | ||
570 | US_SC_DEVICE, US_PR_DEVICE, NULL, | ||
571 | @@ -990,7 +990,9 @@ UNUSUAL_DEV( 0x066f, 0x8000, 0x0001, 0x0001, | ||
572 | US_FL_FIX_CAPACITY ), | ||
573 | |||
574 | /* Reported by Richard -=[]=- <micro_flyer@hotmail.com> */ | ||
575 | -UNUSUAL_DEV( 0x067b, 0x2507, 0x0100, 0x0100, | ||
576 | +/* Change to bcdDeviceMin (0x0100 to 0x0001) reported by | ||
577 | + * Thomas Bartosik <tbartdev@gmx-topmail.de> */ | ||
578 | +UNUSUAL_DEV( 0x067b, 0x2507, 0x0001, 0x0100, | ||
579 | "Prolific Technology Inc.", | ||
580 | "Mass Storage Device", | ||
581 | US_SC_DEVICE, US_PR_DEVICE, NULL, | ||
582 | @@ -1405,6 +1407,16 @@ UNUSUAL_DEV( 0x0af0, 0x7401, 0x0000, 0x0000, | ||
583 | US_SC_DEVICE, US_PR_DEVICE, NULL, | ||
584 | 0 ), | ||
585 | |||
586 | +/* Reported by Jan Dumon <j.dumon@option.com> | ||
587 | + * This device (wrongly) has a vendor-specific device descriptor. | ||
588 | + * The entry is needed so usb-storage can bind to it's mass-storage | ||
589 | + * interface as an interface driver */ | ||
590 | +UNUSUAL_DEV( 0x0af0, 0x7501, 0x0000, 0x0000, | ||
591 | + "Option", | ||
592 | + "GI 0431 SD-Card", | ||
593 | + US_SC_DEVICE, US_PR_DEVICE, NULL, | ||
594 | + 0 ), | ||
595 | + | ||
596 | #ifdef CONFIG_USB_STORAGE_ISD200 | ||
597 | UNUSUAL_DEV( 0x0bf6, 0xa001, 0x0100, 0x0110, | ||
598 | "ATI", | ||
599 | diff --git a/fs/aio.c b/fs/aio.c | ||
600 | index 048648d..c1174b5 100644 | ||
601 | --- a/fs/aio.c | ||
602 | +++ b/fs/aio.c | ||
603 | @@ -428,7 +428,7 @@ static struct kiocb *__aio_get_req(struct kioctx *ctx) | ||
604 | req->private = NULL; | ||
605 | req->ki_iovec = NULL; | ||
606 | INIT_LIST_HEAD(&req->ki_run_list); | ||
607 | - req->ki_eventfd = ERR_PTR(-EINVAL); | ||
608 | + req->ki_eventfd = NULL; | ||
609 | |||
610 | /* Check if the completion queue has enough free space to | ||
611 | * accept an event from this io. | ||
612 | @@ -470,8 +470,6 @@ static inline void really_put_req(struct kioctx *ctx, struct kiocb *req) | ||
613 | { | ||
614 | assert_spin_locked(&ctx->ctx_lock); | ||
615 | |||
616 | - if (!IS_ERR(req->ki_eventfd)) | ||
617 | - fput(req->ki_eventfd); | ||
618 | if (req->ki_dtor) | ||
619 | req->ki_dtor(req); | ||
620 | if (req->ki_iovec != &req->ki_inline_vec) | ||
621 | @@ -493,8 +491,11 @@ static void aio_fput_routine(struct work_struct *data) | ||
622 | list_del(&req->ki_list); | ||
623 | spin_unlock_irq(&fput_lock); | ||
624 | |||
625 | - /* Complete the fput */ | ||
626 | - __fput(req->ki_filp); | ||
627 | + /* Complete the fput(s) */ | ||
628 | + if (req->ki_filp != NULL) | ||
629 | + __fput(req->ki_filp); | ||
630 | + if (req->ki_eventfd != NULL) | ||
631 | + __fput(req->ki_eventfd); | ||
632 | |||
633 | /* Link the iocb into the context's free list */ | ||
634 | spin_lock_irq(&ctx->ctx_lock); | ||
635 | @@ -512,12 +513,14 @@ static void aio_fput_routine(struct work_struct *data) | ||
636 | */ | ||
637 | static int __aio_put_req(struct kioctx *ctx, struct kiocb *req) | ||
638 | { | ||
639 | + int schedule_putreq = 0; | ||
640 | + | ||
641 | dprintk(KERN_DEBUG "aio_put(%p): f_count=%ld\n", | ||
642 | req, atomic_long_read(&req->ki_filp->f_count)); | ||
643 | |||
644 | assert_spin_locked(&ctx->ctx_lock); | ||
645 | |||
646 | - req->ki_users --; | ||
647 | + req->ki_users--; | ||
648 | BUG_ON(req->ki_users < 0); | ||
649 | if (likely(req->ki_users)) | ||
650 | return 0; | ||
651 | @@ -525,10 +528,23 @@ static int __aio_put_req(struct kioctx *ctx, struct kiocb *req) | ||
652 | req->ki_cancel = NULL; | ||
653 | req->ki_retry = NULL; | ||
654 | |||
655 | - /* Must be done under the lock to serialise against cancellation. | ||
656 | - * Call this aio_fput as it duplicates fput via the fput_work. | ||
657 | + /* | ||
658 | + * Try to optimize the aio and eventfd file* puts, by avoiding to | ||
659 | + * schedule work in case it is not __fput() time. In normal cases, | ||
660 | + * we would not be holding the last reference to the file*, so | ||
661 | + * this function will be executed w/out any aio kthread wakeup. | ||
662 | */ | ||
663 | - if (unlikely(atomic_long_dec_and_test(&req->ki_filp->f_count))) { | ||
664 | + if (unlikely(atomic_long_dec_and_test(&req->ki_filp->f_count))) | ||
665 | + schedule_putreq++; | ||
666 | + else | ||
667 | + req->ki_filp = NULL; | ||
668 | + if (req->ki_eventfd != NULL) { | ||
669 | + if (unlikely(atomic_long_dec_and_test(&req->ki_eventfd->f_count))) | ||
670 | + schedule_putreq++; | ||
671 | + else | ||
672 | + req->ki_eventfd = NULL; | ||
673 | + } | ||
674 | + if (unlikely(schedule_putreq)) { | ||
675 | get_ioctx(ctx); | ||
676 | spin_lock(&fput_lock); | ||
677 | list_add(&req->ki_list, &fput_head); | ||
678 | @@ -992,7 +1008,7 @@ int aio_complete(struct kiocb *iocb, long res, long res2) | ||
679 | * eventfd. The eventfd_signal() function is safe to be called | ||
680 | * from IRQ context. | ||
681 | */ | ||
682 | - if (!IS_ERR(iocb->ki_eventfd)) | ||
683 | + if (iocb->ki_eventfd != NULL) | ||
684 | eventfd_signal(iocb->ki_eventfd, 1); | ||
685 | |||
686 | put_rq: | ||
687 | @@ -1596,6 +1612,7 @@ static int io_submit_one(struct kioctx *ctx, struct iocb __user *user_iocb, | ||
688 | req->ki_eventfd = eventfd_fget((int) iocb->aio_resfd); | ||
689 | if (IS_ERR(req->ki_eventfd)) { | ||
690 | ret = PTR_ERR(req->ki_eventfd); | ||
691 | + req->ki_eventfd = NULL; | ||
692 | goto out_put_req; | ||
693 | } | ||
694 | } | ||
695 | diff --git a/fs/nfsd/nfs4xdr.c b/fs/nfsd/nfs4xdr.c | ||
696 | index 14ba4d9..b0b07df 100644 | ||
697 | --- a/fs/nfsd/nfs4xdr.c | ||
698 | +++ b/fs/nfsd/nfs4xdr.c | ||
699 | @@ -2593,6 +2593,7 @@ static nfsd4_enc nfsd4_enc_ops[] = { | ||
700 | [OP_LOOKUPP] = (nfsd4_enc)nfsd4_encode_noop, | ||
701 | [OP_NVERIFY] = (nfsd4_enc)nfsd4_encode_noop, | ||
702 | [OP_OPEN] = (nfsd4_enc)nfsd4_encode_open, | ||
703 | + [OP_OPENATTR] = (nfsd4_enc)nfsd4_encode_noop, | ||
704 | [OP_OPEN_CONFIRM] = (nfsd4_enc)nfsd4_encode_open_confirm, | ||
705 | [OP_OPEN_DOWNGRADE] = (nfsd4_enc)nfsd4_encode_open_downgrade, | ||
706 | [OP_PUTFH] = (nfsd4_enc)nfsd4_encode_noop, | ||
707 | diff --git a/include/asm-x86/msr-index.h b/include/asm-x86/msr-index.h | ||
708 | index 44bce77..d3a20f3 100644 | ||
709 | --- a/include/asm-x86/msr-index.h | ||
710 | +++ b/include/asm-x86/msr-index.h | ||
711 | @@ -196,6 +196,35 @@ | ||
712 | #define MSR_IA32_THERM_STATUS 0x0000019c | ||
713 | #define MSR_IA32_MISC_ENABLE 0x000001a0 | ||
714 | |||
715 | +/* MISC_ENABLE bits: architectural */ | ||
716 | +#define MSR_IA32_MISC_ENABLE_FAST_STRING (1ULL << 0) | ||
717 | +#define MSR_IA32_MISC_ENABLE_TCC (1ULL << 1) | ||
718 | +#define MSR_IA32_MISC_ENABLE_EMON (1ULL << 7) | ||
719 | +#define MSR_IA32_MISC_ENABLE_BTS_UNAVAIL (1ULL << 11) | ||
720 | +#define MSR_IA32_MISC_ENABLE_PEBS_UNAVAIL (1ULL << 12) | ||
721 | +#define MSR_IA32_MISC_ENABLE_ENHANCED_SPEEDSTEP (1ULL << 16) | ||
722 | +#define MSR_IA32_MISC_ENABLE_MWAIT (1ULL << 18) | ||
723 | +#define MSR_IA32_MISC_ENABLE_LIMIT_CPUID (1ULL << 22) | ||
724 | +#define MSR_IA32_MISC_ENABLE_XTPR_DISABLE (1ULL << 23) | ||
725 | +#define MSR_IA32_MISC_ENABLE_XD_DISABLE (1ULL << 34) | ||
726 | + | ||
727 | +/* MISC_ENABLE bits: model-specific, meaning may vary from core to core */ | ||
728 | +#define MSR_IA32_MISC_ENABLE_X87_COMPAT (1ULL << 2) | ||
729 | +#define MSR_IA32_MISC_ENABLE_TM1 (1ULL << 3) | ||
730 | +#define MSR_IA32_MISC_ENABLE_SPLIT_LOCK_DISABLE (1ULL << 4) | ||
731 | +#define MSR_IA32_MISC_ENABLE_L3CACHE_DISABLE (1ULL << 6) | ||
732 | +#define MSR_IA32_MISC_ENABLE_SUPPRESS_LOCK (1ULL << 8) | ||
733 | +#define MSR_IA32_MISC_ENABLE_PREFETCH_DISABLE (1ULL << 9) | ||
734 | +#define MSR_IA32_MISC_ENABLE_FERR (1ULL << 10) | ||
735 | +#define MSR_IA32_MISC_ENABLE_FERR_MULTIPLEX (1ULL << 10) | ||
736 | +#define MSR_IA32_MISC_ENABLE_TM2 (1ULL << 13) | ||
737 | +#define MSR_IA32_MISC_ENABLE_ADJ_PREF_DISABLE (1ULL << 19) | ||
738 | +#define MSR_IA32_MISC_ENABLE_SPEEDSTEP_LOCK (1ULL << 20) | ||
739 | +#define MSR_IA32_MISC_ENABLE_L1D_CONTEXT (1ULL << 24) | ||
740 | +#define MSR_IA32_MISC_ENABLE_DCU_PREF_DISABLE (1ULL << 37) | ||
741 | +#define MSR_IA32_MISC_ENABLE_TURBO_DISABLE (1ULL << 38) | ||
742 | +#define MSR_IA32_MISC_ENABLE_IP_PREF_DISABLE (1ULL << 39) | ||
743 | + | ||
744 | /* Intel Model 6 */ | ||
745 | #define MSR_P6_EVNTSEL0 0x00000186 | ||
746 | #define MSR_P6_EVNTSEL1 0x00000187 | ||
747 | diff --git a/include/linux/capability.h b/include/linux/capability.h | ||
748 | index 9d1fe30..28863f4 100644 | ||
749 | --- a/include/linux/capability.h | ||
750 | +++ b/include/linux/capability.h | ||
751 | @@ -382,8 +382,10 @@ typedef struct kernel_cap_struct { | ||
752 | # define CAP_FULL_SET ((kernel_cap_t){{ ~0, ~0 }}) | ||
753 | # define CAP_INIT_EFF_SET ((kernel_cap_t){{ ~CAP_TO_MASK(CAP_SETPCAP), ~0 }}) | ||
754 | # define CAP_FS_SET ((kernel_cap_t){{ CAP_FS_MASK_B0, CAP_FS_MASK_B1 } }) | ||
755 | -# define CAP_NFSD_SET ((kernel_cap_t){{ CAP_FS_MASK_B0|CAP_TO_MASK(CAP_SYS_RESOURCE), \ | ||
756 | - CAP_FS_MASK_B1 } }) | ||
757 | +# define CAP_NFSD_SET ((kernel_cap_t){{ CAP_FS_MASK_B0 \ | ||
758 | + | CAP_TO_MASK(CAP_SYS_RESOURCE) \ | ||
759 | + | CAP_TO_MASK(CAP_MKNOD), \ | ||
760 | + CAP_FS_MASK_B1 } }) | ||
761 | |||
762 | #endif /* _KERNEL_CAPABILITY_U32S != 2 */ | ||
763 | |||
764 | diff --git a/sound/core/oss/pcm_oss.c b/sound/core/oss/pcm_oss.c | ||
765 | index 4c601b1..35afb41 100644 | ||
766 | --- a/sound/core/oss/pcm_oss.c | ||
767 | +++ b/sound/core/oss/pcm_oss.c | ||
768 | @@ -2854,7 +2854,7 @@ static void snd_pcm_oss_proc_write(struct snd_info_entry *entry, | ||
769 | setup = kmalloc(sizeof(*setup), GFP_KERNEL); | ||
770 | if (! setup) { | ||
771 | buffer->error = -ENOMEM; | ||
772 | - mutex_lock(&pstr->oss.setup_mutex); | ||
773 | + mutex_unlock(&pstr->oss.setup_mutex); | ||
774 | return; | ||
775 | } | ||
776 | if (pstr->oss.setup_list == NULL) | ||
777 | @@ -2868,7 +2868,7 @@ static void snd_pcm_oss_proc_write(struct snd_info_entry *entry, | ||
778 | if (! template.task_name) { | ||
779 | kfree(setup); | ||
780 | buffer->error = -ENOMEM; | ||
781 | - mutex_lock(&pstr->oss.setup_mutex); | ||
782 | + mutex_unlock(&pstr->oss.setup_mutex); | ||
783 | return; | ||
784 | } | ||
785 | } | ||
786 | diff --git a/sound/core/sgbuf.c b/sound/core/sgbuf.c | ||
787 | index cefd228..91f16ac 100644 | ||
788 | --- a/sound/core/sgbuf.c | ||
789 | +++ b/sound/core/sgbuf.c | ||
790 | @@ -38,6 +38,10 @@ int snd_free_sgbuf_pages(struct snd_dma_buffer *dmab) | ||
791 | if (! sgbuf) | ||
792 | return -EINVAL; | ||
793 | |||
794 | + if (dmab->area) | ||
795 | + vunmap(dmab->area); | ||
796 | + dmab->area = NULL; | ||
797 | + | ||
798 | tmpb.dev.type = SNDRV_DMA_TYPE_DEV; | ||
799 | tmpb.dev.dev = sgbuf->dev; | ||
800 | for (i = 0; i < sgbuf->pages; i++) { | ||
801 | @@ -46,9 +50,6 @@ int snd_free_sgbuf_pages(struct snd_dma_buffer *dmab) | ||
802 | tmpb.bytes = PAGE_SIZE; | ||
803 | snd_dma_free_pages(&tmpb); | ||
804 | } | ||
805 | - if (dmab->area) | ||
806 | - vunmap(dmab->area); | ||
807 | - dmab->area = NULL; | ||
808 | |||
809 | kfree(sgbuf->table); | ||
810 | kfree(sgbuf->page_table); | ||
811 | diff --git a/sound/pci/hda/hda_intel.c b/sound/pci/hda/hda_intel.c | ||
812 | index 0f014b1..0b93ef6 100644 | ||
813 | --- a/sound/pci/hda/hda_intel.c | ||
814 | +++ b/sound/pci/hda/hda_intel.c | ||
815 | @@ -2110,9 +2110,17 @@ static int __devinit azx_create(struct snd_card *card, struct pci_dev *pci, | ||
816 | gcap = azx_readw(chip, GCAP); | ||
817 | snd_printdd("chipset global capabilities = 0x%x\n", gcap); | ||
818 | |||
819 | + /* ATI chips seems buggy about 64bit DMA addresses */ | ||
820 | + if (chip->driver_type == AZX_DRIVER_ATI) | ||
821 | + gcap &= ~0x01; | ||
822 | + | ||
823 | /* allow 64bit DMA address if supported by H/W */ | ||
824 | if ((gcap & 0x01) && !pci_set_dma_mask(pci, DMA_64BIT_MASK)) | ||
825 | pci_set_consistent_dma_mask(pci, DMA_64BIT_MASK); | ||
826 | + else { | ||
827 | + pci_set_dma_mask(pci, DMA_32BIT_MASK); | ||
828 | + pci_set_consistent_dma_mask(pci, DMA_32BIT_MASK); | ||
829 | + } | ||
830 | |||
831 | /* read number of streams from GCAP register instead of using | ||
832 | * hardcoded value | ||
833 | diff --git a/sound/pci/mixart/mixart.c b/sound/pci/mixart/mixart.c | ||
834 | index 3dd0c79..7e83131 100644 | ||
835 | --- a/sound/pci/mixart/mixart.c | ||
836 | +++ b/sound/pci/mixart/mixart.c | ||
837 | @@ -607,6 +607,7 @@ static int snd_mixart_hw_params(struct snd_pcm_substream *subs, | ||
838 | /* set the format to the board */ | ||
839 | err = mixart_set_format(stream, format); | ||
840 | if(err < 0) { | ||
841 | + mutex_unlock(&mgr->setup_mutex); | ||
842 | return err; | ||
843 | } | ||
844 |