<div dir="ltr">Hi Long,<div><br></div><div>Yes, got it.</div><div>By caching the results of 'hn_rndis_query_hwcaps()' inside PMD will be better.</div><div>Yes, you can submit the patch 'Or' let me know, if you are busy.</div><div><br></div><div>Thanks,</div><div>Madhukar.</div></div><br><div class="gmail_quote gmail_quote_container"><div dir="ltr" class="gmail_attr">On Thu, Jan 1, 2026 at 4:52 AM Long Li <<a href="mailto:longli@microsoft.com">longli@microsoft.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div class="msg1208458461010019189">





<div lang="EN-US" style="overflow-wrap: break-word;">
<div class="m_1208458461010019189WordSection1">
<p class="MsoNormal">Hi Madhukar,<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">I suggest caching the result of hn_rndis_query_hwcaps(), as suggested by Stephen. This can be done inside PMD. Do you want me to submit a patch?<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">For querying link status, the lock should be implemented inside hn_rndis_exec1(). The drawback is that this function can potentially wait for up to 60 seconds on response from host, maybe not suitable for spinlock in production use. But
 I think it’s better to have application retry on BUSY (with some delay logic), as the netvsc is designed in this way since introduced.<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">Thanks,<u></u><u></u></p>
<p class="MsoNormal">Long<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<div style="border-top:none;border-right:none;border-bottom:none;border-left:1.5pt solid blue;padding:0in 0in 0in 4pt">
<div>
<div style="border-right:none;border-bottom:none;border-left:none;border-top:1pt solid rgb(225,225,225);padding:3pt 0in 0in">
<p class="MsoNormal"><b><span style="font-size:11pt;font-family:Calibri,sans-serif">From:</span></b><span style="font-size:11pt;font-family:Calibri,sans-serif"> madhukar mythri <<a href="mailto:madhukar.mythri@gmail.com" target="_blank">madhukar.mythri@gmail.com</a>>
<br>
<b>Sent:</b> Saturday, December 20, 2025 9:37 PM<br>
<b>To:</b> Stephen Hemminger <<a href="mailto:stephen@networkplumber.org" target="_blank">stephen@networkplumber.org</a>><br>
<b>Cc:</b> Long Li <<a href="mailto:longli@microsoft.com" target="_blank">longli@microsoft.com</a>>; <a href="mailto:dev@dpdk.org" target="_blank">dev@dpdk.org</a>; Madhuker Mythri <<a href="mailto:madhuker.mythri@oracle.com" target="_blank">madhuker.mythri@oracle.com</a>><br>
<b>Subject:</b> Re: [EXTERNAL] [PATCH] net/netvsc: Fix on race condition of multiple commands<u></u><u></u></span></p>
</div>
</div>
<p class="MsoNormal"><u></u> <u></u></p>
<table border="0" cellspacing="0" cellpadding="0" align="left" width="100%" style="width:100%">
<tbody>
<tr>
<td width="0" style="width:0.3pt;background:rgb(166,166,166);padding:5.25pt 1.5pt">
</td>
<td width="100%" style="background:revert;border:revert;color:revert;direction:revert;display:revert;font-size:revert;height:revert;letter-spacing:revert;line-height:revert;margin:revert;opacity:revert;outline:revert;overflow:revert;padding:revert;table-layout:revert;text-align:revert;text-indent:revert;text-orientation:revert;text-overflow:revert;text-transform:revert;vertical-align:revert;white-space:revert;width:revert;word-break:revert;word-spacing:revert;writing-mode:revert;zoom:revert">
<div>
<p class="MsoNormal">
<span style="font-size:9pt;font-family:"Segoe UI",sans-serif;color:rgb(33,33,33)">You don't often get email from
</span><span style="color:black"><a href="mailto:madhukar.mythri@gmail.com" target="_blank"><span style="font-size:9pt;font-family:"Segoe UI",sans-serif">madhukar.mythri@gmail.com</span></a></span><span style="font-size:9pt;font-family:"Segoe UI",sans-serif;color:rgb(33,33,33)">.
</span><span style="color:black"><a href="https://aka.ms/LearnAboutSenderIdentification" target="_blank"><span style="font-size:9pt;font-family:"Segoe UI",sans-serif">Learn why this is important</span></a></span><span style="font-size:9pt;font-family:"Segoe UI",sans-serif;color:rgb(33,33,33)">
<u></u><u></u></span></p>
</div>
</td>
<td width="75" style="background:revert;border:revert;color:revert;direction:revert;display:revert;font-size:revert;height:revert;letter-spacing:revert;line-height:revert;margin:revert;opacity:revert;outline:revert;overflow:revert;padding:revert;table-layout:revert;text-align:revert;text-indent:revert;text-orientation:revert;text-overflow:revert;text-transform:revert;vertical-align:revert;white-space:revert;width:revert;word-break:revert;word-spacing:revert;writing-mode:revert;zoom:revert">
</td>
</tr>
</tbody>
</table>
<div>
<div>
<p class="MsoNormal">Hi Li and Stephen, <u></u><u></u></p>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">We have a common DPDK application for all the PMD's, in which we are seeing issue for this Netvsc PMD only.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">I mean, for KVM hypervisor with Intel or Mellanox NICs we did not see such sync issues. Also, with failsafe PMD on hyper-v did not seen such sync issues.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">So, i thought this would be better to fix at PMD level using spinlock.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal"><a href="mailto:stephen@networkplumber.org" target="_blank"><span style="color:rgb(17,85,204)">@Stephen Hemminger</span></a> , yes we can store the device info get details after probe and reuse it later.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">For Link-status get with multiple threads we can go with retry mechanism.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">However, w.r.t all other PMD's this device info get and Link-status get has issues in multi threaded application.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">Regards,<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">Madhuker.<u></u><u></u></p>
</div>
</div>
<p class="MsoNormal"><u></u> <u></u></p>
<div>
<div>
<p class="MsoNormal">On Sat, 20 Dec, 2025, 23:55 Stephen Hemminger, <<a href="mailto:stephen@networkplumber.org" target="_blank">stephen@networkplumber.org</a>> wrote:<u></u><u></u></p>
</div>
<blockquote style="border-top:none;border-right:none;border-bottom:none;border-left:1pt solid rgb(204,204,204);padding:0in 0in 0in 6pt;margin:5pt 0in 5pt 4.8pt">
<p class="MsoNormal">On Fri, 19 Dec 2025 17:35:33 +0000<br>
Long Li <<a href="mailto:longli@microsoft.com" target="_blank">longli@microsoft.com</a>> wrote:<br>
<br>
> > When multiple processes issue command requests(like: device info get and<br>
> > link-status) at same-time, then we could see the command request failures,<br>
> > due to race-condition of common function execution.  <br>
> <br>
> Hi Madhuker,<br>
> <br>
> I'm not sure if we should use a lock in the driver for this. It's not clear in DPDK documents but in general the calls to query device status are not thread safe.<br>
> <br>
> Is it possible that the application uses a lock to sync calling to this?<br>
> <br>
<br>
I do not know of any restrictions about threads calling query operations.<br>
<br>
For info_get() the transaction is in rndis_get_offload().<br>
There are couple of ways to handle this better. One would to do<br>
the query during probe and remember the result. The hypervisor is<br>
not going to change supported offload. The other and simpler way<br>
would be to just have hardcoded offload values. The code for query<br>
got compute offloads is inherited for BSD and unless someone was trying<br>
to run on Windows 2012 or earlier version of Hyper-V it would never change.<br>
<br>
Link status is a little more complex. Does the hyper-visor ever report<br>
that the software path is down? And reading through the hn_rdis_exec code<br>
it looks like if multiple operations are in process the second one<br>
should return -EBUSY. Application could retry in that case.<u></u><u></u></p>
</blockquote>
</div>
</div>
</div>
</div>
</div>

</div></blockquote></div>