diff options
author | Takashi Iwai <tiwai@suse.de> | 2009-11-10 10:30:03 -0500 |
---|---|---|
committer | Takashi Iwai <tiwai@suse.de> | 2009-11-10 10:30:03 -0500 |
commit | 3f225c07c7d0559f65b41250edd01a577fdba426 (patch) | |
tree | 753a9b9a9063e23d44986d974aeb2bc1986d7df8 /sound/core | |
parent | b7fe750fcceda4fa6bef399b0e2812562728ea82 (diff) | |
parent | 25d27eded1f4fc728e64f443adc339b5229be5d7 (diff) |
Merge branch 'topic/ctl-pid-lock' into topic/core-change
Diffstat (limited to 'sound/core')
-rw-r--r-- | sound/core/control.c | 7 | ||||
-rw-r--r-- | sound/core/pcm.c | 2 | ||||
-rw-r--r-- | sound/core/rawmidi.c | 2 |
3 files changed, 5 insertions, 6 deletions
diff --git a/sound/core/control.c b/sound/core/control.c index a8b7fabe645e..73dc10ac33f6 100644 --- a/sound/core/control.c +++ b/sound/core/control.c | |||
@@ -75,7 +75,7 @@ static int snd_ctl_open(struct inode *inode, struct file *file) | |||
75 | ctl->card = card; | 75 | ctl->card = card; |
76 | ctl->prefer_pcm_subdevice = -1; | 76 | ctl->prefer_pcm_subdevice = -1; |
77 | ctl->prefer_rawmidi_subdevice = -1; | 77 | ctl->prefer_rawmidi_subdevice = -1; |
78 | ctl->pid = current->pid; | 78 | ctl->pid = get_pid(task_pid(current)); |
79 | file->private_data = ctl; | 79 | file->private_data = ctl; |
80 | write_lock_irqsave(&card->ctl_files_rwlock, flags); | 80 | write_lock_irqsave(&card->ctl_files_rwlock, flags); |
81 | list_add_tail(&ctl->list, &card->ctl_files); | 81 | list_add_tail(&ctl->list, &card->ctl_files); |
@@ -125,6 +125,7 @@ static int snd_ctl_release(struct inode *inode, struct file *file) | |||
125 | control->vd[idx].owner = NULL; | 125 | control->vd[idx].owner = NULL; |
126 | up_write(&card->controls_rwsem); | 126 | up_write(&card->controls_rwsem); |
127 | snd_ctl_empty_read_queue(ctl); | 127 | snd_ctl_empty_read_queue(ctl); |
128 | put_pid(ctl->pid); | ||
128 | kfree(ctl); | 129 | kfree(ctl); |
129 | module_put(card->module); | 130 | module_put(card->module); |
130 | snd_card_file_remove(card, file); | 131 | snd_card_file_remove(card, file); |
@@ -672,7 +673,7 @@ static int snd_ctl_elem_info(struct snd_ctl_file *ctl, | |||
672 | info->access |= SNDRV_CTL_ELEM_ACCESS_LOCK; | 673 | info->access |= SNDRV_CTL_ELEM_ACCESS_LOCK; |
673 | if (vd->owner == ctl) | 674 | if (vd->owner == ctl) |
674 | info->access |= SNDRV_CTL_ELEM_ACCESS_OWNER; | 675 | info->access |= SNDRV_CTL_ELEM_ACCESS_OWNER; |
675 | info->owner = vd->owner_pid; | 676 | info->owner = pid_vnr(vd->owner->pid); |
676 | } else { | 677 | } else { |
677 | info->owner = -1; | 678 | info->owner = -1; |
678 | } | 679 | } |
@@ -827,7 +828,6 @@ static int snd_ctl_elem_lock(struct snd_ctl_file *file, | |||
827 | result = -EBUSY; | 828 | result = -EBUSY; |
828 | else { | 829 | else { |
829 | vd->owner = file; | 830 | vd->owner = file; |
830 | vd->owner_pid = current->pid; | ||
831 | result = 0; | 831 | result = 0; |
832 | } | 832 | } |
833 | } | 833 | } |
@@ -858,7 +858,6 @@ static int snd_ctl_elem_unlock(struct snd_ctl_file *file, | |||
858 | result = -EPERM; | 858 | result = -EPERM; |
859 | else { | 859 | else { |
860 | vd->owner = NULL; | 860 | vd->owner = NULL; |
861 | vd->owner_pid = 0; | ||
862 | result = 0; | 861 | result = 0; |
863 | } | 862 | } |
864 | } | 863 | } |
diff --git a/sound/core/pcm.c b/sound/core/pcm.c index c69c60b2a48a..8e2c7833614c 100644 --- a/sound/core/pcm.c +++ b/sound/core/pcm.c | |||
@@ -809,7 +809,7 @@ int snd_pcm_attach_substream(struct snd_pcm *pcm, int stream, | |||
809 | card = pcm->card; | 809 | card = pcm->card; |
810 | read_lock(&card->ctl_files_rwlock); | 810 | read_lock(&card->ctl_files_rwlock); |
811 | list_for_each_entry(kctl, &card->ctl_files, list) { | 811 | list_for_each_entry(kctl, &card->ctl_files, list) { |
812 | if (kctl->pid == current->pid) { | 812 | if (kctl->pid == task_pid(current)) { |
813 | prefer_subdevice = kctl->prefer_pcm_subdevice; | 813 | prefer_subdevice = kctl->prefer_pcm_subdevice; |
814 | if (prefer_subdevice != -1) | 814 | if (prefer_subdevice != -1) |
815 | break; | 815 | break; |
diff --git a/sound/core/rawmidi.c b/sound/core/rawmidi.c index 70d6f25ba526..4e26563431c8 100644 --- a/sound/core/rawmidi.c +++ b/sound/core/rawmidi.c | |||
@@ -413,7 +413,7 @@ static int snd_rawmidi_open(struct inode *inode, struct file *file) | |||
413 | subdevice = -1; | 413 | subdevice = -1; |
414 | read_lock(&card->ctl_files_rwlock); | 414 | read_lock(&card->ctl_files_rwlock); |
415 | list_for_each_entry(kctl, &card->ctl_files, list) { | 415 | list_for_each_entry(kctl, &card->ctl_files, list) { |
416 | if (kctl->pid == current->pid) { | 416 | if (kctl->pid == task_pid(current)) { |
417 | subdevice = kctl->prefer_rawmidi_subdevice; | 417 | subdevice = kctl->prefer_rawmidi_subdevice; |
418 | if (subdevice != -1) | 418 | if (subdevice != -1) |
419 | break; | 419 | break; |