mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/herbert/cryptodev-2.6.git
synced 2026-04-18 03:23:53 -04:00
[S390] cio: introduce parent-initiated device move
Change the initiative to update subchannel-ccw device associations to the subchannel: when there is an indication that the internal association no longer reflects the current hardware state, mark each affected subchannel as requiring attention. Once processing reaches a subchannel, determine the correct association for that subchannel at that time and perform the necessary device_move operations. This change fixes problems with the previous approach which would leave devices in an inconsistent state when a new hardware change occurred while a device_move was already scheduled. Signed-off-by: Peter Oberparleiter <peter.oberparleiter@de.ibm.com> Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
This commit is contained in:
committed by
Martin Schwidefsky
parent
60e4dac1ab
commit
5d6e6b6f6f
@@ -376,8 +376,8 @@ static int css_evaluate_new_subchannel(struct subchannel_id schid, int slow)
|
||||
/* Unusable - ignore. */
|
||||
return 0;
|
||||
}
|
||||
CIO_MSG_EVENT(4, "Evaluating schid 0.%x.%04x, event %d, unknown, "
|
||||
"slow path.\n", schid.ssid, schid.sch_no, CIO_OPER);
|
||||
CIO_MSG_EVENT(4, "event: sch 0.%x.%04x, new\n", schid.ssid,
|
||||
schid.sch_no);
|
||||
|
||||
return css_probe_device(schid);
|
||||
}
|
||||
@@ -394,6 +394,10 @@ static int css_evaluate_known_subchannel(struct subchannel *sch, int slow)
|
||||
"Got subchannel machine check but "
|
||||
"no sch_event handler provided.\n");
|
||||
}
|
||||
if (ret != 0 && ret != -EAGAIN) {
|
||||
CIO_MSG_EVENT(2, "eval: sch 0.%x.%04x, rc=%d\n",
|
||||
sch->schid.ssid, sch->schid.sch_no, ret);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -684,6 +688,7 @@ static int __init setup_css(int nr)
|
||||
css->pseudo_subchannel->dev.parent = &css->device;
|
||||
css->pseudo_subchannel->dev.release = css_subchannel_release;
|
||||
dev_set_name(&css->pseudo_subchannel->dev, "defunct");
|
||||
mutex_init(&css->pseudo_subchannel->reg_mutex);
|
||||
ret = cio_create_sch_lock(css->pseudo_subchannel);
|
||||
if (ret) {
|
||||
kfree(css->pseudo_subchannel);
|
||||
|
||||
Reference in New Issue
Block a user