s390/sclp: Convert timers to use timer_setup()
In preparation for unconditionally passing the struct timer_list pointer to all timer callbacks, switch to using the new timer_setup() and from_timer() to pass the timer pointer explicitly. Instead of creating an external static data variable, just define a separate callback which encodes the "force restart" desire. Cc: Peter Oberparleiter <oberpar@linux.vnet.ibm.com> Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org> Signed-off-by: Kees Cook <keescook@chromium.org> [heiko.carstens@de.ibm.com: get rid of compile warning] Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com> Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com>
This commit is contained in:
committed by
Heiko Carstens
parent
846d0c6f79
commit
c9602ee7d1
@@ -282,9 +282,9 @@ static void raw3215_start_io(struct raw3215_info *raw)
|
|||||||
/*
|
/*
|
||||||
* Function to start a delayed output after RAW3215_TIMEOUT seconds
|
* Function to start a delayed output after RAW3215_TIMEOUT seconds
|
||||||
*/
|
*/
|
||||||
static void raw3215_timeout(unsigned long __data)
|
static void raw3215_timeout(struct timer_list *t)
|
||||||
{
|
{
|
||||||
struct raw3215_info *raw = (struct raw3215_info *) __data;
|
struct raw3215_info *raw = from_timer(raw, t, timer);
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
|
|
||||||
spin_lock_irqsave(get_ccwdev_lock(raw->cdev), flags);
|
spin_lock_irqsave(get_ccwdev_lock(raw->cdev), flags);
|
||||||
@@ -670,7 +670,7 @@ static struct raw3215_info *raw3215_alloc_info(void)
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
setup_timer(&info->timer, raw3215_timeout, (unsigned long)info);
|
timer_setup(&info->timer, raw3215_timeout, 0);
|
||||||
init_waitqueue_head(&info->empty_wait);
|
init_waitqueue_head(&info->empty_wait);
|
||||||
tasklet_init(&info->tlet, raw3215_wakeup, (unsigned long)info);
|
tasklet_init(&info->tlet, raw3215_wakeup, (unsigned long)info);
|
||||||
tty_port_init(&info->port);
|
tty_port_init(&info->port);
|
||||||
|
|||||||
@@ -69,7 +69,7 @@ static struct con3270 *condev;
|
|||||||
#define CON_UPDATE_STATUS 4 /* Update status line. */
|
#define CON_UPDATE_STATUS 4 /* Update status line. */
|
||||||
#define CON_UPDATE_ALL 8 /* Recreate screen. */
|
#define CON_UPDATE_ALL 8 /* Recreate screen. */
|
||||||
|
|
||||||
static void con3270_update(struct con3270 *);
|
static void con3270_update(struct timer_list *);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Setup timeout for a device. On timeout trigger an update.
|
* Setup timeout for a device. On timeout trigger an update.
|
||||||
@@ -205,8 +205,9 @@ con3270_write_callback(struct raw3270_request *rq, void *data)
|
|||||||
* Update console display.
|
* Update console display.
|
||||||
*/
|
*/
|
||||||
static void
|
static void
|
||||||
con3270_update(struct con3270 *cp)
|
con3270_update(struct timer_list *t)
|
||||||
{
|
{
|
||||||
|
struct con3270 *cp = from_timer(cp, t, timer);
|
||||||
struct raw3270_request *wrq;
|
struct raw3270_request *wrq;
|
||||||
char wcc, prolog[6];
|
char wcc, prolog[6];
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
@@ -552,7 +553,7 @@ con3270_flush(void)
|
|||||||
con3270_update_status(cp);
|
con3270_update_status(cp);
|
||||||
while (cp->update_flags != 0) {
|
while (cp->update_flags != 0) {
|
||||||
spin_unlock_irqrestore(&cp->view.lock, flags);
|
spin_unlock_irqrestore(&cp->view.lock, flags);
|
||||||
con3270_update(cp);
|
con3270_update(&cp->timer);
|
||||||
spin_lock_irqsave(&cp->view.lock, flags);
|
spin_lock_irqsave(&cp->view.lock, flags);
|
||||||
con3270_wait_write(cp);
|
con3270_wait_write(cp);
|
||||||
}
|
}
|
||||||
@@ -623,8 +624,7 @@ con3270_init(void)
|
|||||||
|
|
||||||
INIT_LIST_HEAD(&condev->lines);
|
INIT_LIST_HEAD(&condev->lines);
|
||||||
INIT_LIST_HEAD(&condev->update);
|
INIT_LIST_HEAD(&condev->update);
|
||||||
setup_timer(&condev->timer, (void (*)(unsigned long)) con3270_update,
|
timer_setup(&condev->timer, con3270_update, 0);
|
||||||
(unsigned long) condev);
|
|
||||||
tasklet_init(&condev->readlet,
|
tasklet_init(&condev->readlet,
|
||||||
(void (*)(unsigned long)) con3270_read_tasklet,
|
(void (*)(unsigned long)) con3270_read_tasklet,
|
||||||
(unsigned long) condev->read);
|
(unsigned long) condev->read);
|
||||||
|
|||||||
@@ -136,6 +136,7 @@ static enum sclp_suspend_state_t {
|
|||||||
#define SCLP_BUSY_INTERVAL 10
|
#define SCLP_BUSY_INTERVAL 10
|
||||||
#define SCLP_RETRY_INTERVAL 30
|
#define SCLP_RETRY_INTERVAL 30
|
||||||
|
|
||||||
|
static void sclp_request_timeout(bool force_restart);
|
||||||
static void sclp_process_queue(void);
|
static void sclp_process_queue(void);
|
||||||
static void __sclp_make_read_req(void);
|
static void __sclp_make_read_req(void);
|
||||||
static int sclp_init_mask(int calculate);
|
static int sclp_init_mask(int calculate);
|
||||||
@@ -154,25 +155,32 @@ __sclp_queue_read_req(void)
|
|||||||
|
|
||||||
/* Set up request retry timer. Called while sclp_lock is locked. */
|
/* Set up request retry timer. Called while sclp_lock is locked. */
|
||||||
static inline void
|
static inline void
|
||||||
__sclp_set_request_timer(unsigned long time, void (*function)(unsigned long),
|
__sclp_set_request_timer(unsigned long time, void (*cb)(struct timer_list *))
|
||||||
unsigned long data)
|
|
||||||
{
|
{
|
||||||
del_timer(&sclp_request_timer);
|
del_timer(&sclp_request_timer);
|
||||||
sclp_request_timer.function = function;
|
sclp_request_timer.function = (TIMER_FUNC_TYPE)cb;
|
||||||
sclp_request_timer.data = data;
|
|
||||||
sclp_request_timer.expires = jiffies + time;
|
sclp_request_timer.expires = jiffies + time;
|
||||||
add_timer(&sclp_request_timer);
|
add_timer(&sclp_request_timer);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Request timeout handler. Restart the request queue. If DATA is non-zero,
|
static void sclp_request_timeout_restart(struct timer_list *unused)
|
||||||
|
{
|
||||||
|
sclp_request_timeout(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void sclp_request_timeout_normal(struct timer_list *unused)
|
||||||
|
{
|
||||||
|
sclp_request_timeout(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Request timeout handler. Restart the request queue. If force_restart,
|
||||||
* force restart of running request. */
|
* force restart of running request. */
|
||||||
static void
|
static void sclp_request_timeout(bool force_restart)
|
||||||
sclp_request_timeout(unsigned long data)
|
|
||||||
{
|
{
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
|
|
||||||
spin_lock_irqsave(&sclp_lock, flags);
|
spin_lock_irqsave(&sclp_lock, flags);
|
||||||
if (data) {
|
if (force_restart) {
|
||||||
if (sclp_running_state == sclp_running_state_running) {
|
if (sclp_running_state == sclp_running_state_running) {
|
||||||
/* Break running state and queue NOP read event request
|
/* Break running state and queue NOP read event request
|
||||||
* to get a defined interface state. */
|
* to get a defined interface state. */
|
||||||
@@ -181,7 +189,7 @@ sclp_request_timeout(unsigned long data)
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
__sclp_set_request_timer(SCLP_BUSY_INTERVAL * HZ,
|
__sclp_set_request_timer(SCLP_BUSY_INTERVAL * HZ,
|
||||||
sclp_request_timeout, 0);
|
sclp_request_timeout_normal);
|
||||||
}
|
}
|
||||||
spin_unlock_irqrestore(&sclp_lock, flags);
|
spin_unlock_irqrestore(&sclp_lock, flags);
|
||||||
sclp_process_queue();
|
sclp_process_queue();
|
||||||
@@ -239,7 +247,7 @@ out:
|
|||||||
* invokes callback. This timer can be set per request in situations where
|
* invokes callback. This timer can be set per request in situations where
|
||||||
* waiting too long would be harmful to the system, e.g. during SE reboot.
|
* waiting too long would be harmful to the system, e.g. during SE reboot.
|
||||||
*/
|
*/
|
||||||
static void sclp_req_queue_timeout(unsigned long data)
|
static void sclp_req_queue_timeout(struct timer_list *unused)
|
||||||
{
|
{
|
||||||
unsigned long flags, expires_next;
|
unsigned long flags, expires_next;
|
||||||
struct sclp_req *req;
|
struct sclp_req *req;
|
||||||
@@ -276,12 +284,12 @@ __sclp_start_request(struct sclp_req *req)
|
|||||||
req->status = SCLP_REQ_RUNNING;
|
req->status = SCLP_REQ_RUNNING;
|
||||||
sclp_running_state = sclp_running_state_running;
|
sclp_running_state = sclp_running_state_running;
|
||||||
__sclp_set_request_timer(SCLP_RETRY_INTERVAL * HZ,
|
__sclp_set_request_timer(SCLP_RETRY_INTERVAL * HZ,
|
||||||
sclp_request_timeout, 1);
|
sclp_request_timeout_restart);
|
||||||
return 0;
|
return 0;
|
||||||
} else if (rc == -EBUSY) {
|
} else if (rc == -EBUSY) {
|
||||||
/* Try again later */
|
/* Try again later */
|
||||||
__sclp_set_request_timer(SCLP_BUSY_INTERVAL * HZ,
|
__sclp_set_request_timer(SCLP_BUSY_INTERVAL * HZ,
|
||||||
sclp_request_timeout, 0);
|
sclp_request_timeout_normal);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
/* Request failed */
|
/* Request failed */
|
||||||
@@ -315,7 +323,7 @@ sclp_process_queue(void)
|
|||||||
/* Cannot abort already submitted request - could still
|
/* Cannot abort already submitted request - could still
|
||||||
* be active at the SCLP */
|
* be active at the SCLP */
|
||||||
__sclp_set_request_timer(SCLP_BUSY_INTERVAL * HZ,
|
__sclp_set_request_timer(SCLP_BUSY_INTERVAL * HZ,
|
||||||
sclp_request_timeout, 0);
|
sclp_request_timeout_normal);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
do_post:
|
do_post:
|
||||||
@@ -558,7 +566,7 @@ sclp_sync_wait(void)
|
|||||||
if (timer_pending(&sclp_request_timer) &&
|
if (timer_pending(&sclp_request_timer) &&
|
||||||
get_tod_clock_fast() > timeout &&
|
get_tod_clock_fast() > timeout &&
|
||||||
del_timer(&sclp_request_timer))
|
del_timer(&sclp_request_timer))
|
||||||
sclp_request_timer.function(sclp_request_timer.data);
|
sclp_request_timer.function((TIMER_DATA_TYPE)&sclp_request_timer);
|
||||||
cpu_relax();
|
cpu_relax();
|
||||||
}
|
}
|
||||||
local_irq_disable();
|
local_irq_disable();
|
||||||
@@ -915,7 +923,7 @@ static void sclp_check_handler(struct ext_code ext_code,
|
|||||||
|
|
||||||
/* Initial init mask request timed out. Modify request state to failed. */
|
/* Initial init mask request timed out. Modify request state to failed. */
|
||||||
static void
|
static void
|
||||||
sclp_check_timeout(unsigned long data)
|
sclp_check_timeout(struct timer_list *unused)
|
||||||
{
|
{
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
|
|
||||||
@@ -954,7 +962,7 @@ sclp_check_interface(void)
|
|||||||
sclp_init_req.status = SCLP_REQ_RUNNING;
|
sclp_init_req.status = SCLP_REQ_RUNNING;
|
||||||
sclp_running_state = sclp_running_state_running;
|
sclp_running_state = sclp_running_state_running;
|
||||||
__sclp_set_request_timer(SCLP_RETRY_INTERVAL * HZ,
|
__sclp_set_request_timer(SCLP_RETRY_INTERVAL * HZ,
|
||||||
sclp_check_timeout, 0);
|
sclp_check_timeout);
|
||||||
spin_unlock_irqrestore(&sclp_lock, flags);
|
spin_unlock_irqrestore(&sclp_lock, flags);
|
||||||
/* Enable service-signal interruption - needs to happen
|
/* Enable service-signal interruption - needs to happen
|
||||||
* with IRQs enabled. */
|
* with IRQs enabled. */
|
||||||
@@ -1159,9 +1167,8 @@ sclp_init(void)
|
|||||||
INIT_LIST_HEAD(&sclp_req_queue);
|
INIT_LIST_HEAD(&sclp_req_queue);
|
||||||
INIT_LIST_HEAD(&sclp_reg_list);
|
INIT_LIST_HEAD(&sclp_reg_list);
|
||||||
list_add(&sclp_state_change_event.list, &sclp_reg_list);
|
list_add(&sclp_state_change_event.list, &sclp_reg_list);
|
||||||
init_timer(&sclp_request_timer);
|
timer_setup(&sclp_request_timer, NULL, 0);
|
||||||
init_timer(&sclp_queue_timer);
|
timer_setup(&sclp_queue_timer, sclp_req_queue_timeout, 0);
|
||||||
sclp_queue_timer.function = sclp_req_queue_timeout;
|
|
||||||
/* Check interface */
|
/* Check interface */
|
||||||
spin_unlock_irqrestore(&sclp_lock, flags);
|
spin_unlock_irqrestore(&sclp_lock, flags);
|
||||||
rc = sclp_check_interface();
|
rc = sclp_check_interface();
|
||||||
|
|||||||
@@ -125,7 +125,7 @@ static void sclp_console_sync_queue(void)
|
|||||||
* temporary write buffer without further waiting on a final new line.
|
* temporary write buffer without further waiting on a final new line.
|
||||||
*/
|
*/
|
||||||
static void
|
static void
|
||||||
sclp_console_timeout(unsigned long data)
|
sclp_console_timeout(struct timer_list *unused)
|
||||||
{
|
{
|
||||||
sclp_conbuf_emit();
|
sclp_conbuf_emit();
|
||||||
}
|
}
|
||||||
@@ -211,7 +211,6 @@ sclp_console_write(struct console *console, const char *message,
|
|||||||
/* Setup timer to output current console buffer after 1/10 second */
|
/* Setup timer to output current console buffer after 1/10 second */
|
||||||
if (sclp_conbuf != NULL && sclp_chars_in_buffer(sclp_conbuf) != 0 &&
|
if (sclp_conbuf != NULL && sclp_chars_in_buffer(sclp_conbuf) != 0 &&
|
||||||
!timer_pending(&sclp_con_timer)) {
|
!timer_pending(&sclp_con_timer)) {
|
||||||
setup_timer(&sclp_con_timer, sclp_console_timeout, 0UL);
|
|
||||||
mod_timer(&sclp_con_timer, jiffies + HZ / 10);
|
mod_timer(&sclp_con_timer, jiffies + HZ / 10);
|
||||||
}
|
}
|
||||||
out:
|
out:
|
||||||
@@ -332,7 +331,7 @@ sclp_console_init(void)
|
|||||||
INIT_LIST_HEAD(&sclp_con_outqueue);
|
INIT_LIST_HEAD(&sclp_con_outqueue);
|
||||||
spin_lock_init(&sclp_con_lock);
|
spin_lock_init(&sclp_con_lock);
|
||||||
sclp_conbuf = NULL;
|
sclp_conbuf = NULL;
|
||||||
init_timer(&sclp_con_timer);
|
timer_setup(&sclp_con_timer, sclp_console_timeout, 0);
|
||||||
|
|
||||||
/* Set output format */
|
/* Set output format */
|
||||||
if (MACHINE_IS_VM)
|
if (MACHINE_IS_VM)
|
||||||
|
|||||||
@@ -151,7 +151,7 @@ __sclp_ttybuf_emit(struct sclp_buffer *buffer)
|
|||||||
* temporary write buffer.
|
* temporary write buffer.
|
||||||
*/
|
*/
|
||||||
static void
|
static void
|
||||||
sclp_tty_timeout(unsigned long data)
|
sclp_tty_timeout(struct timer_list *unused)
|
||||||
{
|
{
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
struct sclp_buffer *buf;
|
struct sclp_buffer *buf;
|
||||||
@@ -218,7 +218,6 @@ static int sclp_tty_write_string(const unsigned char *str, int count, int may_fa
|
|||||||
/* Setup timer to output current console buffer after 1/10 second */
|
/* Setup timer to output current console buffer after 1/10 second */
|
||||||
if (sclp_ttybuf && sclp_chars_in_buffer(sclp_ttybuf) &&
|
if (sclp_ttybuf && sclp_chars_in_buffer(sclp_ttybuf) &&
|
||||||
!timer_pending(&sclp_tty_timer)) {
|
!timer_pending(&sclp_tty_timer)) {
|
||||||
setup_timer(&sclp_tty_timer, sclp_tty_timeout, 0UL);
|
|
||||||
mod_timer(&sclp_tty_timer, jiffies + HZ / 10);
|
mod_timer(&sclp_tty_timer, jiffies + HZ / 10);
|
||||||
}
|
}
|
||||||
spin_unlock_irqrestore(&sclp_tty_lock, flags);
|
spin_unlock_irqrestore(&sclp_tty_lock, flags);
|
||||||
@@ -526,7 +525,7 @@ sclp_tty_init(void)
|
|||||||
}
|
}
|
||||||
INIT_LIST_HEAD(&sclp_tty_outqueue);
|
INIT_LIST_HEAD(&sclp_tty_outqueue);
|
||||||
spin_lock_init(&sclp_tty_lock);
|
spin_lock_init(&sclp_tty_lock);
|
||||||
init_timer(&sclp_tty_timer);
|
timer_setup(&sclp_tty_timer, sclp_tty_timeout, 0);
|
||||||
sclp_ttybuf = NULL;
|
sclp_ttybuf = NULL;
|
||||||
sclp_tty_buffer_count = 0;
|
sclp_tty_buffer_count = 0;
|
||||||
if (MACHINE_IS_VM) {
|
if (MACHINE_IS_VM) {
|
||||||
|
|||||||
@@ -357,7 +357,7 @@ sclp_vt220_add_msg(struct sclp_vt220_request *request,
|
|||||||
* Emit buffer after having waited long enough for more data to arrive.
|
* Emit buffer after having waited long enough for more data to arrive.
|
||||||
*/
|
*/
|
||||||
static void
|
static void
|
||||||
sclp_vt220_timeout(unsigned long data)
|
sclp_vt220_timeout(struct timer_list *unused)
|
||||||
{
|
{
|
||||||
sclp_vt220_emit_current();
|
sclp_vt220_emit_current();
|
||||||
}
|
}
|
||||||
@@ -454,8 +454,6 @@ __sclp_vt220_write(const unsigned char *buf, int count, int do_schedule,
|
|||||||
/* Setup timer to output current console buffer after some time */
|
/* Setup timer to output current console buffer after some time */
|
||||||
if (sclp_vt220_current_request != NULL &&
|
if (sclp_vt220_current_request != NULL &&
|
||||||
!timer_pending(&sclp_vt220_timer) && do_schedule) {
|
!timer_pending(&sclp_vt220_timer) && do_schedule) {
|
||||||
sclp_vt220_timer.function = sclp_vt220_timeout;
|
|
||||||
sclp_vt220_timer.data = 0UL;
|
|
||||||
sclp_vt220_timer.expires = jiffies + BUFFER_MAX_DELAY;
|
sclp_vt220_timer.expires = jiffies + BUFFER_MAX_DELAY;
|
||||||
add_timer(&sclp_vt220_timer);
|
add_timer(&sclp_vt220_timer);
|
||||||
}
|
}
|
||||||
@@ -699,7 +697,7 @@ static int __init __sclp_vt220_init(int num_pages)
|
|||||||
spin_lock_init(&sclp_vt220_lock);
|
spin_lock_init(&sclp_vt220_lock);
|
||||||
INIT_LIST_HEAD(&sclp_vt220_empty);
|
INIT_LIST_HEAD(&sclp_vt220_empty);
|
||||||
INIT_LIST_HEAD(&sclp_vt220_outqueue);
|
INIT_LIST_HEAD(&sclp_vt220_outqueue);
|
||||||
init_timer(&sclp_vt220_timer);
|
timer_setup(&sclp_vt220_timer, sclp_vt220_timeout, 0);
|
||||||
tty_port_init(&sclp_vt220_port);
|
tty_port_init(&sclp_vt220_port);
|
||||||
sclp_vt220_current_request = NULL;
|
sclp_vt220_current_request = NULL;
|
||||||
sclp_vt220_buffered_chars = 0;
|
sclp_vt220_buffered_chars = 0;
|
||||||
|
|||||||
@@ -32,7 +32,7 @@
|
|||||||
|
|
||||||
static void __tape_do_irq (struct ccw_device *, unsigned long, struct irb *);
|
static void __tape_do_irq (struct ccw_device *, unsigned long, struct irb *);
|
||||||
static void tape_delayed_next_request(struct work_struct *);
|
static void tape_delayed_next_request(struct work_struct *);
|
||||||
static void tape_long_busy_timeout(unsigned long data);
|
static void tape_long_busy_timeout(struct timer_list *t);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* One list to contain all tape devices of all disciplines, so
|
* One list to contain all tape devices of all disciplines, so
|
||||||
@@ -381,8 +381,7 @@ tape_generic_online(struct tape_device *device,
|
|||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
init_timer(&device->lb_timeout);
|
timer_setup(&device->lb_timeout, tape_long_busy_timeout, 0);
|
||||||
device->lb_timeout.function = tape_long_busy_timeout;
|
|
||||||
|
|
||||||
/* Let the discipline have a go at the device. */
|
/* Let the discipline have a go at the device. */
|
||||||
device->discipline = discipline;
|
device->discipline = discipline;
|
||||||
@@ -867,18 +866,16 @@ tape_delayed_next_request(struct work_struct *work)
|
|||||||
spin_unlock_irq(get_ccwdev_lock(device->cdev));
|
spin_unlock_irq(get_ccwdev_lock(device->cdev));
|
||||||
}
|
}
|
||||||
|
|
||||||
static void tape_long_busy_timeout(unsigned long data)
|
static void tape_long_busy_timeout(struct timer_list *t)
|
||||||
{
|
{
|
||||||
|
struct tape_device *device = from_timer(device, t, lb_timeout);
|
||||||
struct tape_request *request;
|
struct tape_request *request;
|
||||||
struct tape_device *device;
|
|
||||||
|
|
||||||
device = (struct tape_device *) data;
|
|
||||||
spin_lock_irq(get_ccwdev_lock(device->cdev));
|
spin_lock_irq(get_ccwdev_lock(device->cdev));
|
||||||
request = list_entry(device->req_queue.next, struct tape_request, list);
|
request = list_entry(device->req_queue.next, struct tape_request, list);
|
||||||
BUG_ON(request->status != TAPE_REQUEST_LONG_BUSY);
|
BUG_ON(request->status != TAPE_REQUEST_LONG_BUSY);
|
||||||
DBF_LH(6, "%08x: Long busy timeout.\n", device->cdev_id);
|
DBF_LH(6, "%08x: Long busy timeout.\n", device->cdev_id);
|
||||||
__tape_start_next_request(device);
|
__tape_start_next_request(device);
|
||||||
device->lb_timeout.data = 0UL;
|
|
||||||
tape_put_device(device);
|
tape_put_device(device);
|
||||||
spin_unlock_irq(get_ccwdev_lock(device->cdev));
|
spin_unlock_irq(get_ccwdev_lock(device->cdev));
|
||||||
}
|
}
|
||||||
@@ -1157,7 +1154,6 @@ __tape_do_irq (struct ccw_device *cdev, unsigned long intparm, struct irb *irb)
|
|||||||
if (req->status == TAPE_REQUEST_LONG_BUSY) {
|
if (req->status == TAPE_REQUEST_LONG_BUSY) {
|
||||||
DBF_EVENT(3, "(%08x): del timer\n", device->cdev_id);
|
DBF_EVENT(3, "(%08x): del timer\n", device->cdev_id);
|
||||||
if (del_timer(&device->lb_timeout)) {
|
if (del_timer(&device->lb_timeout)) {
|
||||||
device->lb_timeout.data = 0UL;
|
|
||||||
tape_put_device(device);
|
tape_put_device(device);
|
||||||
__tape_start_next_request(device);
|
__tape_start_next_request(device);
|
||||||
}
|
}
|
||||||
@@ -1212,8 +1208,6 @@ __tape_do_irq (struct ccw_device *cdev, unsigned long intparm, struct irb *irb)
|
|||||||
case TAPE_IO_PENDING:
|
case TAPE_IO_PENDING:
|
||||||
break;
|
break;
|
||||||
case TAPE_IO_LONG_BUSY:
|
case TAPE_IO_LONG_BUSY:
|
||||||
device->lb_timeout.data =
|
|
||||||
(unsigned long) tape_get_device(device);
|
|
||||||
device->lb_timeout.expires = jiffies +
|
device->lb_timeout.expires = jiffies +
|
||||||
LONG_BUSY_TIMEOUT * HZ;
|
LONG_BUSY_TIMEOUT * HZ;
|
||||||
DBF_EVENT(3, "(%08x): add timer\n", device->cdev_id);
|
DBF_EVENT(3, "(%08x): add timer\n", device->cdev_id);
|
||||||
|
|||||||
@@ -118,7 +118,7 @@ struct tty3270 {
|
|||||||
#define TTY_UPDATE_STATUS 8 /* Update status line. */
|
#define TTY_UPDATE_STATUS 8 /* Update status line. */
|
||||||
#define TTY_UPDATE_ALL 16 /* Recreate screen. */
|
#define TTY_UPDATE_ALL 16 /* Recreate screen. */
|
||||||
|
|
||||||
static void tty3270_update(struct tty3270 *);
|
static void tty3270_update(struct timer_list *);
|
||||||
static void tty3270_resize_work(struct work_struct *work);
|
static void tty3270_resize_work(struct work_struct *work);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -361,8 +361,9 @@ tty3270_write_callback(struct raw3270_request *rq, void *data)
|
|||||||
* Update 3270 display.
|
* Update 3270 display.
|
||||||
*/
|
*/
|
||||||
static void
|
static void
|
||||||
tty3270_update(struct tty3270 *tp)
|
tty3270_update(struct timer_list *t)
|
||||||
{
|
{
|
||||||
|
struct tty3270 *tp = from_timer(tp, t, timer);
|
||||||
static char invalid_sba[2] = { 0xff, 0xff };
|
static char invalid_sba[2] = { 0xff, 0xff };
|
||||||
struct raw3270_request *wrq;
|
struct raw3270_request *wrq;
|
||||||
unsigned long updated;
|
unsigned long updated;
|
||||||
@@ -748,8 +749,7 @@ tty3270_alloc_view(void)
|
|||||||
goto out_reset;
|
goto out_reset;
|
||||||
|
|
||||||
tty_port_init(&tp->port);
|
tty_port_init(&tp->port);
|
||||||
setup_timer(&tp->timer, (void (*)(unsigned long)) tty3270_update,
|
timer_setup(&tp->timer, tty3270_update, 0);
|
||||||
(unsigned long) tp);
|
|
||||||
tasklet_init(&tp->readlet,
|
tasklet_init(&tp->readlet,
|
||||||
(void (*)(unsigned long)) tty3270_read_tasklet,
|
(void (*)(unsigned long)) tty3270_read_tasklet,
|
||||||
(unsigned long) tp->read);
|
(unsigned long) tp->read);
|
||||||
|
|||||||
Reference in New Issue
Block a user