Skip to content

Commit

Permalink
[S390] cio: quiesce subchannel in io_subchannel_remove
Browse files Browse the repository at this point in the history
Ensure that there will be no more interrupts for an
unregistered device by using the same quiesce and disable loop
as in io_subchannel_shutdown.

Signed-off-by: Sebastian Ott <sebott@linux.vnet.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
  • Loading branch information
Sebastian Ott authored and Martin Schwidefsky committed Dec 7, 2009
1 parent 0c609fc commit 6e9a0f6
Showing 1 changed file with 9 additions and 1 deletion.
10 changes: 9 additions & 1 deletion drivers/s390/cio/device.c
Original file line number Diff line number Diff line change
Expand Up @@ -1059,6 +1059,8 @@ static int io_subchannel_probe(struct subchannel *sch)
return 0;
}

static void io_subchannel_quiesce(struct subchannel *);

static int
io_subchannel_remove (struct subchannel *sch)
{
Expand All @@ -1068,6 +1070,7 @@ io_subchannel_remove (struct subchannel *sch)
cdev = sch_get_cdev(sch);
if (!cdev)
goto out_free;
io_subchannel_quiesce(sch);
/* Set ccw device to not operational and drop reference. */
spin_lock_irqsave(cdev->ccwlock, flags);
sch_set_cdev(sch, NULL);
Expand Down Expand Up @@ -1150,7 +1153,7 @@ static int io_subchannel_chp_event(struct subchannel *sch,
return 0;
}

static void io_subchannel_shutdown(struct subchannel *sch)
static void io_subchannel_quiesce(struct subchannel *sch)
{
struct ccw_device *cdev;
int ret;
Expand Down Expand Up @@ -1182,6 +1185,11 @@ static void io_subchannel_shutdown(struct subchannel *sch)
spin_unlock_irq(sch->lock);
}

static void io_subchannel_shutdown(struct subchannel *sch)
{
io_subchannel_quiesce(sch);
}

static int device_is_disconnected(struct ccw_device *cdev)
{
if (!cdev)
Expand Down

0 comments on commit 6e9a0f6

Please sign in to comment.