> -----Original Message----- > From: Singh, Aman Deep <aman.deep.si...@intel.com> > Sent: Friday, March 10, 2023 9:09 AM > To: Stephen Hemminger <step...@networkplumber.org>; Dumitrescu, Cristian > <cristian.dumitre...@intel.com> > Cc: Jangra, Yogesh <yogesh.jan...@intel.com>; dev@dpdk.org; R, > Kamalakannan <kamalakanna...@intel.com>; Suresh Narayane, Harshad > <harshad.suresh.naray...@intel.com> > Subject: Re: [PATCH] app/testpmd: fix closing softnic port before ethdev ports > > > On 3/10/2023 1:52 AM, Stephen Hemminger wrote: > > On Thu, 9 Mar 2023 17:19:59 +0000 > > "Dumitrescu, Cristian" <cristian.dumitre...@intel.com> wrote: > > > >>> -----Original Message----- > >>> From: Stephen Hemminger <step...@networkplumber.org> > >>> Sent: Thursday, March 9, 2023 4:31 PM > >>> To: Jangra, Yogesh <yogesh.jan...@intel.com> > >>> Cc: dev@dpdk.org; Dumitrescu, Cristian <cristian.dumitre...@intel.com>; > R, > >>> Kamalakannan <kamalakanna...@intel.com>; Suresh Narayane, Harshad > >>> <harshad.suresh.naray...@intel.com> > >>> Subject: Re: [PATCH] app/testpmd: fix closing softnic port before ethdev > ports > >>> > >>> On Thu, 9 Mar 2023 14:42:49 +0000 > >>> Yogesh Jangra <yogesh.jan...@intel.com> wrote: > >>> > >>>> + /* > >>>> + * SoftNIC runs on the sevice core, it uses the > >>>> resources from > >>>> + * the testpmd application. When we run quit command, > >>>> the > >>> testpmd > >>>> + * application stops ethdev ports first, SoftNIC will > >>>> try to > >>>> + * access the port and sometimes that result in > >>>> segmentation > >>>> + * error. So first closing the SoftNIC port. > >>>> + */ > >>>> + RTE_ETH_FOREACH_DEV(pt_id) { > >>>> + if (!strcmp(ports[pt_id].dev_info.driver_name, > >>> "net_softnic")) { > >>>> + stop_port(pt_id); > >>>> + close_port(pt_id); > >>>> + } > >>>> + } > >>>> + > >>> NAK > >>> No driver specific hacks please. > >>> > >>> Instead fix the driver design or bug please. > >> Hi Stephen, > >> > >> This is not a Soft NIC driver-specific hack, this is required for working > >> around > some of the ethdev drivers that don't implement the stop() API correctly and > free up the device queues or some other internal resources on stop() instead > of > close(). > >> > >> The Soft NIC is a meta-device that sits on top of other "physical" ethdev > devices, so when the Soft NIC device continues to poll the queues of those > physical devices after their queues have been freed, the Soft NIC will get a > segfault. This fix is required to protect against this sort of incorrect > driver > behavior by simply stopping the Soft NIC devices first. > >> > >> We already have several driver specific branches in the test-pmd for e.g. > >> LAG > or virtual devices; IMO this small change falls in the same category and it > should > get accepted. > >> > >> Please let us know if this makes sense to you? > >> > >> Regards, > >> Cristian > > If the application has to do this then something is wrong with the > > architecture. > > > > > > You aren't propagating state changes through in a safe manner. > > Other applications will have same issue. > > > > If LAG or virtual devices have similar problems then a generic solution is > needed. > > At exit, there is call to stop_packet_forwarding(). Shouldn't that stop > SoftNic > from polling of the queues ?
Hi Aman, Unfortunately not. Calling the stop_packet_forwarding() will not stop the core running the Soft NIC, as Soft NIC is running on a service core, and the service cores are not handled by this function. Moreover, a Soft NIC device is not taking over the entire service core; the same service core can also run other services e.g. Soft NIC for device A, telemetry, stats, Soft NIC for device B, etc). Therefore, stopping the service core associated with a Soft NIC device will also incorrectly result in stopping all the other services running on the same service core. Stopping the service for a Soft NIC device is done by the stop() function, which is exactly what we are trying to do with this short patch. Regards, Cristian