aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/s390/kvm
diff options
context:
space:
mode:
authorMartin Schwidefsky <schwidefsky@de.ibm.com>2010-10-25 10:10:38 -0400
committerMartin Schwidefsky <sky@mschwide.boeblingen.de.ibm.com>2010-10-25 10:10:19 -0400
commitf6649a7e5a9ee99e9623878f4a5579cc2f6cdd51 (patch)
tree183438313c7593565980a1445f208e0ba30162cd /drivers/s390/kvm
parent1e54622e0403891b10f2105663e0f9dd595a1f17 (diff)
[S390] cleanup lowcore access from external interrupts
Read external interrupts parameters from the lowcore in the first level interrupt handler in entry[64].S. Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
Diffstat (limited to 'drivers/s390/kvm')
-rw-r--r--drivers/s390/kvm/kvm_virtio.c9
1 files changed, 5 insertions, 4 deletions
diff --git a/drivers/s390/kvm/kvm_virtio.c b/drivers/s390/kvm/kvm_virtio.c
index 5a46b8c5d68a..375aeeaf9ea5 100644
--- a/drivers/s390/kvm/kvm_virtio.c
+++ b/drivers/s390/kvm/kvm_virtio.c
@@ -372,21 +372,22 @@ static void hotplug_devices(struct work_struct *dummy)
372/* 372/*
373 * we emulate the request_irq behaviour on top of s390 extints 373 * we emulate the request_irq behaviour on top of s390 extints
374 */ 374 */
375static void kvm_extint_handler(u16 code) 375static void kvm_extint_handler(unsigned int ext_int_code,
376 unsigned int param32, unsigned long param64)
376{ 377{
377 struct virtqueue *vq; 378 struct virtqueue *vq;
378 u16 subcode; 379 u16 subcode;
379 u32 param; 380 u32 param;
380 381
381 subcode = S390_lowcore.cpu_addr; 382 subcode = ext_int_code >> 16;
382 if ((subcode & 0xff00) != VIRTIO_SUBCODE_64) 383 if ((subcode & 0xff00) != VIRTIO_SUBCODE_64)
383 return; 384 return;
384 385
385 /* The LSB might be overloaded, we have to mask it */ 386 /* The LSB might be overloaded, we have to mask it */
386 vq = (struct virtqueue *)(S390_lowcore.ext_params2 & ~1UL); 387 vq = (struct virtqueue *)(param64 & ~1UL);
387 388
388 /* We use ext_params to decide what this interrupt means */ 389 /* We use ext_params to decide what this interrupt means */
389 param = S390_lowcore.ext_params & VIRTIO_PARAM_MASK; 390 param = param32 & VIRTIO_PARAM_MASK;
390 391
391 switch (param) { 392 switch (param) {
392 case VIRTIO_PARAM_CONFIG_CHANGED: 393 case VIRTIO_PARAM_CONFIG_CHANGED: