Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

[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>

authored by

Jonathan Nieder and committed by
Mauro Carvalho Chehab
f4bd4be8 579b2b45

+7 -6
+6 -5
drivers/media/video/cx88/cx88-blackbird.c
··· 1073 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 1077 drv->request_release(drv); 1078 1078 mutex_unlock(&dev->core->lock); 1079 1079 return -EINVAL; ··· 1101 1101 cx88_set_scale(dev->core, dev->width, dev->height, 1102 1102 fh->mpegq.field); 1103 1103 1104 - atomic_inc(&dev->core->mpeg_users); 1104 + dev->core->mpeg_users++; 1105 1105 mutex_unlock(&dev->core->lock); 1106 1106 return 0; 1107 1107 } ··· 1112 1112 struct cx8802_dev *dev = fh->dev; 1113 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 1118 blackbird_stop_codec(dev); 1117 1119 1118 1120 cx8802_cancel_buffers(fh->dev); ··· 1123 1121 1124 1122 videobuf_mmap_free(&fh->mpegq); 1125 1123 1126 - mutex_lock(&dev->core->lock); 1127 1124 file->private_data = NULL; 1128 1125 kfree(fh); 1129 1126 ··· 1132 1131 if (drv) 1133 1132 drv->request_release(drv); 1134 1133 1135 - atomic_dec(&dev->core->mpeg_users); 1134 + dev->core->mpeg_users--; 1136 1135 1137 1136 mutex_unlock(&dev->core->lock); 1138 1137
+1 -1
drivers/media/video/cx88/cx88.h
··· 390 390 /* various v4l controls */ 391 391 u32 freq; 392 392 atomic_t users; 393 - atomic_t mpeg_users; 393 + int mpeg_users; 394 394 395 395 /* cx88-video needs to access cx8802 for hybrid tuner pll access. */ 396 396 struct cx8802_dev *dvbdev;