1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84
|
--- ../../alsa-kernel/core/oss/pcm_oss.c 2006-04-24 12:26:41.000000000 +0200
+++ pcm_oss.c 2006-04-24 12:31:46.000000000 +0200
@@ -2526,13 +2526,26 @@
return -EINVAL;
}
-#ifdef CONFIG_COMPAT
+#if defined(CONFIG_COMPAT) && defined(CONFIG_SND_HAVE_NEW_IOCTL)
/* all compatible */
#define snd_pcm_oss_ioctl_compat snd_pcm_oss_ioctl
#else
#define snd_pcm_oss_ioctl_compat NULL
#endif
+#ifndef CONFIG_SND_HAVE_NEW_IOCTL
+/* need to unlock BKL to allow preemption */
+static int snd_pcm_oss_ioctl_old(struct inode *inode, struct file * file,
+ unsigned int cmd, unsigned long arg)
+{
+ int err;
+ unlock_kernel();
+ err = snd_pcm_oss_ioctl(file, cmd, arg);
+ lock_kernel();
+ return err;
+}
+#endif
+
static ssize_t snd_pcm_oss_read(struct file *file, char __user *buf, size_t count, loff_t *offset)
{
struct snd_pcm_oss_file *pcm_oss_file;
@@ -2564,8 +2577,14 @@
substream = pcm_oss_file->streams[SNDRV_PCM_STREAM_PLAYBACK];
if (substream == NULL)
return -ENXIO;
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 3, 0)
+ up(&file->f_dentry->d_inode->i_sem);
+#endif
substream->f_flags = file->f_flags & O_NONBLOCK;
result = snd_pcm_oss_write1(substream, buf, count);
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 3, 0)
+ down(&file->f_dentry->d_inode->i_sem);
+#endif
#ifdef OSS_DEBUG
printk("pcm_oss: write %li bytes (wrote %li bytes)\n", (long)count, (long)result);
#endif
@@ -2681,7 +2700,11 @@
return -EIO;
#endif
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 3, 25)
if (area->vm_pgoff != 0)
+#else
+ if (area->vm_offset != 0)
+#endif
return -EINVAL;
err = snd_pcm_mmap_data(substream, file, area);
@@ -2862,14 +2885,20 @@
static struct file_operations snd_pcm_oss_f_reg =
{
+#ifndef LINUX_2_2
.owner = THIS_MODULE,
+#endif
.read = snd_pcm_oss_read,
.write = snd_pcm_oss_write,
.open = snd_pcm_oss_open,
.release = snd_pcm_oss_release,
.poll = snd_pcm_oss_poll,
+#ifdef CONFIG_SND_HAVE_NEW_IOCTL
.unlocked_ioctl = snd_pcm_oss_ioctl,
.compat_ioctl = snd_pcm_oss_ioctl_compat,
+#else
+ .ioctl = snd_pcm_oss_ioctl_old,
+#endif
.mmap = snd_pcm_oss_mmap,
};
@@ -2985,3 +3014,5 @@
module_init(alsa_pcm_oss_init)
module_exit(alsa_pcm_oss_exit)
+
+EXPORT_NO_SYMBOLS;
|