@@ -436,17 +436,16 @@ static int loongarch_eiointc_writew(struct kvm_vcpu *vcpu,
436
436
break ;
437
437
case EIOINTC_ENABLE_START ... EIOINTC_ENABLE_END :
438
438
index = (offset - EIOINTC_ENABLE_START ) >> 1 ;
439
- old_data = s -> enable .reg_u32 [index ];
439
+ old_data = s -> enable .reg_u16 [index ];
440
440
s -> enable .reg_u16 [index ] = data ;
441
441
/*
442
442
* 1: enable irq.
443
443
* update irq when isr is set.
444
444
*/
445
445
data = s -> enable .reg_u16 [index ] & ~old_data & s -> isr .reg_u16 [index ];
446
- index = index << 1 ;
447
446
for (i = 0 ; i < sizeof (data ); i ++ ) {
448
447
u8 mask = (data >> (i * 8 )) & 0xff ;
449
- eiointc_enable_irq (vcpu , s , index + i , mask , 1 );
448
+ eiointc_enable_irq (vcpu , s , index * 2 + i , mask , 1 );
450
449
}
451
450
/*
452
451
* 0: disable irq.
@@ -455,7 +454,7 @@ static int loongarch_eiointc_writew(struct kvm_vcpu *vcpu,
455
454
data = ~s -> enable .reg_u16 [index ] & old_data & s -> isr .reg_u16 [index ];
456
455
for (i = 0 ; i < sizeof (data ); i ++ ) {
457
456
u8 mask = (data >> (i * 8 )) & 0xff ;
458
- eiointc_enable_irq (vcpu , s , index , mask , 0 );
457
+ eiointc_enable_irq (vcpu , s , index * 2 + i , mask , 0 );
459
458
}
460
459
break ;
461
460
case EIOINTC_BOUNCE_START ... EIOINTC_BOUNCE_END :
@@ -529,10 +528,9 @@ static int loongarch_eiointc_writel(struct kvm_vcpu *vcpu,
529
528
* update irq when isr is set.
530
529
*/
531
530
data = s -> enable .reg_u32 [index ] & ~old_data & s -> isr .reg_u32 [index ];
532
- index = index << 2 ;
533
531
for (i = 0 ; i < sizeof (data ); i ++ ) {
534
532
u8 mask = (data >> (i * 8 )) & 0xff ;
535
- eiointc_enable_irq (vcpu , s , index + i , mask , 1 );
533
+ eiointc_enable_irq (vcpu , s , index * 4 + i , mask , 1 );
536
534
}
537
535
/*
538
536
* 0: disable irq.
@@ -541,7 +539,7 @@ static int loongarch_eiointc_writel(struct kvm_vcpu *vcpu,
541
539
data = ~s -> enable .reg_u32 [index ] & old_data & s -> isr .reg_u32 [index ];
542
540
for (i = 0 ; i < sizeof (data ); i ++ ) {
543
541
u8 mask = (data >> (i * 8 )) & 0xff ;
544
- eiointc_enable_irq (vcpu , s , index , mask , 0 );
542
+ eiointc_enable_irq (vcpu , s , index * 4 + i , mask , 0 );
545
543
}
546
544
break ;
547
545
case EIOINTC_BOUNCE_START ... EIOINTC_BOUNCE_END :
@@ -615,10 +613,9 @@ static int loongarch_eiointc_writeq(struct kvm_vcpu *vcpu,
615
613
* update irq when isr is set.
616
614
*/
617
615
data = s -> enable .reg_u64 [index ] & ~old_data & s -> isr .reg_u64 [index ];
618
- index = index << 3 ;
619
616
for (i = 0 ; i < sizeof (data ); i ++ ) {
620
617
u8 mask = (data >> (i * 8 )) & 0xff ;
621
- eiointc_enable_irq (vcpu , s , index + i , mask , 1 );
618
+ eiointc_enable_irq (vcpu , s , index * 8 + i , mask , 1 );
622
619
}
623
620
/*
624
621
* 0: disable irq.
@@ -627,7 +624,7 @@ static int loongarch_eiointc_writeq(struct kvm_vcpu *vcpu,
627
624
data = ~s -> enable .reg_u64 [index ] & old_data & s -> isr .reg_u64 [index ];
628
625
for (i = 0 ; i < sizeof (data ); i ++ ) {
629
626
u8 mask = (data >> (i * 8 )) & 0xff ;
630
- eiointc_enable_irq (vcpu , s , index , mask , 0 );
627
+ eiointc_enable_irq (vcpu , s , index * 8 + i , mask , 0 );
631
628
}
632
629
break ;
633
630
case EIOINTC_BOUNCE_START ... EIOINTC_BOUNCE_END :
0 commit comments