9
9
10
10
static void eiointc_set_sw_coreisr (struct loongarch_eiointc * s )
11
11
{
12
- int ipnum , cpu , cpuid , irq_index , irq_mask , irq ;
12
+ int ipnum , cpu , cpuid , irq ;
13
13
struct kvm_vcpu * vcpu ;
14
14
15
15
for (irq = 0 ; irq < EIOINTC_IRQS ; irq ++ ) {
@@ -18,25 +18,23 @@ static void eiointc_set_sw_coreisr(struct loongarch_eiointc *s)
18
18
ipnum = count_trailing_zeros (ipnum );
19
19
ipnum = (ipnum >= 0 && ipnum < 4 ) ? ipnum : 0 ;
20
20
}
21
- irq_index = irq / 32 ;
22
- irq_mask = BIT (irq & 0x1f );
23
21
24
22
cpuid = s -> coremap .reg_u8 [irq ];
25
23
vcpu = kvm_get_vcpu_by_cpuid (s -> kvm , cpuid );
26
24
if (!vcpu )
27
25
continue ;
28
26
29
27
cpu = vcpu -> vcpu_id ;
30
- if (!!( s -> coreisr .reg_u32 [cpu ][ irq_index ] & irq_mask ))
31
- set_bit (irq , s -> sw_coreisr [cpu ][ipnum ]);
28
+ if (test_bit ( irq , ( unsigned long * ) s -> coreisr .reg_u32 [cpu ]))
29
+ __set_bit (irq , s -> sw_coreisr [cpu ][ipnum ]);
32
30
else
33
- clear_bit (irq , s -> sw_coreisr [cpu ][ipnum ]);
31
+ __clear_bit (irq , s -> sw_coreisr [cpu ][ipnum ]);
34
32
}
35
33
}
36
34
37
35
static void eiointc_update_irq (struct loongarch_eiointc * s , int irq , int level )
38
36
{
39
- int ipnum , cpu , found , irq_index , irq_mask ;
37
+ int ipnum , cpu , found ;
40
38
struct kvm_vcpu * vcpu ;
41
39
struct kvm_interrupt vcpu_irq ;
42
40
@@ -48,19 +46,16 @@ static void eiointc_update_irq(struct loongarch_eiointc *s, int irq, int level)
48
46
49
47
cpu = s -> sw_coremap [irq ];
50
48
vcpu = kvm_get_vcpu (s -> kvm , cpu );
51
- irq_index = irq / 32 ;
52
- irq_mask = BIT (irq & 0x1f );
53
-
54
49
if (level ) {
55
50
/* if not enable return false */
56
- if ((( s -> enable .reg_u32 [ irq_index ]) & irq_mask ) == 0 )
51
+ if (! test_bit ( irq , ( unsigned long * ) s -> enable .reg_u32 ) )
57
52
return ;
58
- s -> coreisr .reg_u32 [cpu ][ irq_index ] |= irq_mask ;
53
+ __set_bit ( irq , ( unsigned long * ) s -> coreisr .reg_u32 [cpu ]) ;
59
54
found = find_first_bit (s -> sw_coreisr [cpu ][ipnum ], EIOINTC_IRQS );
60
- set_bit (irq , s -> sw_coreisr [cpu ][ipnum ]);
55
+ __set_bit (irq , s -> sw_coreisr [cpu ][ipnum ]);
61
56
} else {
62
- s -> coreisr .reg_u32 [cpu ][ irq_index ] &= ~ irq_mask ;
63
- clear_bit (irq , s -> sw_coreisr [cpu ][ipnum ]);
57
+ __clear_bit ( irq , ( unsigned long * ) s -> coreisr .reg_u32 [cpu ]) ;
58
+ __clear_bit (irq , s -> sw_coreisr [cpu ][ipnum ]);
64
59
found = find_first_bit (s -> sw_coreisr [cpu ][ipnum ], EIOINTC_IRQS );
65
60
}
66
61
@@ -110,8 +105,8 @@ void eiointc_set_irq(struct loongarch_eiointc *s, int irq, int level)
110
105
unsigned long flags ;
111
106
unsigned long * isr = (unsigned long * )s -> isr .reg_u8 ;
112
107
113
- level ? set_bit (irq , isr ) : clear_bit (irq , isr );
114
108
spin_lock_irqsave (& s -> lock , flags );
109
+ level ? __set_bit (irq , isr ) : __clear_bit (irq , isr );
115
110
eiointc_update_irq (s , irq , level );
116
111
spin_unlock_irqrestore (& s -> lock , flags );
117
112
}
0 commit comments