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

Commit ca094f11 authored by Franck Bui-Huu's avatar Franck Bui-Huu Committed by Greg Kroah-Hartman
Browse files

[PATCH] USB: gadget-serial: do not save/restore IRQ flags in gs_close()



As pointed out by David Brownell, we know that IRQs are never
blocked when calling gs_close function. So the save/restore
IRQ flags are pointless.

Signed-off-by: default avatarFranck Bui-Huu <vagabon.xyz@gmail.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
parent 943e1b4d
Loading
Loading
Loading
Loading
+8 −10
Original line number Diff line number Diff line
@@ -53,8 +53,8 @@

/* Defines */

#define GS_VERSION_STR			"v2.1"
#define GS_VERSION_NUM			0x0201
#define GS_VERSION_STR			"v2.2"
#define GS_VERSION_NUM			0x0202

#define GS_LONG_NAME			"Gadget Serial"
#define GS_SHORT_NAME			"g_serial"
@@ -774,18 +774,16 @@ static int gs_open(struct tty_struct *tty, struct file *file)

#define GS_WRITE_FINISHED_EVENT_SAFELY(p)			\
({								\
	unsigned long flags;					\
	int cond;						\
								\
	spin_lock_irqsave(&(p)->port_lock, flags);		\
	spin_lock_irq(&(p)->port_lock);				\
	cond = !(p)->port_dev || !gs_buf_data_avail((p)->port_write_buf); \
	spin_unlock_irqrestore(&(p)->port_lock, flags);		\
	spin_unlock_irq(&(p)->port_lock);			\
	cond;							\
})

static void gs_close(struct tty_struct *tty, struct file *file)
{
	unsigned long flags;
	struct gs_port *port = tty->driver_data;
	struct semaphore *sem;

@@ -799,7 +797,7 @@ static void gs_close(struct tty_struct *tty, struct file *file)
	sem = &gs_open_close_sem[port->port_num];
	down(sem);

	spin_lock_irqsave(&port->port_lock, flags);
	spin_lock_irq(&port->port_lock);

	if (port->port_open_count == 0) {
		printk(KERN_ERR
@@ -827,11 +825,11 @@ static void gs_close(struct tty_struct *tty, struct file *file)
	/* wait for write buffer to drain, or */
	/* at most GS_CLOSE_TIMEOUT seconds */
	if (gs_buf_data_avail(port->port_write_buf) > 0) {
		spin_unlock_irqrestore(&port->port_lock, flags);
		spin_unlock_irq(&port->port_lock);
		wait_event_interruptible_timeout(port->port_write_wait,
					GS_WRITE_FINISHED_EVENT_SAFELY(port),
					GS_CLOSE_TIMEOUT * HZ);
		spin_lock_irqsave(&port->port_lock, flags);
		spin_lock_irq(&port->port_lock);
	}

	/* free disconnected port on final close */
@@ -851,7 +849,7 @@ static void gs_close(struct tty_struct *tty, struct file *file)
		port->port_num, tty, file);

exit:
	spin_unlock_irqrestore(&port->port_lock, flags);
	spin_unlock_irq(&port->port_lock);
	up(sem);
}