diff options
Diffstat (limited to 'sound')
-rw-r--r-- | sound/arm/sa11xx-uda1341.c | 2 | ||||
-rw-r--r-- | sound/core/pcm_native.c | 10 | ||||
-rw-r--r-- | sound/oss/Kconfig | 115 | ||||
-rw-r--r-- | sound/oss/btaudio.c | 2 | ||||
-rw-r--r-- | sound/oss/emu10k1/audio.c | 8 | ||||
-rw-r--r-- | sound/oss/emu10k1/cardwi.c | 31 | ||||
-rw-r--r-- | sound/oss/emu10k1/cardwi.h | 2 | ||||
-rw-r--r-- | sound/oss/emu10k1/passthrough.c | 13 | ||||
-rw-r--r-- | sound/oss/via82cxxx_audio.c | 4 | ||||
-rw-r--r-- | sound/usb/usx2y/usX2Yhwdep.c | 2 |
10 files changed, 49 insertions, 140 deletions
diff --git a/sound/arm/sa11xx-uda1341.c b/sound/arm/sa11xx-uda1341.c index c79a9afd0955..c7e1b2646193 100644 --- a/sound/arm/sa11xx-uda1341.c +++ b/sound/arm/sa11xx-uda1341.c | |||
@@ -125,7 +125,7 @@ struct audio_stream { | |||
125 | #else | 125 | #else |
126 | dma_regs_t *dma_regs; /* points to our DMA registers */ | 126 | dma_regs_t *dma_regs; /* points to our DMA registers */ |
127 | #endif | 127 | #endif |
128 | int active:1; /* we are using this stream for transfer now */ | 128 | unsigned int active:1; /* we are using this stream for transfer now */ |
129 | int period; /* current transfer period */ | 129 | int period; /* current transfer period */ |
130 | int periods; /* current count of periods registerd in the DMA engine */ | 130 | int periods; /* current count of periods registerd in the DMA engine */ |
131 | int tx_spin; /* are we recoding - flag used to do DMA trans. for sync */ | 131 | int tx_spin; /* are we recoding - flag used to do DMA trans. for sync */ |
diff --git a/sound/core/pcm_native.c b/sound/core/pcm_native.c index 66e24b5da469..6ea67b16c676 100644 --- a/sound/core/pcm_native.c +++ b/sound/core/pcm_native.c | |||
@@ -3027,7 +3027,7 @@ static struct page * snd_pcm_mmap_status_nopage(struct vm_area_struct *area, | |||
3027 | struct page * page; | 3027 | struct page * page; |
3028 | 3028 | ||
3029 | if (substream == NULL) | 3029 | if (substream == NULL) |
3030 | return NOPAGE_OOM; | 3030 | return NOPAGE_SIGBUS; |
3031 | runtime = substream->runtime; | 3031 | runtime = substream->runtime; |
3032 | page = virt_to_page(runtime->status); | 3032 | page = virt_to_page(runtime->status); |
3033 | get_page(page); | 3033 | get_page(page); |
@@ -3070,7 +3070,7 @@ static struct page * snd_pcm_mmap_control_nopage(struct vm_area_struct *area, | |||
3070 | struct page * page; | 3070 | struct page * page; |
3071 | 3071 | ||
3072 | if (substream == NULL) | 3072 | if (substream == NULL) |
3073 | return NOPAGE_OOM; | 3073 | return NOPAGE_SIGBUS; |
3074 | runtime = substream->runtime; | 3074 | runtime = substream->runtime; |
3075 | page = virt_to_page(runtime->control); | 3075 | page = virt_to_page(runtime->control); |
3076 | get_page(page); | 3076 | get_page(page); |
@@ -3131,18 +3131,18 @@ static struct page *snd_pcm_mmap_data_nopage(struct vm_area_struct *area, | |||
3131 | size_t dma_bytes; | 3131 | size_t dma_bytes; |
3132 | 3132 | ||
3133 | if (substream == NULL) | 3133 | if (substream == NULL) |
3134 | return NOPAGE_OOM; | 3134 | return NOPAGE_SIGBUS; |
3135 | runtime = substream->runtime; | 3135 | runtime = substream->runtime; |
3136 | offset = area->vm_pgoff << PAGE_SHIFT; | 3136 | offset = area->vm_pgoff << PAGE_SHIFT; |
3137 | offset += address - area->vm_start; | 3137 | offset += address - area->vm_start; |
3138 | snd_assert((offset % PAGE_SIZE) == 0, return NOPAGE_OOM); | 3138 | snd_assert((offset % PAGE_SIZE) == 0, return NOPAGE_SIGBUS); |
3139 | dma_bytes = PAGE_ALIGN(runtime->dma_bytes); | 3139 | dma_bytes = PAGE_ALIGN(runtime->dma_bytes); |
3140 | if (offset > dma_bytes - PAGE_SIZE) | 3140 | if (offset > dma_bytes - PAGE_SIZE) |
3141 | return NOPAGE_SIGBUS; | 3141 | return NOPAGE_SIGBUS; |
3142 | if (substream->ops->page) { | 3142 | if (substream->ops->page) { |
3143 | page = substream->ops->page(substream, offset); | 3143 | page = substream->ops->page(substream, offset); |
3144 | if (! page) | 3144 | if (! page) |
3145 | return NOPAGE_OOM; | 3145 | return NOPAGE_OOM; /* XXX: is this really due to OOM? */ |
3146 | } else { | 3146 | } else { |
3147 | vaddr = runtime->dma_area + offset; | 3147 | vaddr = runtime->dma_area + offset; |
3148 | page = virt_to_page(vaddr); | 3148 | page = virt_to_page(vaddr); |
diff --git a/sound/oss/Kconfig b/sound/oss/Kconfig index cc2b9ab7f4e5..a0588c21324a 100644 --- a/sound/oss/Kconfig +++ b/sound/oss/Kconfig | |||
@@ -5,20 +5,6 @@ | |||
5 | # | 5 | # |
6 | # Prompt user for primary drivers. | 6 | # Prompt user for primary drivers. |
7 | 7 | ||
8 | config OSS_OBSOLETE_DRIVER | ||
9 | bool "Obsolete OSS drivers" | ||
10 | depends on SOUND_PRIME | ||
11 | help | ||
12 | This option enables support for obsolete OSS drivers that | ||
13 | are scheduled for removal in the near future since there | ||
14 | are ALSA drivers for the same hardware. | ||
15 | |||
16 | Please contact Adrian Bunk <bunk@stusta.de> if you had to | ||
17 | say Y here because your soundcard is not properly supported | ||
18 | by ALSA. | ||
19 | |||
20 | If unsure, say N. | ||
21 | |||
22 | config SOUND_BT878 | 8 | config SOUND_BT878 |
23 | tristate "BT878 audio dma" | 9 | tristate "BT878 audio dma" |
24 | depends on SOUND_PRIME && PCI | 10 | depends on SOUND_PRIME && PCI |
@@ -35,40 +21,6 @@ config SOUND_BT878 | |||
35 | To compile this driver as a module, choose M here: the module will | 21 | To compile this driver as a module, choose M here: the module will |
36 | be called btaudio. | 22 | be called btaudio. |
37 | 23 | ||
38 | config SOUND_EMU10K1 | ||
39 | tristate "Creative SBLive! (EMU10K1)" | ||
40 | depends on SOUND_PRIME && PCI && OSS_OBSOLETE_DRIVER | ||
41 | ---help--- | ||
42 | Say Y or M if you have a PCI sound card using the EMU10K1 chipset, | ||
43 | such as the Creative SBLive!, SB PCI512 or Emu-APS. | ||
44 | |||
45 | For more information on this driver and the degree of support for | ||
46 | the different card models please check: | ||
47 | |||
48 | <http://sourceforge.net/projects/emu10k1/> | ||
49 | |||
50 | It is now possible to load dsp microcode patches into the EMU10K1 | ||
51 | chip. These patches are used to implement real time sound | ||
52 | processing effects which include for example: signal routing, | ||
53 | bass/treble control, AC3 passthrough, ... | ||
54 | Userspace tools to create new patches and load/unload them can be | ||
55 | found in the emu-tools package at the above URL. | ||
56 | |||
57 | config MIDI_EMU10K1 | ||
58 | bool "Creative SBLive! MIDI (EXPERIMENTAL)" | ||
59 | depends on SOUND_EMU10K1 && EXPERIMENTAL && ISA_DMA_API | ||
60 | help | ||
61 | Say Y if you want to be able to use the OSS /dev/sequencer | ||
62 | interface. This code is still experimental. | ||
63 | |||
64 | config SOUND_FUSION | ||
65 | tristate "Crystal SoundFusion (CS4280/461x)" | ||
66 | depends on SOUND_PRIME && PCI && OSS_OBSOLETE_DRIVER | ||
67 | help | ||
68 | This module drives the Crystal SoundFusion devices (CS4280/46xx | ||
69 | series) when wired as native sound drivers with AC97 codecs. If | ||
70 | this driver does not work try the CS4232 driver. | ||
71 | |||
72 | config SOUND_BCM_CS4297A | 24 | config SOUND_BCM_CS4297A |
73 | tristate "Crystal Sound CS4297a (for Swarm)" | 25 | tristate "Crystal Sound CS4297a (for Swarm)" |
74 | depends on SOUND_PRIME && SIBYTE_SWARM | 26 | depends on SOUND_PRIME && SIBYTE_SWARM |
@@ -448,47 +400,6 @@ config SOUND_DMAP | |||
448 | 400 | ||
449 | Say Y unless you have 16MB or more RAM or a PCI sound card. | 401 | Say Y unless you have 16MB or more RAM or a PCI sound card. |
450 | 402 | ||
451 | config SOUND_AD1816 | ||
452 | tristate "AD1816(A) based cards (EXPERIMENTAL)" | ||
453 | depends on EXPERIMENTAL && SOUND_OSS && OSS_OBSOLETE_DRIVER | ||
454 | help | ||
455 | Say M here if you have a sound card based on the Analog Devices | ||
456 | AD1816(A) chip. | ||
457 | |||
458 | If you compile the driver into the kernel, you have to add | ||
459 | "ad1816=<io>,<irq>,<dma>,<dma2>" to the kernel command line. | ||
460 | |||
461 | config SOUND_AD1889 | ||
462 | tristate "AD1889 based cards (AD1819 codec) (EXPERIMENTAL)" | ||
463 | depends on EXPERIMENTAL && SOUND_OSS && PCI && OSS_OBSOLETE_DRIVER | ||
464 | help | ||
465 | Say M here if you have a sound card based on the Analog Devices | ||
466 | AD1889 chip. | ||
467 | |||
468 | config SOUND_ADLIB | ||
469 | tristate "Adlib Cards" | ||
470 | depends on SOUND_OSS && OSS_OBSOLETE_DRIVER | ||
471 | help | ||
472 | Includes ASB 64 4D. Information on programming AdLib cards is | ||
473 | available at <http://www.itsnet.com/home/ldragon/Specs/adlib.html>. | ||
474 | |||
475 | config SOUND_ACI_MIXER | ||
476 | tristate "ACI mixer (miroSOUND PCM1-pro/PCM12/PCM20)" | ||
477 | depends on SOUND_OSS && OSS_OBSOLETE_DRIVER | ||
478 | ---help--- | ||
479 | ACI (Audio Command Interface) is a protocol used to communicate with | ||
480 | the microcontroller on some sound cards produced by miro and | ||
481 | Cardinal Technologies. The main function of the ACI is to control | ||
482 | the mixer and to get a product identification. | ||
483 | |||
484 | This VoxWare ACI driver currently supports the ACI functions on the | ||
485 | miroSOUND PCM1-pro, PCM12 and PCM20 radio. On the PCM20 radio, ACI | ||
486 | also controls the radio tuner. This is supported in the video4linux | ||
487 | miropcm20 driver (say M or Y here and go back to "Multimedia | ||
488 | devices" -> "Radio Adapters"). | ||
489 | |||
490 | This driver is also available as a module and will be called aci. | ||
491 | |||
492 | config SOUND_CS4232 | 403 | config SOUND_CS4232 |
493 | tristate "Crystal CS4232 based (PnP) cards" | 404 | tristate "Crystal CS4232 based (PnP) cards" |
494 | depends on SOUND_OSS | 405 | depends on SOUND_OSS |
@@ -594,18 +505,6 @@ config SOUND_MPU401 | |||
594 | If you compile the driver into the kernel, you have to add | 505 | If you compile the driver into the kernel, you have to add |
595 | "mpu401=<io>,<irq>" to the kernel command line. | 506 | "mpu401=<io>,<irq>" to the kernel command line. |
596 | 507 | ||
597 | config SOUND_NM256 | ||
598 | tristate "NM256AV/NM256ZX audio support" | ||
599 | depends on SOUND_OSS && OSS_OBSOLETE_DRIVER | ||
600 | help | ||
601 | Say M here to include audio support for the NeoMagic 256AV/256ZX | ||
602 | chipsets. These are the audio chipsets found in the Sony | ||
603 | Z505S/SX/DX, some Sony F-series, and the Dell Latitude CPi and CPt | ||
604 | laptops. It includes support for an AC97-compatible mixer and an | ||
605 | apparently proprietary sound engine. | ||
606 | |||
607 | See <file:Documentation/sound/oss/NM256> for further information. | ||
608 | |||
609 | config SOUND_PAS | 508 | config SOUND_PAS |
610 | tristate "ProAudioSpectrum 16 support" | 509 | tristate "ProAudioSpectrum 16 support" |
611 | depends on SOUND_OSS | 510 | depends on SOUND_OSS |
@@ -714,20 +613,6 @@ config SOUND_YM3812 | |||
714 | 613 | ||
715 | If unsure, say Y. | 614 | If unsure, say Y. |
716 | 615 | ||
717 | config SOUND_OPL3SA2 | ||
718 | tristate "Yamaha OPL3-SA2 and SA3 based PnP cards" | ||
719 | depends on SOUND_OSS && OSS_OBSOLETE_DRIVER | ||
720 | help | ||
721 | Say Y or M if you have a card based on one of these Yamaha sound | ||
722 | chipsets or the "SAx", which is actually a SA3. Read | ||
723 | <file:Documentation/sound/oss/OPL3-SA2> for more information on | ||
724 | configuring these cards. | ||
725 | |||
726 | If you compile the driver into the kernel and do not also | ||
727 | configure in the optional ISA PnP support, you will have to add | ||
728 | "opl3sa2=<io>,<irq>,<dma>,<dma2>,<mssio>,<mpuio>" to the kernel | ||
729 | command line. | ||
730 | |||
731 | config SOUND_UART6850 | 616 | config SOUND_UART6850 |
732 | tristate "6850 UART support" | 617 | tristate "6850 UART support" |
733 | depends on SOUND_OSS | 618 | depends on SOUND_OSS |
diff --git a/sound/oss/btaudio.c b/sound/oss/btaudio.c index 6ad384114239..ad7210a00dc0 100644 --- a/sound/oss/btaudio.c +++ b/sound/oss/btaudio.c | |||
@@ -1020,6 +1020,7 @@ static int __devinit btaudio_probe(struct pci_dev *pci_dev, | |||
1020 | fail2: | 1020 | fail2: |
1021 | free_irq(bta->irq,bta); | 1021 | free_irq(bta->irq,bta); |
1022 | fail1: | 1022 | fail1: |
1023 | iounmap(bta->mmio); | ||
1023 | kfree(bta); | 1024 | kfree(bta); |
1024 | fail0: | 1025 | fail0: |
1025 | release_mem_region(pci_resource_start(pci_dev,0), | 1026 | release_mem_region(pci_resource_start(pci_dev,0), |
@@ -1051,6 +1052,7 @@ static void __devexit btaudio_remove(struct pci_dev *pci_dev) | |||
1051 | free_irq(bta->irq,bta); | 1052 | free_irq(bta->irq,bta); |
1052 | release_mem_region(pci_resource_start(pci_dev,0), | 1053 | release_mem_region(pci_resource_start(pci_dev,0), |
1053 | pci_resource_len(pci_dev,0)); | 1054 | pci_resource_len(pci_dev,0)); |
1055 | iounmap(bta->mmio); | ||
1054 | 1056 | ||
1055 | /* remove from linked list */ | 1057 | /* remove from linked list */ |
1056 | if (bta == btaudios) { | 1058 | if (bta == btaudios) { |
diff --git a/sound/oss/emu10k1/audio.c b/sound/oss/emu10k1/audio.c index 86dd23974e05..49f902f35c28 100644 --- a/sound/oss/emu10k1/audio.c +++ b/sound/oss/emu10k1/audio.c | |||
@@ -111,9 +111,15 @@ static ssize_t emu10k1_audio_read(struct file *file, char __user *buffer, size_t | |||
111 | 111 | ||
112 | if ((bytestocopy >= wiinst->buffer.fragment_size) | 112 | if ((bytestocopy >= wiinst->buffer.fragment_size) |
113 | || (bytestocopy >= count)) { | 113 | || (bytestocopy >= count)) { |
114 | int rc; | ||
115 | |||
114 | bytestocopy = min_t(u32, bytestocopy, count); | 116 | bytestocopy = min_t(u32, bytestocopy, count); |
115 | 117 | ||
116 | emu10k1_wavein_xferdata(wiinst, (u8 __user *)buffer, &bytestocopy); | 118 | rc = emu10k1_wavein_xferdata(wiinst, |
119 | (u8 __user *)buffer, | ||
120 | &bytestocopy); | ||
121 | if (rc) | ||
122 | return rc; | ||
117 | 123 | ||
118 | count -= bytestocopy; | 124 | count -= bytestocopy; |
119 | buffer += bytestocopy; | 125 | buffer += bytestocopy; |
diff --git a/sound/oss/emu10k1/cardwi.c b/sound/oss/emu10k1/cardwi.c index 8bbf44b881b4..060d1be94d33 100644 --- a/sound/oss/emu10k1/cardwi.c +++ b/sound/oss/emu10k1/cardwi.c | |||
@@ -304,11 +304,12 @@ void emu10k1_wavein_getxfersize(struct wiinst *wiinst, u32 * size) | |||
304 | } | 304 | } |
305 | } | 305 | } |
306 | 306 | ||
307 | static void copy_block(u8 __user *dst, u8 * src, u32 str, u32 len, u8 cov) | 307 | static int copy_block(u8 __user *dst, u8 * src, u32 str, u32 len, u8 cov) |
308 | { | 308 | { |
309 | if (cov == 1) | 309 | if (cov == 1) { |
310 | __copy_to_user(dst, src + str, len); | 310 | if (__copy_to_user(dst, src + str, len)) |
311 | else { | 311 | return -EFAULT; |
312 | } else { | ||
312 | u8 byte; | 313 | u8 byte; |
313 | u32 i; | 314 | u32 i; |
314 | 315 | ||
@@ -316,22 +317,26 @@ static void copy_block(u8 __user *dst, u8 * src, u32 str, u32 len, u8 cov) | |||
316 | 317 | ||
317 | for (i = 0; i < len; i++) { | 318 | for (i = 0; i < len; i++) { |
318 | byte = src[2 * i] ^ 0x80; | 319 | byte = src[2 * i] ^ 0x80; |
319 | __copy_to_user(dst + i, &byte, 1); | 320 | if (__copy_to_user(dst + i, &byte, 1)) |
321 | return -EFAULT; | ||
320 | } | 322 | } |
321 | } | 323 | } |
324 | |||
325 | return 0; | ||
322 | } | 326 | } |
323 | 327 | ||
324 | void emu10k1_wavein_xferdata(struct wiinst *wiinst, u8 __user *data, u32 * size) | 328 | int emu10k1_wavein_xferdata(struct wiinst *wiinst, u8 __user *data, u32 * size) |
325 | { | 329 | { |
326 | struct wavein_buffer *buffer = &wiinst->buffer; | 330 | struct wavein_buffer *buffer = &wiinst->buffer; |
327 | u32 sizetocopy, sizetocopy_now, start; | 331 | u32 sizetocopy, sizetocopy_now, start; |
328 | unsigned long flags; | 332 | unsigned long flags; |
333 | int ret; | ||
329 | 334 | ||
330 | sizetocopy = min_t(u32, buffer->size, *size); | 335 | sizetocopy = min_t(u32, buffer->size, *size); |
331 | *size = sizetocopy; | 336 | *size = sizetocopy; |
332 | 337 | ||
333 | if (!sizetocopy) | 338 | if (!sizetocopy) |
334 | return; | 339 | return 0; |
335 | 340 | ||
336 | spin_lock_irqsave(&wiinst->lock, flags); | 341 | spin_lock_irqsave(&wiinst->lock, flags); |
337 | start = buffer->pos; | 342 | start = buffer->pos; |
@@ -345,11 +350,17 @@ void emu10k1_wavein_xferdata(struct wiinst *wiinst, u8 __user *data, u32 * size) | |||
345 | if (sizetocopy > sizetocopy_now) { | 350 | if (sizetocopy > sizetocopy_now) { |
346 | sizetocopy -= sizetocopy_now; | 351 | sizetocopy -= sizetocopy_now; |
347 | 352 | ||
348 | copy_block(data, buffer->addr, start, sizetocopy_now, buffer->cov); | 353 | ret = copy_block(data, buffer->addr, start, sizetocopy_now, |
349 | copy_block(data + sizetocopy_now, buffer->addr, 0, sizetocopy, buffer->cov); | 354 | buffer->cov); |
355 | if (ret == 0) | ||
356 | ret = copy_block(data + sizetocopy_now, buffer->addr, 0, | ||
357 | sizetocopy, buffer->cov); | ||
350 | } else { | 358 | } else { |
351 | copy_block(data, buffer->addr, start, sizetocopy, buffer->cov); | 359 | ret = copy_block(data, buffer->addr, start, sizetocopy, |
360 | buffer->cov); | ||
352 | } | 361 | } |
362 | |||
363 | return ret; | ||
353 | } | 364 | } |
354 | 365 | ||
355 | void emu10k1_wavein_update(struct emu10k1_card *card, struct wiinst *wiinst) | 366 | void emu10k1_wavein_update(struct emu10k1_card *card, struct wiinst *wiinst) |
diff --git a/sound/oss/emu10k1/cardwi.h b/sound/oss/emu10k1/cardwi.h index 15cfb9b35596..e82029b46ad1 100644 --- a/sound/oss/emu10k1/cardwi.h +++ b/sound/oss/emu10k1/cardwi.h | |||
@@ -83,7 +83,7 @@ void emu10k1_wavein_close(struct emu10k1_wavedevice *); | |||
83 | void emu10k1_wavein_start(struct emu10k1_wavedevice *); | 83 | void emu10k1_wavein_start(struct emu10k1_wavedevice *); |
84 | void emu10k1_wavein_stop(struct emu10k1_wavedevice *); | 84 | void emu10k1_wavein_stop(struct emu10k1_wavedevice *); |
85 | void emu10k1_wavein_getxfersize(struct wiinst *, u32 *); | 85 | void emu10k1_wavein_getxfersize(struct wiinst *, u32 *); |
86 | void emu10k1_wavein_xferdata(struct wiinst *, u8 __user *, u32 *); | 86 | int emu10k1_wavein_xferdata(struct wiinst *, u8 __user *, u32 *); |
87 | int emu10k1_wavein_setformat(struct emu10k1_wavedevice *, struct wave_format *); | 87 | int emu10k1_wavein_setformat(struct emu10k1_wavedevice *, struct wave_format *); |
88 | void emu10k1_wavein_update(struct emu10k1_card *, struct wiinst *); | 88 | void emu10k1_wavein_update(struct emu10k1_card *, struct wiinst *); |
89 | 89 | ||
diff --git a/sound/oss/emu10k1/passthrough.c b/sound/oss/emu10k1/passthrough.c index 4e3baca7d41f..6d21d4368dec 100644 --- a/sound/oss/emu10k1/passthrough.c +++ b/sound/oss/emu10k1/passthrough.c | |||
@@ -162,12 +162,15 @@ ssize_t emu10k1_pt_write(struct file *file, const char __user *buffer, size_t co | |||
162 | 162 | ||
163 | DPD(3, "prepend size %d, prepending %d bytes\n", pt->prepend_size, needed); | 163 | DPD(3, "prepend size %d, prepending %d bytes\n", pt->prepend_size, needed); |
164 | if (count < needed) { | 164 | if (count < needed) { |
165 | copy_from_user(pt->buf + pt->prepend_size, buffer, count); | 165 | if (copy_from_user(pt->buf + pt->prepend_size, |
166 | buffer, count)) | ||
167 | return -EFAULT; | ||
166 | pt->prepend_size += count; | 168 | pt->prepend_size += count; |
167 | DPD(3, "prepend size now %d\n", pt->prepend_size); | 169 | DPD(3, "prepend size now %d\n", pt->prepend_size); |
168 | return count; | 170 | return count; |
169 | } | 171 | } |
170 | copy_from_user(pt->buf + pt->prepend_size, buffer, needed); | 172 | if (copy_from_user(pt->buf + pt->prepend_size, buffer, needed)) |
173 | return -EFAULT; | ||
171 | r = pt_putblock(wave_dev, (u16 *) pt->buf, nonblock); | 174 | r = pt_putblock(wave_dev, (u16 *) pt->buf, nonblock); |
172 | if (r) | 175 | if (r) |
173 | return r; | 176 | return r; |
@@ -178,7 +181,8 @@ ssize_t emu10k1_pt_write(struct file *file, const char __user *buffer, size_t co | |||
178 | blocks_copied = 0; | 181 | blocks_copied = 0; |
179 | while (blocks > 0) { | 182 | while (blocks > 0) { |
180 | u16 __user *bufptr = (u16 __user *) buffer + (bytes_copied/2); | 183 | u16 __user *bufptr = (u16 __user *) buffer + (bytes_copied/2); |
181 | copy_from_user(pt->buf, bufptr, PT_BLOCKSIZE); | 184 | if (copy_from_user(pt->buf, bufptr, PT_BLOCKSIZE)) |
185 | return -EFAULT; | ||
182 | r = pt_putblock(wave_dev, (u16 *)pt->buf, nonblock); | 186 | r = pt_putblock(wave_dev, (u16 *)pt->buf, nonblock); |
183 | if (r) { | 187 | if (r) { |
184 | if (bytes_copied) | 188 | if (bytes_copied) |
@@ -193,7 +197,8 @@ ssize_t emu10k1_pt_write(struct file *file, const char __user *buffer, size_t co | |||
193 | i = count - bytes_copied; | 197 | i = count - bytes_copied; |
194 | if (i) { | 198 | if (i) { |
195 | pt->prepend_size = i; | 199 | pt->prepend_size = i; |
196 | copy_from_user(pt->buf, buffer + bytes_copied, i); | 200 | if (copy_from_user(pt->buf, buffer + bytes_copied, i)) |
201 | return -EFAULT; | ||
197 | bytes_copied += i; | 202 | bytes_copied += i; |
198 | DPD(3, "filling prepend buffer with %d bytes", i); | 203 | DPD(3, "filling prepend buffer with %d bytes", i); |
199 | } | 204 | } |
diff --git a/sound/oss/via82cxxx_audio.c b/sound/oss/via82cxxx_audio.c index 17837d4b5ed3..c96cc8c68b3b 100644 --- a/sound/oss/via82cxxx_audio.c +++ b/sound/oss/via82cxxx_audio.c | |||
@@ -2120,8 +2120,8 @@ static struct page * via_mm_nopage (struct vm_area_struct * vma, | |||
2120 | return NOPAGE_SIGBUS; /* Disallow mremap */ | 2120 | return NOPAGE_SIGBUS; /* Disallow mremap */ |
2121 | } | 2121 | } |
2122 | if (!card) { | 2122 | if (!card) { |
2123 | DPRINTK ("EXIT, returning NOPAGE_OOM\n"); | 2123 | DPRINTK ("EXIT, returning NOPAGE_SIGBUS\n"); |
2124 | return NOPAGE_OOM; /* Nothing allocated */ | 2124 | return NOPAGE_SIGBUS; /* Nothing allocated */ |
2125 | } | 2125 | } |
2126 | 2126 | ||
2127 | pgoff = vma->vm_pgoff + ((address - vma->vm_start) >> PAGE_SHIFT); | 2127 | pgoff = vma->vm_pgoff + ((address - vma->vm_start) >> PAGE_SHIFT); |
diff --git a/sound/usb/usx2y/usX2Yhwdep.c b/sound/usb/usx2y/usX2Yhwdep.c index 4b52d18dcd53..b76b3dd9df25 100644 --- a/sound/usb/usx2y/usX2Yhwdep.c +++ b/sound/usb/usx2y/usX2Yhwdep.c | |||
@@ -48,7 +48,7 @@ static struct page * snd_us428ctls_vm_nopage(struct vm_area_struct *area, unsign | |||
48 | 48 | ||
49 | offset = area->vm_pgoff << PAGE_SHIFT; | 49 | offset = area->vm_pgoff << PAGE_SHIFT; |
50 | offset += address - area->vm_start; | 50 | offset += address - area->vm_start; |
51 | snd_assert((offset % PAGE_SIZE) == 0, return NOPAGE_OOM); | 51 | snd_assert((offset % PAGE_SIZE) == 0, return NOPAGE_SIGBUS); |
52 | vaddr = (char*)((struct usX2Ydev *)area->vm_private_data)->us428ctls_sharedmem + offset; | 52 | vaddr = (char*)((struct usX2Ydev *)area->vm_private_data)->us428ctls_sharedmem + offset; |
53 | page = virt_to_page(vaddr); | 53 | page = virt_to_page(vaddr); |
54 | get_page(page); | 54 | get_page(page); |