Skip to content

Commit

Permalink
V4L/DVB (6335): cx8802: Replace list_for_each+list_entry with list_fo…
Browse files Browse the repository at this point in the history
…r_each_entry

Less code and more efficient.

Got ride of a variable that counted the number of devices in
cx8802_unregister_driver() but was never used.  Looked leftover from a
cut&paste.

Signed-off-by: Trent Piepho <xyzzy@speakeasy.org>
Reviewed-by: Michael Krufky <mkrufky@linuxtv.org>
Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
  • Loading branch information
Trent Piepho authored and Mauro Carvalho Chehab committed Oct 22, 2007
1 parent 081c2fc commit 89a4794
Showing 1 changed file with 29 additions and 56 deletions.
85 changes: 29 additions & 56 deletions drivers/media/video/cx88/cx88-mpeg.c
Original file line number Diff line number Diff line change
Expand Up @@ -178,7 +178,6 @@ static int cx8802_restart_queue(struct cx8802_dev *dev,
struct cx88_dmaqueue *q)
{
struct cx88_buffer *buf;
struct list_head *item;

dprintk( 1, "cx8802_restart_queue\n" );
if (list_empty(&q->active))
Expand Down Expand Up @@ -224,10 +223,8 @@ static int cx8802_restart_queue(struct cx8802_dev *dev,
dprintk(2,"restart_queue [%p/%d]: restart dma\n",
buf, buf->vb.i);
cx8802_start_dma(dev, q, buf);
list_for_each(item,&q->active) {
buf = list_entry(item, struct cx88_buffer, vb.queue);
list_for_each_entry(buf, &q->active, vb.queue)
buf->count = q->count++;
}
mod_timer(&q->timeout, jiffies+BUFFER_TIMEOUT);
return 0;
}
Expand Down Expand Up @@ -578,14 +575,11 @@ int cx8802_resume_common(struct pci_dev *pci_dev)
struct cx8802_dev * cx8802_get_device(struct inode *inode)
{
int minor = iminor(inode);
struct cx8802_dev *h = NULL;
struct list_head *list;
struct cx8802_dev *dev;

list_for_each(list,&cx8802_devlist) {
h = list_entry(list, struct cx8802_dev, devlist);
if (h->mpeg_dev && h->mpeg_dev->minor == minor)
return h;
}
list_for_each_entry(dev, &cx8802_devlist, devlist)
if (dev->mpeg_dev && dev->mpeg_dev->minor == minor)
return dev;

return NULL;
}
Expand All @@ -595,14 +589,10 @@ EXPORT_SYMBOL(cx8802_get_device);
struct cx8802_driver * cx8802_get_driver(struct cx8802_dev *dev, enum cx88_board_type btype)
{
struct cx8802_driver *d;
struct list_head *list;

list_for_each(list, &dev->drvlist) {
d = list_entry(list, struct cx8802_driver, drvlist);

list_for_each_entry(d, &dev->drvlist, drvlist)
if (d->type_id == btype)
return d;
}

return NULL;
}
Expand Down Expand Up @@ -666,10 +656,9 @@ static int cx8802_check_driver(struct cx8802_driver *drv)

int cx8802_register_driver(struct cx8802_driver *drv)
{
struct cx8802_dev *h;
struct cx8802_dev *dev;
struct cx8802_driver *driver;
struct list_head *list;
int err = 0, i = 0;
int err, i = 0;

printk(KERN_INFO
"cx88/2: registering cx8802 driver, type: %s access: %s\n",
Expand All @@ -681,22 +670,20 @@ int cx8802_register_driver(struct cx8802_driver *drv)
return err;
}

list_for_each(list,&cx8802_devlist) {
h = list_entry(list, struct cx8802_dev, devlist);

list_for_each_entry(dev, &cx8802_devlist, devlist) {
printk(KERN_INFO
"%s/2: subsystem: %04x:%04x, board: %s [card=%d]\n",
h->core->name, h->pci->subsystem_vendor,
h->pci->subsystem_device, h->core->board.name,
h->core->boardnr);
dev->core->name, dev->pci->subsystem_vendor,
dev->pci->subsystem_device, dev->core->board.name,
dev->core->boardnr);

/* Bring up a new struct for each driver instance */
driver = kzalloc(sizeof(*drv),GFP_KERNEL);
if (driver == NULL)
return -ENOMEM;

/* Snapshot of the driver registration data */
drv->core = h->core;
drv->core = dev->core;
drv->suspend = cx8802_suspend_common;
drv->resume = cx8802_resume_common;
drv->request_acquire = cx8802_request_acquire;
Expand All @@ -707,61 +694,50 @@ int cx8802_register_driver(struct cx8802_driver *drv)
if (err == 0) {
i++;
mutex_lock(&drv->core->lock);
list_add_tail(&driver->drvlist, &h->drvlist);
list_add_tail(&driver->drvlist, &dev->drvlist);
mutex_unlock(&drv->core->lock);
} else {
printk(KERN_ERR
"%s/2: cx8802 probe failed, err = %d\n",
h->core->name, err);
dev->core->name, err);
}

}
if (i == 0)
err = -ENODEV;
else
err = 0;

return err;
return i ? 0 : -ENODEV;
}

