struct qmihandle *handle = (struct qmihandle *)file->private_data;
struct client *client;
unsigned int mask = 0;
- unsigned int flags;
+ unsigned long flags;
if (!handle) {
DBG("Bad file data\n");
dev_t devno;
char *name;
+ cdev_init(&dev->qmi.cdev, &devqmi_fops);
+ dev->qmi.cdev.owner = THIS_MODULE;
dev->valid = true;
+
result = client_alloc(dev, QMICTL);
if (result) {
dev->valid = false;
if (result < 0)
return result;
- cdev_init(&dev->qmi.cdev, &devqmi_fops);
- dev->qmi.cdev.owner = THIS_MODULE;
- dev->qmi.cdev.ops = &devqmi_fops;
-
result = cdev_add(&dev->qmi.cdev, devno, 1);
if (result) {
DBG("error adding cdev\n");
void qc_deregister(struct qcusbnet *dev)
{
struct list_head *node;
+ struct list_head *next;
struct client *client;
struct inode *inode;
struct list_head *inodes;
return;
}
- list_for_each(node, &dev->qmi.clients) {
+ list_for_each_safe(node, next, &dev->qmi.clients) {
client = list_entry(node, struct client, node);
DBG("release 0x%04X\n", client->cid);
client_free(dev, client->cid);
kfree(rbuf);
break;
}
+ spin_unlock_irqrestore(&dev->qmi.clients_lock, flags);
} else {
spin_lock_irqsave(&dev->qmi.clients_lock, flags);
client_notify(dev, QMICTL, tid);