From: "ira.weiny" <ira.weiny-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
To: Jinpu Wang <jinpu.wang-EIkl63zCoXaH+58JC4qpiA@public.gmane.org>
Cc: Mark Bloch <markb-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>,
Doug Ledford <dledford-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>,
"Hefty,
Sean" <sean.hefty-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>,
Hal Rosenstock
<hal.rosenstock-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>,
"linux-rdma-u79uwXL29TY76Z2rM5mHXA@public.gmane.org"
<linux-rdma-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>,
Michael Wang <yun.wang-EIkl63zCoXaH+58JC4qpiA@public.gmane.org>,
Jason Gunthorpe
<jgunthorpe-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>
Subject: Re: [PATCH 1/4] IB/core: add port state cache
Date: Thu, 15 Dec 2016 18:17:24 -0500 [thread overview]
Message-ID: <20161215231723.GA3785@phlsvsds.ph.intel.com> (raw)
In-Reply-To: <CAMGffEnjVjEEFM8+vFKZMvyFwgaUjp03Opo42V+OsQHN8Fz5BA-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
On Mon, Dec 12, 2016 at 01:31:11PM +0100, Jinpu Wang wrote:
> On Mon, Dec 12, 2016 at 1:11 PM, Mark Bloch <markb-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org> wrote:
> > Hi,
> >
> > On 12/12/2016 1:43 PM, Jinpu Wang wrote:
> >> From fc80c1730d94a38934c5c60f9b9561745723dfd9 Mon Sep 17 00:00:00 2001
> >> From: Jack Wang <jinpu.wang-EIkl63zCoXaH+58JC4qpiA@public.gmane.org>
> >> Date: Mon, 12 Dec 2016 09:52:42 +0100
> >> Subject: [PATCH 1/4] IB/core: add port state cache
> >>
> >> We need a port state cache in ib_core, later we will use in rdma_cm.
> >>
> >> Signed-off-by: Jack Wang <jinpu.wang-EIkl63zCoXaH+58JC4qpiA@public.gmane.org>
> >> Reviewed-by: Michael Wang <yun.wang-EIkl63zCoXaH+58JC4qpiA@public.gmane.org>
> >> ---
> >> drivers/infiniband/core/cache.c | 9 ++++++++-
> >> include/rdma/ib_verbs.h | 1 +
> >> 2 files changed, 9 insertions(+), 1 deletion(-)
> >>
> >> diff --git a/drivers/infiniband/core/cache.c b/drivers/infiniband/core/cache.c
> >> index 1a2984c..025db27 100644
> >> --- a/drivers/infiniband/core/cache.c
> >> +++ b/drivers/infiniband/core/cache.c
> >> @@ -1109,6 +1109,8 @@ static void ib_cache_update(struct ib_device *device,
> >> }
> >>
> >> device->cache.lmc_cache[port - rdma_start_port(device)] = tprops->lmc;
> >> + device->cache.port_state_cache[port - rdma_start_port(device)] =
> >> + tprops->state;
> >>
> >> write_unlock_irq(&device->cache.lock);
> >>
> >> @@ -1168,7 +1170,11 @@ int ib_cache_setup_one(struct ib_device *device)
> >> (rdma_end_port(device) -
> >> rdma_start_port(device) + 1),
> >> GFP_KERNEL);
> >> - if (!device->cache.pkey_cache ||
> >> + device->cache.port_state_cache = kmalloc(sizeof
> >> *device->cache.port_state_cache *
> >> + (rdma_end_port(device) -
> >> + rdma_start_port(device) + 1),
> >> + GFP_KERNEL);
> >> + if (!device->cache.pkey_cache || !device->cache.port_state_cache ||
> > Looking at the code, I see we can leak memory here.
> > if pkey_cache is allocated but lms_cache is not, we will return without freeing pkey_cache (or the other way around)
> > your code adds port_state_cache to the mix but with the same issue.
> > I guess that should be fixed.
> >
> Hi Mark,
>
> Not really. The release was done by ib_dealloc_device() when put the
> last ref of kobj,
> dev_release -> ib_device_release -> ib_cache_release_one, driver was supposed
> to use it to destroy the device when register failed.
This is really odd though.
Ira
>
> Cheers,
> Jinpu
>
> >> !device->cache.lmc_cache) {
> >> pr_warn("Couldn't allocate cache for %s\n", device->name);
> >> return -ENOMEM;
> >> @@ -1213,6 +1219,7 @@ void ib_cache_release_one(struct ib_device *device)
> >> gid_table_release_one(device);
> >> kfree(device->cache.pkey_cache);
> >> kfree(device->cache.lmc_cache);
> >> + kfree(device->cache.port_state_cache);
> >> }
> >>
> >> void ib_cache_cleanup_one(struct ib_device *device)
> >> diff --git a/include/rdma/ib_verbs.h b/include/rdma/ib_verbs.h
> >> index 5ad43a4..a167ae0 100644
> >> --- a/include/rdma/ib_verbs.h
> >> +++ b/include/rdma/ib_verbs.h
> >> @@ -1761,6 +1761,7 @@ struct ib_cache {
> >> struct ib_pkey_cache **pkey_cache;
> >> struct ib_gid_table **gid_cache;
> >> u8 *lmc_cache;
> >> + enum ib_port_state *port_state_cache;
> >> };
> >>
> >> struct ib_dma_mapping_ops {
> >>
> >
> > Mark.
>
>
>
> --
> Jinpu Wang
> Linux Kernel Developer
>
> ProfitBricks GmbH
> Greifswalder Str. 207
> D - 10405 Berlin
>
> Tel: +49 30 577 008 042
> Fax: +49 30 577 008 299
> Email: jinpu.wang-EIkl63zCoXaH+58JC4qpiA@public.gmane.org
> URL: https://www.profitbricks.de
>
> Sitz der Gesellschaft: Berlin
> Registergericht: Amtsgericht Charlottenburg, HRB 125506 B
> Geschäftsführer: Achim Weiss
> --
> To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
> the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
next prev parent reply other threads:[~2016-12-15 23:17 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-12-12 11:43 [PATCH 1/4] IB/core: add port state cache Jinpu Wang
[not found] ` <CAMGffE=gytHRs+SVOmNPCkWX6tZ9hkeFznqeQQs-TFJMMJi97g-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2016-12-12 12:11 ` Mark Bloch
[not found] ` <6b60d6b1-96ce-3710-7716-0df4b1895c44-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>
2016-12-12 12:31 ` Jinpu Wang
[not found] ` <CAMGffEnjVjEEFM8+vFKZMvyFwgaUjp03Opo42V+OsQHN8Fz5BA-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2016-12-15 23:17 ` ira.weiny [this message]
[not found] ` <20161215231723.GA3785-W4f6Xiosr+yv7QzWx2u06xL4W9x8LtSr@public.gmane.org>
2016-12-19 9:00 ` Jinpu Wang
2017-01-13 3:16 ` Doug Ledford
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20161215231723.GA3785@phlsvsds.ph.intel.com \
--to=ira.weiny-ral2jqcrhueavxtiumwx3w@public.gmane.org \
--cc=dledford-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org \
--cc=hal.rosenstock-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org \
--cc=jgunthorpe-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org \
--cc=jinpu.wang-EIkl63zCoXaH+58JC4qpiA@public.gmane.org \
--cc=linux-rdma-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=markb-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org \
--cc=sean.hefty-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org \
--cc=yun.wang-EIkl63zCoXaH+58JC4qpiA@public.gmane.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox