Skip to content

Commit b1ffffb

Browse files
David Hildenbrandborntraeger
authored andcommitted
KVM: s390: guestdbg: separate defines for per code
Let's avoid working with the PER_EVENT* defines, used for control register manipulation, when checking the u8 PER code. Introduce separate defines based on the existing defines. Reviewed-by: Eric Farman <farman@linux.vnet.ibm.com> Signed-off-by: David Hildenbrand <dahi@linux.vnet.ibm.com> Signed-off-by: Christian Borntraeger <borntraeger@de.ibm.com>
1 parent 8953fb0 commit b1ffffb

File tree

1 file changed

+17
-11
lines changed

1 file changed

+17
-11
lines changed

arch/s390/kvm/guestdbg.c

Lines changed: 17 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -382,14 +382,20 @@ void kvm_s390_prepare_debug_exit(struct kvm_vcpu *vcpu)
382382
vcpu->guest_debug &= ~KVM_GUESTDBG_EXIT_PENDING;
383383
}
384384

385+
#define PER_CODE_MASK (PER_EVENT_MASK >> 24)
386+
#define PER_CODE_BRANCH (PER_EVENT_BRANCH >> 24)
387+
#define PER_CODE_IFETCH (PER_EVENT_IFETCH >> 24)
388+
#define PER_CODE_STORE (PER_EVENT_STORE >> 24)
389+
#define PER_CODE_STORE_REAL (PER_EVENT_STORE_REAL >> 24)
390+
385391
#define per_bp_event(code) \
386-
(code & (PER_EVENT_IFETCH | PER_EVENT_BRANCH))
392+
(code & (PER_CODE_IFETCH | PER_CODE_BRANCH))
387393
#define per_write_wp_event(code) \
388-
(code & (PER_EVENT_STORE | PER_EVENT_STORE_REAL))
394+
(code & (PER_CODE_STORE | PER_CODE_STORE_REAL))
389395

390396
static int debug_exit_required(struct kvm_vcpu *vcpu)
391397
{
392-
u32 perc = (vcpu->arch.sie_block->perc << 24);
398+
u8 perc = vcpu->arch.sie_block->perc;
393399
struct kvm_debug_exit_arch *debug_exit = &vcpu->run->debug.arch;
394400
struct kvm_hw_wp_info_arch *wp_info = NULL;
395401
struct kvm_hw_bp_info_arch *bp_info = NULL;
@@ -444,7 +450,7 @@ int kvm_s390_handle_per_ifetch_icpt(struct kvm_vcpu *vcpu)
444450
const u8 ilen = kvm_s390_get_ilen(vcpu);
445451
struct kvm_s390_pgm_info pgm_info = {
446452
.code = PGM_PER,
447-
.per_code = PER_EVENT_IFETCH >> 24,
453+
.per_code = PER_CODE_IFETCH,
448454
.per_address = __rewind_psw(vcpu->arch.sie_block->gpsw, ilen),
449455
};
450456

@@ -458,33 +464,33 @@ int kvm_s390_handle_per_ifetch_icpt(struct kvm_vcpu *vcpu)
458464

459465
static void filter_guest_per_event(struct kvm_vcpu *vcpu)
460466
{
461-
u32 perc = vcpu->arch.sie_block->perc << 24;
467+
const u8 perc = vcpu->arch.sie_block->perc;
462468
u64 peraddr = vcpu->arch.sie_block->peraddr;
463469
u64 addr = vcpu->arch.sie_block->gpsw.addr;
464470
u64 cr9 = vcpu->arch.sie_block->gcr[9];
465471
u64 cr10 = vcpu->arch.sie_block->gcr[10];
466472
u64 cr11 = vcpu->arch.sie_block->gcr[11];
467473
/* filter all events, demanded by the guest */
468-
u32 guest_perc = perc & cr9 & PER_EVENT_MASK;
474+
u8 guest_perc = perc & (cr9 >> 24) & PER_CODE_MASK;
469475

470476
if (!guest_per_enabled(vcpu))
471477
guest_perc = 0;
472478

473479
/* filter "successful-branching" events */
474-
if (guest_perc & PER_EVENT_BRANCH &&
480+
if (guest_perc & PER_CODE_BRANCH &&
475481
cr9 & PER_CONTROL_BRANCH_ADDRESS &&
476482
!in_addr_range(addr, cr10, cr11))
477-
guest_perc &= ~PER_EVENT_BRANCH;
483+
guest_perc &= ~PER_CODE_BRANCH;
478484

479485
/* filter "instruction-fetching" events */
480-
if (guest_perc & PER_EVENT_IFETCH &&
486+
if (guest_perc & PER_CODE_IFETCH &&
481487
!in_addr_range(peraddr, cr10, cr11))
482-
guest_perc &= ~PER_EVENT_IFETCH;
488+
guest_perc &= ~PER_CODE_IFETCH;
483489

484490
/* All other PER events will be given to the guest */
485491
/* TODO: Check altered address/address space */
486492

487-
vcpu->arch.sie_block->perc = guest_perc >> 24;
493+
vcpu->arch.sie_block->perc = guest_perc;
488494

489495
if (!guest_perc)
490496
vcpu->arch.sie_block->iprcc &= ~PGM_PER;

0 commit comments

Comments
 (0)