提交 ca094f11 编写于 作者: F Franck Bui-Huu 提交者: Greg Kroah-Hartman

[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: NFranck Bui-Huu <vagabon.xyz@gmail.com>
Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
上级 943e1b4d
...@@ -53,8 +53,8 @@ ...@@ -53,8 +53,8 @@
/* Defines */ /* Defines */
#define GS_VERSION_STR "v2.1" #define GS_VERSION_STR "v2.2"
#define GS_VERSION_NUM 0x0201 #define GS_VERSION_NUM 0x0202
#define GS_LONG_NAME "Gadget Serial" #define GS_LONG_NAME "Gadget Serial"
#define GS_SHORT_NAME "g_serial" #define GS_SHORT_NAME "g_serial"
...@@ -774,18 +774,16 @@ static int gs_open(struct tty_struct *tty, struct file *file) ...@@ -774,18 +774,16 @@ static int gs_open(struct tty_struct *tty, struct file *file)
#define GS_WRITE_FINISHED_EVENT_SAFELY(p) \ #define GS_WRITE_FINISHED_EVENT_SAFELY(p) \
({ \ ({ \
unsigned long flags; \
int cond; \ 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); \ 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; \ cond; \
}) })
static void gs_close(struct tty_struct *tty, struct file *file) static void gs_close(struct tty_struct *tty, struct file *file)
{ {
unsigned long flags;
struct gs_port *port = tty->driver_data; struct gs_port *port = tty->driver_data;
struct semaphore *sem; struct semaphore *sem;
...@@ -799,7 +797,7 @@ static void gs_close(struct tty_struct *tty, struct file *file) ...@@ -799,7 +797,7 @@ static void gs_close(struct tty_struct *tty, struct file *file)
sem = &gs_open_close_sem[port->port_num]; sem = &gs_open_close_sem[port->port_num];
down(sem); down(sem);
spin_lock_irqsave(&port->port_lock, flags); spin_lock_irq(&port->port_lock);
if (port->port_open_count == 0) { if (port->port_open_count == 0) {
printk(KERN_ERR printk(KERN_ERR
...@@ -827,11 +825,11 @@ static void gs_close(struct tty_struct *tty, struct file *file) ...@@ -827,11 +825,11 @@ static void gs_close(struct tty_struct *tty, struct file *file)
/* wait for write buffer to drain, or */ /* wait for write buffer to drain, or */
/* at most GS_CLOSE_TIMEOUT seconds */ /* at most GS_CLOSE_TIMEOUT seconds */
if (gs_buf_data_avail(port->port_write_buf) > 0) { 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, wait_event_interruptible_timeout(port->port_write_wait,
GS_WRITE_FINISHED_EVENT_SAFELY(port), GS_WRITE_FINISHED_EVENT_SAFELY(port),
GS_CLOSE_TIMEOUT * HZ); GS_CLOSE_TIMEOUT * HZ);
spin_lock_irqsave(&port->port_lock, flags); spin_lock_irq(&port->port_lock);
} }
/* free disconnected port on final close */ /* free disconnected port on final close */
...@@ -851,7 +849,7 @@ static void gs_close(struct tty_struct *tty, struct file *file) ...@@ -851,7 +849,7 @@ static void gs_close(struct tty_struct *tty, struct file *file)
port->port_num, tty, file); port->port_num, tty, file);
exit: exit:
spin_unlock_irqrestore(&port->port_lock, flags); spin_unlock_irq(&port->port_lock);
up(sem); up(sem);
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册