Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit fadec78b authored by matthias@kaehlcke.net's avatar matthias@kaehlcke.net Committed by Greg Kroah-Hartman
Browse files

USB: auerswald: Convert ccp->mutex in a mutex



The semaphore ccp->mutex is used as mutex, convert it to the mutex API

Signed-off-by: default avatarMatthias Kaehlcke <matthias@kaehlcke.net>
Cc: Wolfgang Mües <wolfgang@iksw-muees.de>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
parent 8a0f46b9
Loading
Loading
Loading
Loading
+26 −26
Original line number Diff line number Diff line
@@ -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 */
@@ -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;
@@ -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;
	}

@@ -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;
}

@@ -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;
	}

@@ -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;
			}
		}
@@ -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;
		}
	}
@@ -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)) {
@@ -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;
	}
@@ -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 */
@@ -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) {
@@ -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;
	}

@@ -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;
	}
}
@@ -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);
@@ -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;