|
@@ -400,8 +400,18 @@ int irq_set_vcpu_affinity(unsigned int irq, void *vcpu_info)
|
|
|
return -EINVAL;
|
|
|
|
|
|
data = irq_desc_get_irq_data(desc);
|
|
|
- chip = irq_data_get_irq_chip(data);
|
|
|
- if (chip && chip->irq_set_vcpu_affinity)
|
|
|
+ do {
|
|
|
+ chip = irq_data_get_irq_chip(data);
|
|
|
+ if (chip && chip->irq_set_vcpu_affinity)
|
|
|
+ break;
|
|
|
+#ifdef CONFIG_IRQ_DOMAIN_HIERARCHY
|
|
|
+ data = data->parent_data;
|
|
|
+#else
|
|
|
+ data = NULL;
|
|
|
+#endif
|
|
|
+ } while (data);
|
|
|
+
|
|
|
+ if (data)
|
|
|
ret = chip->irq_set_vcpu_affinity(data, vcpu_info);
|
|
|
irq_put_desc_unlock(desc, flags);
|
|
|
|