//Adding the Interrupt Snapshot details from the kernel

Hello,

I followed the example from the l3fwd-power to enable the event poll using Interrupt for the ixgbe driver  (10G X550T 1563).

Default multi-queuing enabled.

image.png


The Interrupts associated with the NIC - PCI-MSI
image.png
As the first step, I bind my NIC to the VFIO module.

image.png



The number of rte_eth_devices is shown as 1.

Then in my code, I called RTE_INTR_EVENT_ADD  with kPort = 0 and kQueue = 0

->rte_eth_dev_rx_intr_ctl_q(kPort, kQueue, RTE_EPOLL_PER_THREAD,
                                   RTE_INTR_EVENT_ADD, nullptr);
->I got the error as "RX Intr vector unset." When I checked inside the DPDK code, it showed
intr_handle = dev->intr_handle;
+	if (!intr_handle->intr_vec) {
+		RTE_ETHDEV_LOG(ERR, "RX Intr vector unset\n");
+		return -EPERM;
+	}
I disabled multi-queueing by setting only one Combined queue but got the same error. Could someone help me understand why and how to overcome this error? Thank you. 

Regards,
Priya

On Mon, Jan 30, 2023 at 11:53 AM Priya Ramanathan <shunmugapriya.ramanathan@gmail.com> wrote:
Hello,

I followed the example from the l3fwd-power to enable the event poll for the ixgbe driver  (10G X550T 1563).

Default multi-queuing enabled.

image.png

As the first step, I bind my NIC to the VFIO module.

image.png



The number of rte_eth_devices is shown as 1.

Then in my code, I called RTE_INTR_EVENT_ADD  with kPort = 0 and kQueue = 0

->rte_eth_dev_rx_intr_ctl_q(kPort, kQueue, RTE_EPOLL_PER_THREAD,
                                   RTE_INTR_EVENT_ADD, nullptr);
->I got the error as "RX Intr vector unset." When I checked inside the DPDK code, it showed
intr_handle = dev->intr_handle;
+	if (!intr_handle->intr_vec) {
+		RTE_ETHDEV_LOG(ERR, "RX Intr vector unset\n");
+		return -EPERM;
+	}


I disabled multi-queueing by setting only one Combined queue but got the same error. Could someone help me understand why and how to overcome this error? Thank you. 

Regards,
Priya.



On Thu, Jan 19, 2023 at 10:04 PM Stephen Hemminger <stephen@networkplumber.org> wrote:
On Thu, 19 Jan 2023 16:29:16 -0600
Priya Ramanathan <shunmugapriya.ramanathan@gmail.com> wrote:

> Thank you, for the information.
> I have a UDPDK stack (with DPDK at the physical layer) for UDP
> communication.
>
> I am using VFIO module and binded the 10G X550T NIC to the VFIO module.
> Then I wrote a simple server-client code for UDP communication using the
> UDPDK APIs with DPDK support, which works fine.
> Now, I added the epoll_create, epoll_ctl and epoll_wait commands, and it
> looks like it is not working as expected.
>
> Let me go through the l3fwd example and try to understand it better. If I
> get any questions, I will get back to you. Thank you.
>
> Regards,
> Priya.


There is no file descriptor visible to poll on in DPDK.
You need to use DPDK interrupt mode which is rte_epoll.

Also, if DPDK wakes up in interrupt mode, it might not be a UDP
packet, it could be any type of packet that your stack has to digest
(ARP, ICMP, UDP, etc)


--
winners do not do different things.They do things differently


--
winners do not do different things.They do things differently