Re: [RFC PATCH net] ibmvnic: complete dev->poll nicely during adapter reset
From: Sukadev Bhattiprolu <hidden>
Date: 2021-03-05 19:06:22
Lijun Pan [lijunp213@gmail.com] wrote:
On Fri, Mar 5, 2021 at 12:44 PM Sukadev Bhattiprolu [off-list ref] wrote:quoted
Lijun Pan [ljp@linux.ibm.com] wrote:quoted
The reset path will call ibmvnic_cleanup->ibmvnic_napi_disable ->napi_disable(). This is supposed to stop the polling. Commit 21ecba6c48f9 ("ibmvnic: Exit polling routine correctly during adapter reset") reported that the during device reset, polling routine never completed and napi_disable slept indefinitely. In order to solve that problem, resetting bit was checked and napi_complete_done was called before dev->poll::ibmvnic_poll exited. Checking for resetting bit in dev->poll is racy because resetting bit may be false while being checked, but turns true immediately afterwards.Yes, have been testing a fix for that.quoted
Hence we call napi_complete in ibmvnic_napi_disable, which avoids the racing with resetting, and makes sure dev->poll and napi_disalbenapi_complete() will prevent a new call to ibmvnic_poll() but what if ibmvnic_poll() is already executing and attempting to access the scrqs while the reset path is freeing them?napi_complete() and napi_disable() are called in the earlier stages of reset path, i.e. before reset path actually calls the functions to freeing scrqs.
Yes, those will prevent a _new_ call to poll right? But what if poll is already executing? What prevents it from accessing an scrq that the reset path will free?
So I don't think this is a issue here.