diff options
author | Jonathan Nieder <jrnieder@gmail.com> | 2011-05-01 05:31:04 -0400 |
---|---|---|
committer | Mauro Carvalho Chehab <mchehab@redhat.com> | 2011-05-20 08:29:42 -0400 |
commit | f4bd4be8d113534a28e0c9a86cddbabd47b06159 (patch) | |
tree | 2c059112f19c98071dd25039a88ddffd1ca53d39 /drivers/media/video/cx88/cx88-blackbird.c | |
parent | 579b2b45120fa33f750cd65150d6d8995938750b (diff) |
[media] cx88: don't use atomic_t for core->mpeg_users
mpeg_users is always read or written with core->lock held except
in mpeg_release (where it looks like a bug). A plain int is simpler
and faster.
Tested-by: Andi Huber <hobrom@gmx.at>
Tested-by: Marlon de Boer <marlon@hyves.nl>
Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
Diffstat (limited to 'drivers/media/video/cx88/cx88-blackbird.c')
-rw-r--r-- | drivers/media/video/cx88/cx88-blackbird.c | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/drivers/media/video/cx88/cx88-blackbird.c b/drivers/media/video/cx88/cx88-blackbird.c index fa8e347c448c..11e49bbc4a66 100644 --- a/drivers/media/video/cx88/cx88-blackbird.c +++ b/drivers/media/video/cx88/cx88-blackbird.c | |||
@@ -1073,7 +1073,7 @@ static int mpeg_open(struct file *file) | |||
1073 | return err; | 1073 | return err; |
1074 | } | 1074 | } |
1075 | 1075 | ||
1076 | if (!atomic_read(&dev->core->mpeg_users) && blackbird_initialize_codec(dev) < 0) { | 1076 | if (!dev->core->mpeg_users && blackbird_initialize_codec(dev) < 0) { |
1077 | drv->request_release(drv); | 1077 | drv->request_release(drv); |
1078 | mutex_unlock(&dev->core->lock); | 1078 | mutex_unlock(&dev->core->lock); |
1079 | return -EINVAL; | 1079 | return -EINVAL; |
@@ -1101,7 +1101,7 @@ static int mpeg_open(struct file *file) | |||
1101 | cx88_set_scale(dev->core, dev->width, dev->height, | 1101 | cx88_set_scale(dev->core, dev->width, dev->height, |
1102 | fh->mpegq.field); | 1102 | fh->mpegq.field); |
1103 | 1103 | ||
1104 | atomic_inc(&dev->core->mpeg_users); | 1104 | dev->core->mpeg_users++; |
1105 | mutex_unlock(&dev->core->lock); | 1105 | mutex_unlock(&dev->core->lock); |
1106 | return 0; | 1106 | return 0; |
1107 | } | 1107 | } |
@@ -1112,7 +1112,9 @@ static int mpeg_release(struct file *file) | |||
1112 | struct cx8802_dev *dev = fh->dev; | 1112 | struct cx8802_dev *dev = fh->dev; |
1113 | struct cx8802_driver *drv = NULL; | 1113 | struct cx8802_driver *drv = NULL; |
1114 | 1114 | ||
1115 | if (dev->mpeg_active && atomic_read(&dev->core->mpeg_users) == 1) | 1115 | mutex_lock(&dev->core->lock); |
1116 | |||
1117 | if (dev->mpeg_active && dev->core->mpeg_users == 1) | ||
1116 | blackbird_stop_codec(dev); | 1118 | blackbird_stop_codec(dev); |
1117 | 1119 | ||
1118 | cx8802_cancel_buffers(fh->dev); | 1120 | cx8802_cancel_buffers(fh->dev); |
@@ -1121,7 +1123,6 @@ static int mpeg_release(struct file *file) | |||
1121 | 1123 | ||
1122 | videobuf_mmap_free(&fh->mpegq); | 1124 | videobuf_mmap_free(&fh->mpegq); |
1123 | 1125 | ||
1124 | mutex_lock(&dev->core->lock); | ||
1125 | file->private_data = NULL; | 1126 | file->private_data = NULL; |
1126 | kfree(fh); | 1127 | kfree(fh); |
1127 | 1128 | ||
@@ -1131,7 +1132,7 @@ static int mpeg_release(struct file *file) | |||
1131 | if (drv) | 1132 | if (drv) |
1132 | drv->request_release(drv); | 1133 | drv->request_release(drv); |
1133 | 1134 | ||
1134 | atomic_dec(&dev->core->mpeg_users); | 1135 | dev->core->mpeg_users--; |
1135 | 1136 | ||
1136 | mutex_unlock(&dev->core->lock); | 1137 | mutex_unlock(&dev->core->lock); |
1137 | 1138 | ||