int cx8802_unregister_driver(struct cx8802_driver *drv)
{
struct cx8802_dev *h;
struct cx8802_driver *d;
struct list_head *list;
struct list_head *list2, *q;
int err = 0, i = 0;
struct cx8802_dev *dev;
struct cx8802_driver *d, *dtmp;
int err = 0;

printk(KERN_INFO
"cx88/2: unregistering cx8802 driver, type: %s access: %s\n",
drv->type_id == CX88_MPEG_DVB ? "dvb" : "blackbird",
drv->hw_access == CX8802_DRVCTL_SHARED ? "shared" : "exclusive");

list_for_each(list,&cx8802_devlist) {
i++;
h = list_entry(list, struct cx8802_dev, devlist);

list_for_each_entry(dev, &cx8802_devlist, devlist) {
printk(KERN_INFO
"%s/2: subsystem: %04x:%04x, board: %s [card=%d]\n",
h->core->name, h->pci->subsystem_vendor,
h->pci->subsystem_device, h->core->board.name,
h->core->boardnr);

list_for_each_safe(list2, q, &h->drvlist) {
d = list_entry(list2, struct cx8802_driver, drvlist);
dev->core->name, dev->pci->subsystem_vendor,
dev->pci->subsystem_device, dev->core->board.name,
dev->core->boardnr);

list_for_each_entry_safe(d, dtmp, &dev->drvlist, drvlist) {
/* only unregister the correct driver type */
if (d->type_id != drv->type_id)
continue;

err = d->remove(d);
if (err == 0) {
mutex_lock(&drv->core->lock);
list_del(list2);
list_del(&d->drvlist);
mutex_unlock(&drv->core->lock);
} else
printk(KERN_ERR "%s/2: cx8802 driver remove "
"failed (%d)\n", h->core->name, err);
"failed (%d)\n", dev->core->name, err);
}

}
Expand Down Expand Up @@ -825,21 +801,18 @@ static void __devexit cx8802_remove(struct pci_dev *pci_dev)
dprintk( 1, "%s\n", __FUNCTION__);

if (!list_empty(&dev->drvlist)) {
struct list_head *list, *tmp;
struct cx8802_driver *drv;
struct cx8802_driver *drv, *tmp;
int err;

printk(KERN_WARNING "%s/2: Trying to remove cx8802 driver "
"while cx8802 sub-drivers still loaded?!\n",
dev->core->name);

list_for_each_safe(list, tmp, &dev->drvlist) {
drv = list_entry(list, struct cx8802_driver, drvlist);

list_for_each_entry_safe(drv, tmp, &dev->drvlist, drvlist) {
err = drv->remove(drv);
if (err == 0) {
mutex_lock(&drv->core->lock);
list_del(list);
list_del(&drv->drvlist);
mutex_unlock(&drv->core->lock);
} else
printk(KERN_ERR "%s/2: cx8802 driver remove "
Expand Down

0 comments on commit 89a4794

Please sign in to comment.