Loading drivers/usb/misc/auerswald.c +26 −26 Original line number Diff line number Diff line Loading @@ -254,7 +254,7 @@ typedef struct /* character device context */ typedef struct { struct semaphore mutex; /* protection in user context */ struct mutex mutex; /* protection in user context */ pauerswald_t auerdev; /* context pointer of assigned device */ auerbufctl_t bufctl; /* controls the buffer chain */ auerscon_t scontext; /* service context */ Loading Loading @@ -1390,7 +1390,7 @@ static int auerchar_open (struct inode *inode, struct file *file) } /* Initialize device descriptor */ init_MUTEX( &ccp->mutex); mutex_init(&ccp->mutex); mutex_init(&ccp->readmutex); auerbuf_init (&ccp->bufctl); ccp->scontext.id = AUH_UNASSIGNED; Loading Loading @@ -1433,23 +1433,23 @@ static int auerchar_ioctl (struct inode *inode, struct file *file, unsigned int dbg ("ioctl"); /* get the mutexes */ if (down_interruptible (&ccp->mutex)) { if (mutex_lock_interruptible(&ccp->mutex)) { return -ERESTARTSYS; } cp = ccp->auerdev; if (!cp) { up (&ccp->mutex); mutex_unlock(&ccp->mutex); return -ENODEV; } if (mutex_lock_interruptible(&cp->mutex)) { up(&ccp->mutex); mutex_unlock(&ccp->mutex); return -ERESTARTSYS; } /* Check for removal */ if (!cp->usbdev) { mutex_unlock(&cp->mutex); up(&ccp->mutex); mutex_unlock(&ccp->mutex); return -ENODEV; } Loading Loading @@ -1552,7 +1552,7 @@ static int auerchar_ioctl (struct inode *inode, struct file *file, unsigned int } /* release the mutexes */ mutex_unlock(&cp->mutex); up(&ccp->mutex); mutex_unlock(&ccp->mutex); return ret; } Loading @@ -1575,18 +1575,18 @@ static ssize_t auerchar_read (struct file *file, char __user *buf, size_t count, return 0; /* get the mutex */ if (down_interruptible (&ccp->mutex)) if (mutex_lock_interruptible(&ccp->mutex)) return -ERESTARTSYS; /* Can we expect to read something? */ if (ccp->scontext.id == AUH_UNASSIGNED) { up (&ccp->mutex); mutex_unlock(&ccp->mutex); return -EIO; } /* only one reader per device allowed */ if (mutex_lock_interruptible(&ccp->readmutex)) { up (&ccp->mutex); mutex_unlock(&ccp->mutex); return -ERESTARTSYS; } Loading @@ -1604,7 +1604,7 @@ static ssize_t auerchar_read (struct file *file, char __user *buf, size_t count, if (copy_to_user (buf, bp->bufp+ccp->readoffset, count)) { dbg ("auerswald_read: copy_to_user failed"); mutex_unlock(&ccp->readmutex); up (&ccp->mutex); mutex_unlock(&ccp->mutex); return -EFAULT; } } Loading @@ -1619,7 +1619,7 @@ static ssize_t auerchar_read (struct file *file, char __user *buf, size_t count, /* return with number of bytes read */ if (count) { mutex_unlock(&ccp->readmutex); up (&ccp->mutex); mutex_unlock(&ccp->mutex); return count; } } Loading Loading @@ -1656,12 +1656,12 @@ static ssize_t auerchar_read (struct file *file, char __user *buf, size_t count, set_current_state (TASK_RUNNING); remove_wait_queue (&ccp->readwait, &wait); mutex_unlock(&ccp->readmutex); up (&ccp->mutex); mutex_unlock(&ccp->mutex); return -EAGAIN; /* nonblocking, no data available */ } /* yes, we should wait! */ up (&ccp->mutex); /* allow other operations while we wait */ mutex_unlock(&ccp->mutex); /* allow other operations while we wait */ schedule(); remove_wait_queue (&ccp->readwait, &wait); if (signal_pending (current)) { Loading @@ -1676,7 +1676,7 @@ static ssize_t auerchar_read (struct file *file, char __user *buf, size_t count, return -EIO; } if (down_interruptible (&ccp->mutex)) { if (mutex_lock_interruptible(&ccp->mutex)) { mutex_unlock(&ccp->readmutex); return -ERESTARTSYS; } Loading Loading @@ -1708,27 +1708,27 @@ static ssize_t auerchar_write (struct file *file, const char __user *buf, size_t write_again: /* get the mutex */ if (down_interruptible (&ccp->mutex)) if (mutex_lock_interruptible(&ccp->mutex)) return -ERESTARTSYS; /* Can we expect to write something? */ if (ccp->scontext.id == AUH_UNASSIGNED) { up (&ccp->mutex); mutex_unlock(&ccp->mutex); return -EIO; } cp = ccp->auerdev; if (!cp) { up (&ccp->mutex); mutex_unlock(&ccp->mutex); return -ERESTARTSYS; } if (mutex_lock_interruptible(&cp->mutex)) { up (&ccp->mutex); mutex_unlock(&ccp->mutex); return -ERESTARTSYS; } if (!cp->usbdev) { mutex_unlock(&cp->mutex); up (&ccp->mutex); mutex_unlock(&ccp->mutex); return -EIO; } /* Prepare for sleep */ Loading @@ -1752,7 +1752,7 @@ static ssize_t auerchar_write (struct file *file, const char __user *buf, size_t /* are there any buffers left? */ if (!bp) { mutex_unlock(&cp->mutex); up (&ccp->mutex); mutex_unlock(&ccp->mutex); /* NONBLOCK: don't wait */ if (file->f_flags & O_NONBLOCK) { Loading Loading @@ -1785,7 +1785,7 @@ static ssize_t auerchar_write (struct file *file, const char __user *buf, size_t /* Wake up all processes waiting for a buffer */ wake_up (&cp->bufferwait); mutex_unlock(&cp->mutex); up (&ccp->mutex); mutex_unlock(&ccp->mutex); return -EFAULT; } Loading @@ -1810,12 +1810,12 @@ static ssize_t auerchar_write (struct file *file, const char __user *buf, size_t auerbuf_releasebuf (bp); /* Wake up all processes waiting for a buffer */ wake_up (&cp->bufferwait); up (&ccp->mutex); mutex_unlock(&ccp->mutex); return -EIO; } else { dbg ("auerchar_write: Write OK"); up (&ccp->mutex); mutex_unlock(&ccp->mutex); return len; } } Loading @@ -1828,7 +1828,7 @@ static int auerchar_release (struct inode *inode, struct file *file) pauerswald_t cp; dbg("release"); down(&ccp->mutex); mutex_lock(&ccp->mutex); cp = ccp->auerdev; if (cp) { mutex_lock(&cp->mutex); Loading @@ -1845,7 +1845,7 @@ static int auerchar_release (struct inode *inode, struct file *file) cp = NULL; ccp->auerdev = NULL; } up (&ccp->mutex); mutex_unlock(&ccp->mutex); auerchar_delete (ccp); return 0; Loading Loading
drivers/usb/misc/auerswald.c +26 −26 Original line number Diff line number Diff line Loading @@ -254,7 +254,7 @@ typedef struct /* character device context */ typedef struct { struct semaphore mutex; /* protection in user context */ struct mutex mutex; /* protection in user context */ pauerswald_t auerdev; /* context pointer of assigned device */ auerbufctl_t bufctl; /* controls the buffer chain */ auerscon_t scontext; /* service context */ Loading Loading @@ -1390,7 +1390,7 @@ static int auerchar_open (struct inode *inode, struct file *file) } /* Initialize device descriptor */ init_MUTEX( &ccp->mutex); mutex_init(&ccp->mutex); mutex_init(&ccp->readmutex); auerbuf_init (&ccp->bufctl); ccp->scontext.id = AUH_UNASSIGNED; Loading Loading @@ -1433,23 +1433,23 @@ static int auerchar_ioctl (struct inode *inode, struct file *file, unsigned int dbg ("ioctl"); /* get the mutexes */ if (down_interruptible (&ccp->mutex)) { if (mutex_lock_interruptible(&ccp->mutex)) { return -ERESTARTSYS; } cp = ccp->auerdev; if (!cp) { up (&ccp->mutex); mutex_unlock(&ccp->mutex); return -ENODEV; } if (mutex_lock_interruptible(&cp->mutex)) { up(&ccp->mutex); mutex_unlock(&ccp->mutex); return -ERESTARTSYS; } /* Check for removal */ if (!cp->usbdev) { mutex_unlock(&cp->mutex); up(&ccp->mutex); mutex_unlock(&ccp->mutex); return -ENODEV; } Loading Loading @@ -1552,7 +1552,7 @@ static int auerchar_ioctl (struct inode *inode, struct file *file, unsigned int } /* release the mutexes */ mutex_unlock(&cp->mutex); up(&ccp->mutex); mutex_unlock(&ccp->mutex); return ret; } Loading @@ -1575,18 +1575,18 @@ static ssize_t auerchar_read (struct file *file, char __user *buf, size_t count, return 0; /* get the mutex */ if (down_interruptible (&ccp->mutex)) if (mutex_lock_interruptible(&ccp->mutex)) return -ERESTARTSYS; /* Can we expect to read something? */ if (ccp->scontext.id == AUH_UNASSIGNED) { up (&ccp->mutex); mutex_unlock(&ccp->mutex); return -EIO; } /* only one reader per device allowed */ if (mutex_lock_interruptible(&ccp->readmutex)) { up (&ccp->mutex); mutex_unlock(&ccp->mutex); return -ERESTARTSYS; } Loading @@ -1604,7 +1604,7 @@ static ssize_t auerchar_read (struct file *file, char __user *buf, size_t count, if (copy_to_user (buf, bp->bufp+ccp->readoffset, count)) { dbg ("auerswald_read: copy_to_user failed"); mutex_unlock(&ccp->readmutex); up (&ccp->mutex); mutex_unlock(&ccp->mutex); return -EFAULT; } } Loading @@ -1619,7 +1619,7 @@ static ssize_t auerchar_read (struct file *file, char __user *buf, size_t count, /* return with number of bytes read */ if (count) { mutex_unlock(&ccp->readmutex); up (&ccp->mutex); mutex_unlock(&ccp->mutex); return count; } } Loading Loading @@ -1656,12 +1656,12 @@ static ssize_t auerchar_read (struct file *file, char __user *buf, size_t count, set_current_state (TASK_RUNNING); remove_wait_queue (&ccp->readwait, &wait); mutex_unlock(&ccp->readmutex); up (&ccp->mutex); mutex_unlock(&ccp->mutex); return -EAGAIN; /* nonblocking, no data available */ } /* yes, we should wait! */ up (&ccp->mutex); /* allow other operations while we wait */ mutex_unlock(&ccp->mutex); /* allow other operations while we wait */ schedule(); remove_wait_queue (&ccp->readwait, &wait); if (signal_pending (current)) { Loading @@ -1676,7 +1676,7 @@ static ssize_t auerchar_read (struct file *file, char __user *buf, size_t count, return -EIO; } if (down_interruptible (&ccp->mutex)) { if (mutex_lock_interruptible(&ccp->mutex)) { mutex_unlock(&ccp->readmutex); return -ERESTARTSYS; } Loading Loading @@ -1708,27 +1708,27 @@ static ssize_t auerchar_write (struct file *file, const char __user *buf, size_t write_again: /* get the mutex */ if (down_interruptible (&ccp->mutex)) if (mutex_lock_interruptible(&ccp->mutex)) return -ERESTARTSYS; /* Can we expect to write something? */ if (ccp->scontext.id == AUH_UNASSIGNED) { up (&ccp->mutex); mutex_unlock(&ccp->mutex); return -EIO; } cp = ccp->auerdev; if (!cp) { up (&ccp->mutex); mutex_unlock(&ccp->mutex); return -ERESTARTSYS; } if (mutex_lock_interruptible(&cp->mutex)) { up (&ccp->mutex); mutex_unlock(&ccp->mutex); return -ERESTARTSYS; } if (!cp->usbdev) { mutex_unlock(&cp->mutex); up (&ccp->mutex); mutex_unlock(&ccp->mutex); return -EIO; } /* Prepare for sleep */ Loading @@ -1752,7 +1752,7 @@ static ssize_t auerchar_write (struct file *file, const char __user *buf, size_t /* are there any buffers left? */ if (!bp) { mutex_unlock(&cp->mutex); up (&ccp->mutex); mutex_unlock(&ccp->mutex); /* NONBLOCK: don't wait */ if (file->f_flags & O_NONBLOCK) { Loading Loading @@ -1785,7 +1785,7 @@ static ssize_t auerchar_write (struct file *file, const char __user *buf, size_t /* Wake up all processes waiting for a buffer */ wake_up (&cp->bufferwait); mutex_unlock(&cp->mutex); up (&ccp->mutex); mutex_unlock(&ccp->mutex); return -EFAULT; } Loading @@ -1810,12 +1810,12 @@ static ssize_t auerchar_write (struct file *file, const char __user *buf, size_t auerbuf_releasebuf (bp); /* Wake up all processes waiting for a buffer */ wake_up (&cp->bufferwait); up (&ccp->mutex); mutex_unlock(&ccp->mutex); return -EIO; } else { dbg ("auerchar_write: Write OK"); up (&ccp->mutex); mutex_unlock(&ccp->mutex); return len; } } Loading @@ -1828,7 +1828,7 @@ static int auerchar_release (struct inode *inode, struct file *file) pauerswald_t cp; dbg("release"); down(&ccp->mutex); mutex_lock(&ccp->mutex); cp = ccp->auerdev; if (cp) { mutex_lock(&cp->mutex); Loading @@ -1845,7 +1845,7 @@ static int auerchar_release (struct inode *inode, struct file *file) cp = NULL; ccp->auerdev = NULL; } up (&ccp->mutex); mutex_unlock(&ccp->mutex); auerchar_delete (ccp); return 0; Loading