X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=drivers%2Fs390%2Fcio%2Fcss.c;h=948b3b158dd854d66eedda130fc64c83e61a08cc;hb=6a77f38946aaee1cd85eeec6cf4229b204c15071;hp=dd12416e82df0da81b67d6e9807b1f1087268b1e;hpb=87fc8d1bb10cd459024a742c6a10961fefcef18f;p=linux-2.6.git diff --git a/drivers/s390/cio/css.c b/drivers/s390/cio/css.c index dd12416e8..948b3b158 100644 --- a/drivers/s390/cio/css.c +++ b/drivers/s390/cio/css.c @@ -1,7 +1,7 @@ /* * drivers/s390/cio/css.c * driver for channel subsystem - * $Revision: 1.82 $ + * $Revision: 1.84 $ * * Copyright (C) 2002 IBM Deutschland Entwicklung GmbH, * IBM Corporation @@ -188,6 +188,12 @@ css_evaluate_subchannel(int irq, int slow) put_device(&sch->dev); return 0; /* Already processed. */ } + /* + * We've got a machine check, so running I/O won't get an interrupt. + * Kill any pending timers. + */ + if (sch) + device_kill_pending_timer(sch); if (!disc && !slow) { if (sch) put_device(&sch->dev); @@ -298,7 +304,7 @@ struct slow_subchannel { }; static LIST_HEAD(slow_subchannels_head); -static spinlock_t slow_subchannel_lock = SPIN_LOCK_UNLOCKED; +static DEFINE_SPINLOCK(slow_subchannel_lock); static void css_trigger_slow_path(void) @@ -521,7 +527,7 @@ css_enqueue_subchannel_slow(unsigned long schid) new_slow_sch = kmalloc(sizeof(struct slow_subchannel), GFP_ATOMIC); if (!new_slow_sch) return -ENOMEM; - memset(new_slow_sch, sizeof(struct slow_subchannel), 0); + memset(new_slow_sch, 0, sizeof(struct slow_subchannel)); new_slow_sch->schid = schid; spin_lock_irqsave(&slow_subchannel_lock, flags); list_add_tail(&new_slow_sch->slow_list, &slow_subchannels_head);