@@ -156,25 +156,43 @@ int kvm_set_msi(struct kvm_kernel_irq_routing_entry *e,
156156}
157157
158158
159+ static int kvm_hv_set_sint (struct kvm_kernel_irq_routing_entry * e ,
160+ struct kvm * kvm , int irq_source_id , int level ,
161+ bool line_status )
162+ {
163+ if (!level )
164+ return -1 ;
165+
166+ return kvm_hv_synic_set_irq (kvm , e -> hv_sint .vcpu , e -> hv_sint .sint );
167+ }
168+
159169int kvm_arch_set_irq_inatomic (struct kvm_kernel_irq_routing_entry * e ,
160170 struct kvm * kvm , int irq_source_id , int level ,
161171 bool line_status )
162172{
163173 struct kvm_lapic_irq irq ;
164174 int r ;
165175
166- if (unlikely (e -> type != KVM_IRQ_ROUTING_MSI ))
167- return - EWOULDBLOCK ;
176+ switch (e -> type ) {
177+ case KVM_IRQ_ROUTING_HV_SINT :
178+ return kvm_hv_set_sint (e , kvm , irq_source_id , level ,
179+ line_status );
168180
169- if (kvm_msi_route_invalid (kvm , e ))
170- return - EINVAL ;
181+ case KVM_IRQ_ROUTING_MSI :
182+ if (kvm_msi_route_invalid (kvm , e ))
183+ return - EINVAL ;
171184
172- kvm_set_msi_irq (kvm , e , & irq );
185+ kvm_set_msi_irq (kvm , e , & irq );
173186
174- if (kvm_irq_delivery_to_apic_fast (kvm , NULL , & irq , & r , NULL ))
175- return r ;
176- else
177- return - EWOULDBLOCK ;
187+ if (kvm_irq_delivery_to_apic_fast (kvm , NULL , & irq , & r , NULL ))
188+ return r ;
189+ break ;
190+
191+ default :
192+ break ;
193+ }
194+
195+ return - EWOULDBLOCK ;
178196}
179197
180198int kvm_request_irq_source_id (struct kvm * kvm )
@@ -254,16 +272,6 @@ void kvm_fire_mask_notifiers(struct kvm *kvm, unsigned irqchip, unsigned pin,
254272 srcu_read_unlock (& kvm -> irq_srcu , idx );
255273}
256274
257- static int kvm_hv_set_sint (struct kvm_kernel_irq_routing_entry * e ,
258- struct kvm * kvm , int irq_source_id , int level ,
259- bool line_status )
260- {
261- if (!level )
262- return -1 ;
263-
264- return kvm_hv_synic_set_irq (kvm , e -> hv_sint .vcpu , e -> hv_sint .sint );
265- }
266-
267275int kvm_set_routing_entry (struct kvm * kvm ,
268276 struct kvm_kernel_irq_routing_entry * e ,
269277 const struct kvm_irq_routing_entry * ue )
@@ -423,18 +431,6 @@ void kvm_scan_ioapic_routes(struct kvm_vcpu *vcpu,
423431 srcu_read_unlock (& kvm -> irq_srcu , idx );
424432}
425433
426- int kvm_arch_set_irq (struct kvm_kernel_irq_routing_entry * irq , struct kvm * kvm ,
427- int irq_source_id , int level , bool line_status )
428- {
429- switch (irq -> type ) {
430- case KVM_IRQ_ROUTING_HV_SINT :
431- return kvm_hv_set_sint (irq , kvm , irq_source_id , level ,
432- line_status );
433- default :
434- return - EWOULDBLOCK ;
435- }
436- }
437-
438434void kvm_arch_irq_routing_update (struct kvm * kvm )
439435{
440436 kvm_hv_irq_routing_update (kvm );
0 commit comments