Thread (6 messages) 6 messages, 3 authors, 2021-07-12

RE: [PATCH 1/1] PCI: hv: Support for create interrupt v3

From: Sunil Muthuswamy <hidden>
Date: 2021-07-12 19:13:43
Also in: linux-pci, lkml

quoted
--- a/drivers/pci/controller/pci-hyperv.c
+++ b/drivers/pci/controller/pci-hyperv.c
@@ -64,6 +64,7 @@ enum pci_protocol_version_t {
 	PCI_PROTOCOL_VERSION_1_1 = PCI_MAKE_VERSION(1, 1),	/* Win10 */
 	PCI_PROTOCOL_VERSION_1_2 = PCI_MAKE_VERSION(1, 2),	/* RS1 */
 	PCI_PROTOCOL_VERSION_1_3 = PCI_MAKE_VERSION(1, 3),	/* Vibranium */
+	PCI_PROTOCOL_VERSION_1_4 = PCI_MAKE_VERSION(1, 4),      /* Fe */
It would be better if we can avoid annotating with internal code names.
Inside of MSFT we tend to forget over time, and people outside usually
have no idea what they mean.

Would you like me to just delete the 'Fe' comment or the previous ones as well?
quoted
@@ -235,6 +239,21 @@ struct hv_msi_desc2 {
 	u16	processor_array[32];
 } __packed;

+/*
+ * struct hv_msi_desc3 - 1.3 version of hv_msi_desc
+ *	Everything is the same as in 'hv_msi_desc2' except that the size
+ *	of the 'vector_count' field is larger to support bigger vector
Actually, it's the "vector" field that's bigger, not "vector_count".
Will update the comment, thanks.
quoted
+ *	values. For ex: LPI vectors on ARM.
+ */
+struct hv_msi_desc3 {
+	u32	vector;
+	u8	delivery_mode;
+	u8	reserved;
+	u16	vector_count;
+	u16	processor_count;
+	u16	processor_array[32];
+} __packed;
+
 /**
  * struct tran_int_desc
  * @reserved:		unused, padding
@@ -383,6 +402,12 @@ struct pci_create_interrupt2 {
 	struct hv_msi_desc2 int_desc;
 } __packed;

+struct pci_create_interrupt3 {
+	struct pci_message message_type;
+	union win_slot_encoding wslot;
+	struct hv_msi_desc3 int_desc;
+} __packed;
+
 struct pci_delete_interrupt {
 	struct pci_message message_type;
 	union win_slot_encoding wslot;
@@ -1334,26 +1359,55 @@ static u32 hv_compose_msi_req_v1(
 	return sizeof(*int_pkt);
 }

+static void hv_compose_msi_req_get_cpu(struct cpumask *affinity, int *cpu,
+				       u16 *count)
+{
+	/*
+	 * Create MSI w/ dummy vCPU set targeting just one vCPU, overwritten
+	 * by subsequent retarget in hv_irq_unmask().
+	 */
+	*cpu = cpumask_first_and(affinity, cpu_online_mask);
+	*count = 1;
+}
+
 static u32 hv_compose_msi_req_v2(
 	struct pci_create_interrupt2 *int_pkt, struct cpumask *affinity,
 	u32 slot, u8 vector)
 {
 	int cpu;
+	u16 cpu_count;

 	int_pkt->message_type.type = PCI_CREATE_INTERRUPT_MESSAGE2;
 	int_pkt->wslot.slot = slot;
 	int_pkt->int_desc.vector = vector;
 	int_pkt->int_desc.vector_count = 1;
 	int_pkt->int_desc.delivery_mode = APIC_DELIVERY_MODE_FIXED;
-
-	/*
-	 * Create MSI w/ dummy vCPU set targeting just one vCPU, overwritten
-	 * by subsequent retarget in hv_irq_unmask().
-	 */
 	cpu = cpumask_first_and(affinity, cpu_online_mask);
Shouldn't this line be deleted since the new hv_compose_msi_req_get_cpu()
function is doing the work?
Yes, this is fixed in v2 that I just sent out.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help