From eba61d21b1ad88f9d4f63b5844f17da1dc8d8930 Mon Sep 17 00:00:00 2001
From: Dexuan Cui <decui@microsoft.com>
Date: Mon, 29 Oct 2018 23:18:48 -0700
Subject: [PATCH] x86/irq: implement irq_data_get_effective_affinity_mask() for
 v4.12.14

See __assign_irq_vector():
	cpumask_copy(d->domain, vector_cpumask);

The function is required by Hyper-V pci-hyperv driver. See
79aa801e8994 ("PCI: hv: Use effective affinity mask")

Signed-off-by: Dexuan Cui <decui@microsoft.com>
Signed-off-by: Ajay Kaher <akaher@vmware.com>
---
 arch/x86/kernel/apic/vector.c | 8 ++++++++
 include/linux/irq.h           | 2 ++
 2 files changed, 10 insertions(+)

diff --git a/arch/x86/kernel/apic/vector.c b/arch/x86/kernel/apic/vector.c
index 26c3769..627985a 100644
--- a/arch/x86/kernel/apic/vector.c
+++ b/arch/x86/kernel/apic/vector.c
@@ -69,6 +69,14 @@ struct irq_cfg *irqd_cfg(struct irq_data *irq_data)
 }
 EXPORT_SYMBOL_GPL(irqd_cfg);
 
+struct cpumask *irq_data_get_effective_affinity_mask(struct irq_data *d)
+{
+	struct apic_chip_data *data = apic_chip_data(d);
+
+	return data ? data->domain : NULL;
+}
+EXPORT_SYMBOL_GPL(irq_data_get_effective_affinity_mask);
+
 struct irq_cfg *irq_cfg(unsigned int irq)
 {
 	return irqd_cfg(irq_get_irq_data(irq));
diff --git a/include/linux/irq.h b/include/linux/irq.h
index 45b037e..a3c8c0d 100644
--- a/include/linux/irq.h
+++ b/include/linux/irq.h
@@ -695,6 +695,8 @@ static inline struct cpumask *irq_data_get_affinity_mask(struct irq_data *d)
 	return d->common->affinity;
 }
 
+struct cpumask *irq_data_get_effective_affinity_mask(struct irq_data *d);
+
 unsigned int arch_dynirq_lower_bound(unsigned int from);
 
 int __irq_alloc_descs(int irq, unsigned int from, unsigned int cnt, int node,
-- 
2.7.4