Skip to content

Commit

Permalink
s390x: Info skeys sub-command
Browse files Browse the repository at this point in the history
Provide an  info skeys hmp sub-command to allow the end user to dump a storage
key for a given address. This is useful for guest operating system developers.

Reviewed-by: Thomas Huth <thuth@linux.vnet.ibm.com>
Reviewed-by: David Hildenbrand <dahi@linux.vnet.ibm.com>
Signed-off-by: Jason J. Herne <jjherne@linux.vnet.ibm.com>
Signed-off-by: Cornelia Huck <cornelia.huck@de.ibm.com>
  • Loading branch information
Jason J. Herne authored and cohuck committed Sep 3, 2015
1 parent a4538a5 commit a08f008
Show file tree
Hide file tree
Showing 4 changed files with 36 additions and 0 deletions.
2 changes: 2 additions & 0 deletions hmp-commands.hx
Expand Up @@ -1806,6 +1806,8 @@ show roms
show the TPM device
@item info memory-devices
show the memory devices
@item info skeys
Display the value of a storage key (s390 only)
@end table
ETEXI

Expand Down
23 changes: 23 additions & 0 deletions hw/s390x/s390-skeys.c
Expand Up @@ -66,6 +66,29 @@ static void write_keys(QEMUFile *f, uint8_t *keys, uint64_t startgfn,
}
}

void hmp_info_skeys(Monitor *mon, const QDict *qdict)
{
S390SKeysState *ss = s390_get_skeys_device();
S390SKeysClass *skeyclass = S390_SKEYS_GET_CLASS(ss);
uint64_t addr = qdict_get_int(qdict, "addr");
uint8_t key;
int r;

/* Quick check to see if guest is using storage keys*/
if (!skeyclass->skeys_enabled(ss)) {
monitor_printf(mon, "Error: This guest is not using storage keys\n");
return;
}

r = skeyclass->get_skeys(ss, addr / TARGET_PAGE_SIZE, 1, &key);
if (r < 0) {
monitor_printf(mon, "Error: %s\n", strerror(-r));
return;
}

monitor_printf(mon, " key: 0x%X\n", key);
}

void hmp_dump_skeys(Monitor *mon, const QDict *qdict)
{
const char *filename = qdict_get_str(qdict, "filename");
Expand Down
2 changes: 2 additions & 0 deletions include/hw/s390x/storage-keys.h
Expand Up @@ -54,4 +54,6 @@ void s390_skeys_init(void);
S390SKeysState *s390_get_skeys_device(void);

void hmp_dump_skeys(Monitor *mon, const QDict *qdict);
void hmp_info_skeys(Monitor *mon, const QDict *qdict);

#endif /* __S390_STORAGE_KEYS_H */
9 changes: 9 additions & 0 deletions monitor.c
Expand Up @@ -2881,6 +2881,15 @@ static mon_cmd_t info_cmds[] = {
.help = "Show rocker OF-DPA groups",
.mhandler.cmd = hmp_rocker_of_dpa_groups,
},
#if defined(TARGET_S390X)
{
.name = "skeys",
.args_type = "addr:l",
.params = "address",
.help = "Display the value of a storage key",
.mhandler.cmd = hmp_info_skeys,
},
#endif
{
.name = NULL,
},
Expand Down

0 comments on commit a08f008

Please sign in to comment.