[PATCH 5/8] tty: Replace ASYNC_SUSPENDED bit and update atomically

2016-04-09 Thread Peter Hurley
Replace ASYNC_SUSPENDED bit in the tty_port::flags field with
TTY_PORT_SUSPENDED bit in the tty_port::iflags field. Introduce helpers
tty_port_set_suspended() and tty_port_suspended() to abstract
atomic bit ops.

Signed-off-by: Peter Hurley 
---
 drivers/s390/char/con3215.c  | 12 ++--
 drivers/tty/serial/serial_core.c |  8 
 include/linux/tty.h  | 13 +
 3 files changed, 23 insertions(+), 10 deletions(-)

diff --git a/drivers/s390/char/con3215.c b/drivers/s390/char/con3215.c
index e7e078b..114fe28 100644
--- a/drivers/s390/char/con3215.c
+++ b/drivers/s390/char/con3215.c
@@ -289,7 +289,7 @@ static void raw3215_timeout(unsigned long __data)
 
spin_lock_irqsave(get_ccwdev_lock(raw->cdev), flags);
raw->flags &= ~RAW3215_TIMER_RUNS;
-   if (!(raw->port.flags & ASYNC_SUSPENDED)) {
+   if (!tty_port_suspended(>port)) {
raw3215_mk_write_req(raw);
raw3215_start_io(raw);
if ((raw->queued_read || raw->queued_write) &&
@@ -312,7 +312,7 @@ static void raw3215_timeout(unsigned long __data)
 static inline void raw3215_try_io(struct raw3215_info *raw)
 {
if (!(raw->port.flags & ASYNC_INITIALIZED) ||
-   (raw->port.flags & ASYNC_SUSPENDED))
+   tty_port_suspended(>port))
return;
if (raw->queued_read != NULL)
raw3215_start_io(raw);
@@ -494,7 +494,7 @@ static void raw3215_make_room(struct raw3215_info *raw, 
unsigned int length)
/* While console is frozen for suspend we have no other
 * choice but to drop message from the buffer to make
 * room for even more messages. */
-   if (raw->port.flags & ASYNC_SUSPENDED) {
+   if (tty_port_suspended(>port)) {
raw3215_drop_line(raw);
continue;
}
@@ -773,7 +773,7 @@ static int raw3215_pm_stop(struct ccw_device *cdev)
raw = dev_get_drvdata(>dev);
spin_lock_irqsave(get_ccwdev_lock(raw->cdev), flags);
raw3215_make_room(raw, RAW3215_BUFFER_SIZE);
-   raw->port.flags |= ASYNC_SUSPENDED;
+   tty_port_set_suspended(>port, 1);
spin_unlock_irqrestore(get_ccwdev_lock(raw->cdev), flags);
return 0;
 }
@@ -786,7 +786,7 @@ static int raw3215_pm_start(struct ccw_device *cdev)
/* Allow I/O again and flush output buffer. */
raw = dev_get_drvdata(>dev);
spin_lock_irqsave(get_ccwdev_lock(raw->cdev), flags);
-   raw->port.flags &= ~ASYNC_SUSPENDED;
+   tty_port_set_suspended(>port, 0);
raw->flags |= RAW3215_FLUSHING;
raw3215_try_io(raw);
raw->flags &= ~RAW3215_FLUSHING;
@@ -859,7 +859,7 @@ static void con3215_flush(void)
unsigned long flags;
 
raw = raw3215[0];  /* console 3215 is the first one */
-   if (raw->port.flags & ASYNC_SUSPENDED)
+   if (tty_port_suspended(>port))
/* The console is still frozen for suspend. */
if (ccw_device_force_console(raw->cdev))
/* Forcing didn't work, no panic message .. */
diff --git a/drivers/tty/serial/serial_core.c b/drivers/tty/serial/serial_core.c
index 2471380..9336067 100644
--- a/drivers/tty/serial/serial_core.c
+++ b/drivers/tty/serial/serial_core.c
@@ -249,7 +249,7 @@ static void uart_shutdown(struct tty_struct *tty, struct 
uart_state *state)
 * a DCD drop (hangup) at just the right time.  Clear suspended bit so
 * we don't try to resume a port that has been shutdown.
 */
-   clear_bit(ASYNCB_SUSPENDED, >flags);
+   tty_port_set_suspended(port, 0);
 
/*
 * Free the transmit buffer page.
@@ -2007,7 +2007,7 @@ int uart_suspend_port(struct uart_driver *drv, struct 
uart_port *uport)
const struct uart_ops *ops = uport->ops;
int tries;
 
-   set_bit(ASYNCB_SUSPENDED, >flags);
+   tty_port_set_suspended(port, 1);
clear_bit(ASYNCB_INITIALIZED, >flags);
 
spin_lock_irq(>lock);
@@ -2088,7 +2088,7 @@ int uart_resume_port(struct uart_driver *drv, struct 
uart_port *uport)
console_start(uport->cons);
}
 
-   if (port->flags & ASYNC_SUSPENDED) {
+   if (tty_port_suspended(port)) {
const struct uart_ops *ops = uport->ops;
int ret;
 
@@ -2118,7 +2118,7 @@ int uart_resume_port(struct uart_driver *drv, struct 
uart_port *uport)
}
}
 
-   clear_bit(ASYNCB_SUSPENDED, >flags);
+   tty_port_set_suspended(port, 0);
}
 
mutex_unlock(>mutex);
diff --git a/include/linux/tty.h b/include/linux/tty.h
index 4254dfb..7ac5add 100644
--- a/include/linux/tty.h
+++ b/include/linux/tty.h
@@ -597,6 +597,19 @@ static inline void tty_port_set_check_carrier(struct 
tty_port *port, bool 

[PATCH 5/8] tty: Replace ASYNC_SUSPENDED bit and update atomically

2016-04-09 Thread Peter Hurley
Replace ASYNC_SUSPENDED bit in the tty_port::flags field with
TTY_PORT_SUSPENDED bit in the tty_port::iflags field. Introduce helpers
tty_port_set_suspended() and tty_port_suspended() to abstract
atomic bit ops.

Signed-off-by: Peter Hurley 
---
 drivers/s390/char/con3215.c  | 12 ++--
 drivers/tty/serial/serial_core.c |  8 
 include/linux/tty.h  | 13 +
 3 files changed, 23 insertions(+), 10 deletions(-)

diff --git a/drivers/s390/char/con3215.c b/drivers/s390/char/con3215.c
index e7e078b..114fe28 100644
--- a/drivers/s390/char/con3215.c
+++ b/drivers/s390/char/con3215.c
@@ -289,7 +289,7 @@ static void raw3215_timeout(unsigned long __data)
 
spin_lock_irqsave(get_ccwdev_lock(raw->cdev), flags);
raw->flags &= ~RAW3215_TIMER_RUNS;
-   if (!(raw->port.flags & ASYNC_SUSPENDED)) {
+   if (!tty_port_suspended(>port)) {
raw3215_mk_write_req(raw);
raw3215_start_io(raw);
if ((raw->queued_read || raw->queued_write) &&
@@ -312,7 +312,7 @@ static void raw3215_timeout(unsigned long __data)
 static inline void raw3215_try_io(struct raw3215_info *raw)
 {
if (!(raw->port.flags & ASYNC_INITIALIZED) ||
-   (raw->port.flags & ASYNC_SUSPENDED))
+   tty_port_suspended(>port))
return;
if (raw->queued_read != NULL)
raw3215_start_io(raw);
@@ -494,7 +494,7 @@ static void raw3215_make_room(struct raw3215_info *raw, 
unsigned int length)
/* While console is frozen for suspend we have no other
 * choice but to drop message from the buffer to make
 * room for even more messages. */
-   if (raw->port.flags & ASYNC_SUSPENDED) {
+   if (tty_port_suspended(>port)) {
raw3215_drop_line(raw);
continue;
}
@@ -773,7 +773,7 @@ static int raw3215_pm_stop(struct ccw_device *cdev)
raw = dev_get_drvdata(>dev);
spin_lock_irqsave(get_ccwdev_lock(raw->cdev), flags);
raw3215_make_room(raw, RAW3215_BUFFER_SIZE);
-   raw->port.flags |= ASYNC_SUSPENDED;
+   tty_port_set_suspended(>port, 1);
spin_unlock_irqrestore(get_ccwdev_lock(raw->cdev), flags);
return 0;
 }
@@ -786,7 +786,7 @@ static int raw3215_pm_start(struct ccw_device *cdev)
/* Allow I/O again and flush output buffer. */
raw = dev_get_drvdata(>dev);
spin_lock_irqsave(get_ccwdev_lock(raw->cdev), flags);
-   raw->port.flags &= ~ASYNC_SUSPENDED;
+   tty_port_set_suspended(>port, 0);
raw->flags |= RAW3215_FLUSHING;
raw3215_try_io(raw);
raw->flags &= ~RAW3215_FLUSHING;
@@ -859,7 +859,7 @@ static void con3215_flush(void)
unsigned long flags;
 
raw = raw3215[0];  /* console 3215 is the first one */
-   if (raw->port.flags & ASYNC_SUSPENDED)
+   if (tty_port_suspended(>port))
/* The console is still frozen for suspend. */
if (ccw_device_force_console(raw->cdev))
/* Forcing didn't work, no panic message .. */
diff --git a/drivers/tty/serial/serial_core.c b/drivers/tty/serial/serial_core.c
index 2471380..9336067 100644
--- a/drivers/tty/serial/serial_core.c
+++ b/drivers/tty/serial/serial_core.c
@@ -249,7 +249,7 @@ static void uart_shutdown(struct tty_struct *tty, struct 
uart_state *state)
 * a DCD drop (hangup) at just the right time.  Clear suspended bit so
 * we don't try to resume a port that has been shutdown.
 */
-   clear_bit(ASYNCB_SUSPENDED, >flags);
+   tty_port_set_suspended(port, 0);
 
/*
 * Free the transmit buffer page.
@@ -2007,7 +2007,7 @@ int uart_suspend_port(struct uart_driver *drv, struct 
uart_port *uport)
const struct uart_ops *ops = uport->ops;
int tries;
 
-   set_bit(ASYNCB_SUSPENDED, >flags);
+   tty_port_set_suspended(port, 1);
clear_bit(ASYNCB_INITIALIZED, >flags);
 
spin_lock_irq(>lock);
@@ -2088,7 +2088,7 @@ int uart_resume_port(struct uart_driver *drv, struct 
uart_port *uport)
console_start(uport->cons);
}
 
-   if (port->flags & ASYNC_SUSPENDED) {
+   if (tty_port_suspended(port)) {
const struct uart_ops *ops = uport->ops;
int ret;
 
@@ -2118,7 +2118,7 @@ int uart_resume_port(struct uart_driver *drv, struct 
uart_port *uport)
}
}
 
-   clear_bit(ASYNCB_SUSPENDED, >flags);
+   tty_port_set_suspended(port, 0);
}
 
mutex_unlock(>mutex);
diff --git a/include/linux/tty.h b/include/linux/tty.h
index 4254dfb..7ac5add 100644
--- a/include/linux/tty.h
+++ b/include/linux/tty.h
@@ -597,6 +597,19 @@ static inline void tty_port_set_check_carrier(struct 
tty_port *port, bool val)