* [dpdk-dev] [PATCH] contigmem: cleanup properly when load fails
@ 2020-03-09 10:00 Jim Harris
2020-03-10 9:31 ` Bruce Richardson
0 siblings, 1 reply; 5+ messages in thread
From: Jim Harris @ 2020-03-09 10:00 UTC (permalink / raw)
To: dev, bruce.richardson; +Cc: Jim Harris
If contigmem is not able to allocate all of the
requested buffers, it frees whatever buffers were
able to be allocated up until that point.
But the pointers are not set to NULL in that case.
After the load fails, the FreeBSD kernel will
immediately call the contigmem unload handler, which
tries to free the buffers again since the pointers
were not set to NULL.
It's not clear that we should just rely on the unload
handler getting called after load failure. So let's
keep the existing cleanup code in the load handler,
but explicitly set the pointers to NULL after freeing
them.
Signed-off-by: Jim Harris <james.r.harris@intel.com>
---
kernel/freebsd/contigmem/contigmem.c | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/kernel/freebsd/contigmem/contigmem.c b/kernel/freebsd/contigmem/contigmem.c
index 64e0a7fec..abb76f241 100644
--- a/kernel/freebsd/contigmem/contigmem.c
+++ b/kernel/freebsd/contigmem/contigmem.c
@@ -165,9 +165,11 @@ contigmem_load()
error:
for (i = 0; i < contigmem_num_buffers; i++) {
- if (contigmem_buffers[i].addr != NULL)
+ if (contigmem_buffers[i].addr != NULL) {
contigfree(contigmem_buffers[i].addr,
contigmem_buffer_size, M_CONTIGMEM);
+ contigmem_buffers[i].addr = NULL;
+ }
if (mtx_initialized(&contigmem_buffers[i].mtx))
mtx_destroy(&contigmem_buffers[i].mtx);
}
--
2.20.1
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [dpdk-dev] [PATCH] contigmem: cleanup properly when load fails
2020-03-09 10:00 [dpdk-dev] [PATCH] contigmem: cleanup properly when load fails Jim Harris
@ 2020-03-10 9:31 ` Bruce Richardson
2020-03-19 12:54 ` David Marchand
2020-03-19 14:41 ` David Marchand
0 siblings, 2 replies; 5+ messages in thread
From: Bruce Richardson @ 2020-03-10 9:31 UTC (permalink / raw)
To: Jim Harris; +Cc: dev
On Mon, Mar 09, 2020 at 03:00:25AM -0700, Jim Harris wrote:
> If contigmem is not able to allocate all of the
> requested buffers, it frees whatever buffers were
> able to be allocated up until that point.
>
> But the pointers are not set to NULL in that case.
> After the load fails, the FreeBSD kernel will
> immediately call the contigmem unload handler, which
> tries to free the buffers again since the pointers
> were not set to NULL.
>
> It's not clear that we should just rely on the unload
> handler getting called after load failure. So let's
> keep the existing cleanup code in the load handler,
> but explicitly set the pointers to NULL after freeing
> them.
>
> Signed-off-by: Jim Harris <james.r.harris@intel.com>
> ---
Acked-by: Bruce Richardson <bruce.richardson@intel.com>
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [dpdk-dev] [PATCH] contigmem: cleanup properly when load fails
2020-03-10 9:31 ` Bruce Richardson
@ 2020-03-19 12:54 ` David Marchand
2020-03-19 13:52 ` Harris, James R
2020-03-19 14:41 ` David Marchand
1 sibling, 1 reply; 5+ messages in thread
From: David Marchand @ 2020-03-19 12:54 UTC (permalink / raw)
To: Jim Harris, Bruce Richardson; +Cc: dev
On Tue, Mar 10, 2020 at 10:32 AM Bruce Richardson
<bruce.richardson@intel.com> wrote:
>
> On Mon, Mar 09, 2020 at 03:00:25AM -0700, Jim Harris wrote:
> > If contigmem is not able to allocate all of the
> > requested buffers, it frees whatever buffers were
> > able to be allocated up until that point.
> >
> > But the pointers are not set to NULL in that case.
> > After the load fails, the FreeBSD kernel will
> > immediately call the contigmem unload handler, which
> > tries to free the buffers again since the pointers
> > were not set to NULL.
> >
> > It's not clear that we should just rely on the unload
> > handler getting called after load failure. So let's
> > keep the existing cleanup code in the load handler,
> > but explicitly set the pointers to NULL after freeing
> > them.
Can you check this Fixes is correct?
Fixes: 5f51eca22489 ("contigmem: free allocated memory on error")
Cc: stable@dpdk.org
--
David Marchand
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [dpdk-dev] [PATCH] contigmem: cleanup properly when load fails
2020-03-19 12:54 ` David Marchand
@ 2020-03-19 13:52 ` Harris, James R
0 siblings, 0 replies; 5+ messages in thread
From: Harris, James R @ 2020-03-19 13:52 UTC (permalink / raw)
To: David Marchand, Richardson, Bruce; +Cc: dev
On 3/19/20, 5:54 AM, "David Marchand" <david.marchand@redhat.com> wrote:
On Tue, Mar 10, 2020 at 10:32 AM Bruce Richardson
<bruce.richardson@intel.com> wrote:
>
> On Mon, Mar 09, 2020 at 03:00:25AM -0700, Jim Harris wrote:
> > If contigmem is not able to allocate all of the
> > requested buffers, it frees whatever buffers were
> > able to be allocated up until that point.
> >
> > But the pointers are not set to NULL in that case.
> > After the load fails, the FreeBSD kernel will
> > immediately call the contigmem unload handler, which
> > tries to free the buffers again since the pointers
> > were not set to NULL.
> >
> > It's not clear that we should just rely on the unload
> > handler getting called after load failure. So let's
> > keep the existing cleanup code in the load handler,
> > but explicitly set the pointers to NULL after freeing
> > them.
Can you check this Fixes is correct?
Fixes: 5f51eca22489 ("contigmem: free allocated memory on error")
Cc: stable@dpdk.org
Yes - that's correct. Thanks!
-Jim
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [dpdk-dev] [PATCH] contigmem: cleanup properly when load fails
2020-03-10 9:31 ` Bruce Richardson
2020-03-19 12:54 ` David Marchand
@ 2020-03-19 14:41 ` David Marchand
1 sibling, 0 replies; 5+ messages in thread
From: David Marchand @ 2020-03-19 14:41 UTC (permalink / raw)
To: Jim Harris; +Cc: dev, Bruce Richardson
On Tue, Mar 10, 2020 at 10:32 AM Bruce Richardson
<bruce.richardson@intel.com> wrote:
>
> On Mon, Mar 09, 2020 at 03:00:25AM -0700, Jim Harris wrote:
> > If contigmem is not able to allocate all of the
> > requested buffers, it frees whatever buffers were
> > able to be allocated up until that point.
> >
> > But the pointers are not set to NULL in that case.
> > After the load fails, the FreeBSD kernel will
> > immediately call the contigmem unload handler, which
> > tries to free the buffers again since the pointers
> > were not set to NULL.
> >
> > It's not clear that we should just rely on the unload
> > handler getting called after load failure. So let's
> > keep the existing cleanup code in the load handler,
> > but explicitly set the pointers to NULL after freeing
> > them.
Fixes: 5f51eca22489 ("contigmem: free allocated memory on error")
Cc: stable@dpdk.org
> >
> > Signed-off-by: Jim Harris <james.r.harris@intel.com>
> > ---
> Acked-by: Bruce Richardson <bruce.richardson@intel.com>
>
Applied, thanks.
--
David Marchand
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2020-03-19 14:41 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-03-09 10:00 [dpdk-dev] [PATCH] contigmem: cleanup properly when load fails Jim Harris
2020-03-10 9:31 ` Bruce Richardson
2020-03-19 12:54 ` David Marchand
2020-03-19 13:52 ` Harris, James R
2020-03-19 14:41 ` David Marchand
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).