Messages in this thread | | | Date | Mon, 1 Nov 2021 10:11:26 -0500 | Subject | Re: [PATCH v2] staging: r8188eu: Use kzalloc() with GFP_ATOMIC in atomic context | From | Larry Finger <> |
| |
On 11/1/21 09:27, Fabio M. De Francesco wrote: > Use the GFP_ATOMIC flag of kzalloc() with two memory allocation in > report_del_sta_event(). This function is called while holding spinlocks, > therefore it is not allowed to sleep. With the GFP_ATOMIC type flag, the > allocation is high priority and must not sleep. > > This issue is detected by Smatch which emits the following warning: > "drivers/staging/r8188eu/core/rtw_mlme_ext.c:6848 report_del_sta_event() > warn: sleeping in atomic context". > > After the change, the post-commit hook output the following message: > "CHECK: Prefer kzalloc(sizeof(*pcmd_obj)...) over > kzalloc(sizeof(struct cmd_obj)...)". > > According to the above "CHECK", use the preferred style in the first > kzalloc(). > > Signed-off-by: Fabio M. De Francesco <fmdefrancesco@gmail.com> > --- > > v1->v2: Fix an overlooked error due to an incorrect copy-paste > of the sizeof() operator.
I am happy that you caught the error before it destroyed every instance of r8188eu. Incidentally, I disagree with checkpatch in that I think that sizeof(struct foo) is more descriptive than sizeof(*bar). If I wanted to check the resulting value of the sizeof(), the second form requires an additional step. It probably does not matter much to the compiler, but when I have to do it manually, the extra effort is not negligible.
Even though I disagree with the philosophy,
Acked-by: Larry Finger <Larry.Finger@lwfinger.net>
> > drivers/staging/r8188eu/core/rtw_mlme_ext.c | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) > > diff --git a/drivers/staging/r8188eu/core/rtw_mlme_ext.c b/drivers/staging/r8188eu/core/rtw_mlme_ext.c > index 55c3d4a6faeb..315902682292 100644 > --- a/drivers/staging/r8188eu/core/rtw_mlme_ext.c > +++ b/drivers/staging/r8188eu/core/rtw_mlme_ext.c > @@ -6845,12 +6845,12 @@ void report_del_sta_event(struct adapter *padapter, unsigned char *MacAddr, unsi > struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv; > struct cmd_priv *pcmdpriv = &padapter->cmdpriv; > > - pcmd_obj = kzalloc(sizeof(struct cmd_obj), GFP_KERNEL); > + pcmd_obj = kzalloc(sizeof(*pcmd_obj), GFP_ATOMIC); > if (!pcmd_obj) > return; > > cmdsz = (sizeof(struct stadel_event) + sizeof(struct C2HEvent_Header)); > - pevtcmd = kzalloc(cmdsz, GFP_KERNEL); > + pevtcmd = kzalloc(cmdsz, GFP_ATOMIC); > if (!pevtcmd) { > kfree(pcmd_obj); > return; >
| |