|
@@ -3879,11 +3879,9 @@ static void irte_ga_prepare(void *entry,
|
|
|
u8 vector, u32 dest_apicid, int devid)
|
|
|
{
|
|
|
struct irte_ga *irte = (struct irte_ga *) entry;
|
|
|
- struct iommu_dev_data *dev_data = search_dev_data(devid);
|
|
|
|
|
|
irte->lo.val = 0;
|
|
|
irte->hi.val = 0;
|
|
|
- irte->lo.fields_remap.guest_mode = dev_data ? dev_data->use_vapic : 0;
|
|
|
irte->lo.fields_remap.int_type = delivery_mode;
|
|
|
irte->lo.fields_remap.dm = dest_mode;
|
|
|
irte->hi.fields.vector = vector;
|
|
@@ -3939,10 +3937,10 @@ static void irte_ga_set_affinity(void *entry, u16 devid, u16 index,
|
|
|
struct irte_ga *irte = (struct irte_ga *) entry;
|
|
|
struct iommu_dev_data *dev_data = search_dev_data(devid);
|
|
|
|
|
|
- if (!dev_data || !dev_data->use_vapic) {
|
|
|
+ if (!dev_data || !dev_data->use_vapic ||
|
|
|
+ !irte->lo.fields_remap.guest_mode) {
|
|
|
irte->hi.fields.vector = vector;
|
|
|
irte->lo.fields_remap.destination = dest_apicid;
|
|
|
- irte->lo.fields_remap.guest_mode = 0;
|
|
|
modify_irte_ga(devid, index, irte, NULL);
|
|
|
}
|
|
|
}
|