forked from luck/tmp_suning_uos_patched
s390/cio: ensure consistent measurement state
Make sure that in all cases where we could not obtain measurement characteristics the associated fields are set to invalid values. Note: without this change the "shared" capability of a channel path for which we could not obtain the measurement characteristics was incorrectly displayed as 0 (not shared). We will now correctly report "unknown" in this case. Signed-off-by: Sebastian Ott <sebott@linux.vnet.ibm.com> Reviewed-by: Peter Oberparleiter <oberpar@linux.vnet.ibm.com> Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
This commit is contained in:
parent
0d9bfe9123
commit
61f0bfcf80
@ -466,14 +466,11 @@ int chp_new(struct chp_id chpid)
|
||||
ret = -ENODEV;
|
||||
goto out_free;
|
||||
}
|
||||
/* Get channel-measurement characteristics. */
|
||||
if (css_chsc_characteristics.scmc && css_chsc_characteristics.secm) {
|
||||
ret = chsc_get_channel_measurement_chars(chp);
|
||||
if (ret)
|
||||
goto out_free;
|
||||
} else {
|
||||
chp->cmg = -1;
|
||||
}
|
||||
|
||||
ret = chsc_get_channel_measurement_chars(chp);
|
||||
if (ret)
|
||||
goto out_free;
|
||||
|
||||
dev_set_name(&chp->dev, "chp%x.%02x", chpid.cssid, chpid.id);
|
||||
|
||||
/* make it known to the system */
|
||||
|
@ -1003,6 +1003,12 @@ int chsc_get_channel_measurement_chars(struct channel_path *chp)
|
||||
u32 data[NR_MEASUREMENT_CHARS];
|
||||
} __attribute__ ((packed)) *scmc_area;
|
||||
|
||||
chp->shared = -1;
|
||||
chp->cmg = -1;
|
||||
|
||||
if (!css_chsc_characteristics.scmc || !css_chsc_characteristics.secm)
|
||||
return 0;
|
||||
|
||||
spin_lock_irq(&chsc_page_lock);
|
||||
memset(chsc_page, 0, PAGE_SIZE);
|
||||
scmc_area = chsc_page;
|
||||
@ -1023,11 +1029,9 @@ int chsc_get_channel_measurement_chars(struct channel_path *chp)
|
||||
scmc_area->response.code);
|
||||
goto out;
|
||||
}
|
||||
if (scmc_area->not_valid) {
|
||||
chp->cmg = -1;
|
||||
chp->shared = -1;
|
||||
if (scmc_area->not_valid)
|
||||
goto out;
|
||||
}
|
||||
|
||||
chp->cmg = scmc_area->cmg;
|
||||
chp->shared = scmc_area->shared;
|
||||
if (chp->cmg != 2 && chp->cmg != 3) {
|
||||
|
Loading…
Reference in New Issue
Block a user