@@ -436,17 +436,16 @@ static int loongarch_eiointc_writew(struct kvm_vcpu *vcpu,
436436 break ;
437437 case EIOINTC_ENABLE_START ... EIOINTC_ENABLE_END :
438438 index = (offset - EIOINTC_ENABLE_START ) >> 1 ;
439- old_data = s -> enable .reg_u32 [index ];
439+ old_data = s -> enable .reg_u16 [index ];
440440 s -> enable .reg_u16 [index ] = data ;
441441 /*
442442 * 1: enable irq.
443443 * update irq when isr is set.
444444 */
445445 data = s -> enable .reg_u16 [index ] & ~old_data & s -> isr .reg_u16 [index ];
446- index = index << 1 ;
447446 for (i = 0 ; i < sizeof (data ); i ++ ) {
448447 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 );
450449 }
451450 /*
452451 * 0: disable irq.
@@ -455,7 +454,7 @@ static int loongarch_eiointc_writew(struct kvm_vcpu *vcpu,
455454 data = ~s -> enable .reg_u16 [index ] & old_data & s -> isr .reg_u16 [index ];
456455 for (i = 0 ; i < sizeof (data ); i ++ ) {
457456 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 );
459458 }
460459 break ;
461460 case EIOINTC_BOUNCE_START ... EIOINTC_BOUNCE_END :
@@ -529,10 +528,9 @@ static int loongarch_eiointc_writel(struct kvm_vcpu *vcpu,
529528 * update irq when isr is set.
530529 */
531530 data = s -> enable .reg_u32 [index ] & ~old_data & s -> isr .reg_u32 [index ];
532- index = index << 2 ;
533531 for (i = 0 ; i < sizeof (data ); i ++ ) {
534532 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 );
536534 }
537535 /*
538536 * 0: disable irq.
@@ -541,7 +539,7 @@ static int loongarch_eiointc_writel(struct kvm_vcpu *vcpu,
541539 data = ~s -> enable .reg_u32 [index ] & old_data & s -> isr .reg_u32 [index ];
542540 for (i = 0 ; i < sizeof (data ); i ++ ) {
543541 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 );
545543 }
546544 break ;
547545 case EIOINTC_BOUNCE_START ... EIOINTC_BOUNCE_END :
@@ -615,10 +613,9 @@ static int loongarch_eiointc_writeq(struct kvm_vcpu *vcpu,
615613 * update irq when isr is set.
616614 */
617615 data = s -> enable .reg_u64 [index ] & ~old_data & s -> isr .reg_u64 [index ];
618- index = index << 3 ;
619616 for (i = 0 ; i < sizeof (data ); i ++ ) {
620617 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 );
622619 }
623620 /*
624621 * 0: disable irq.
@@ -627,7 +624,7 @@ static int loongarch_eiointc_writeq(struct kvm_vcpu *vcpu,
627624 data = ~s -> enable .reg_u64 [index ] & old_data & s -> isr .reg_u64 [index ];
628625 for (i = 0 ; i < sizeof (data ); i ++ ) {
629626 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 );
631628 }
632629 break ;
633630 case EIOINTC_BOUNCE_START ... EIOINTC_BOUNCE_END :
0 commit comments