Skip to content

Commit

Permalink
s390x/mmu_helper: avoid setting the storage key if nothing changed
Browse files Browse the repository at this point in the history
Avoid setting the key if nothing changed.

Signed-off-by: David Hildenbrand <david@redhat.com>
Reviewed-by: Thomas Huth <thuth@redhat.com>
Message-Id: <20210903155514.44772-9-david@redhat.com>
Signed-off-by: Thomas Huth <thuth@redhat.com>
  • Loading branch information
davidhildenbrand authored and huth committed Sep 6, 2021
1 parent 390191c commit 380ac2b
Showing 1 changed file with 7 additions and 4 deletions.
11 changes: 7 additions & 4 deletions target/s390x/mmu_helper.c
Original file line number Diff line number Diff line change
Expand Up @@ -301,7 +301,7 @@ static void mmu_handle_skey(target_ulong addr, int rw, int *flags)
{
static S390SKeysClass *skeyclass;
static S390SKeysState *ss;
uint8_t key;
uint8_t key, old_key;
int rc;

/*
Expand Down Expand Up @@ -337,6 +337,7 @@ static void mmu_handle_skey(target_ulong addr, int rw, int *flags)
trace_get_skeys_nonzero(rc);
return;
}
old_key = key;

switch (rw) {
case MMU_DATA_LOAD:
Expand All @@ -360,9 +361,11 @@ static void mmu_handle_skey(target_ulong addr, int rw, int *flags)
/* Any store/fetch sets the reference bit */
key |= SK_R;

rc = skeyclass->set_skeys(ss, addr / TARGET_PAGE_SIZE, 1, &key);
if (rc) {
trace_set_skeys_nonzero(rc);
if (key != old_key) {
rc = skeyclass->set_skeys(ss, addr / TARGET_PAGE_SIZE, 1, &key);
if (rc) {
trace_set_skeys_nonzero(rc);
}
}
}

Expand Down

0 comments on commit 380ac2b

Please sign in to comment.