[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <6635366717079_e1f582941d@iweiny-mobl.notmuch>
Date: Fri, 3 May 2024 12:09:27 -0700
From: Ira Weiny <ira.weiny@...el.com>
To: Alison Schofield <alison.schofield@...el.com>, Ira Weiny
<ira.weiny@...el.com>
CC: Dave Jiang <dave.jiang@...el.com>, Fan Ni <fan.ni@...sung.com>, "Jonathan
Cameron" <Jonathan.Cameron@...wei.com>, Navneet Singh
<navneet.singh@...el.com>, Dan Williams <dan.j.williams@...el.com>, Davidlohr
Bueso <dave@...olabs.net>, Vishal Verma <vishal.l.verma@...el.com>,
<linux-btrfs@...r.kernel.org>, <linux-cxl@...r.kernel.org>,
<linux-kernel@...r.kernel.org>
Subject: Re: [PATCH 05/26] cxl/core: Simplify cxl_dpa_set_mode()
Alison Schofield wrote:
> On Sun, Mar 24, 2024 at 04:18:08PM -0700, Ira Weiny wrote:
> > cxl_dpa_set_mode() checks the mode for validity two times, once outside
> > of the DPA RW semaphore and again within.
>
> Not true.
Sorry for not being clear. It does check the mode 2x but not for
validity. I'll clarify.
> It only checks mode once before the lock. It checks for
> capacity after the lock. If it didn't check mode before the lock,
> then unsupported modes would fall through.
But we can check the mode 1 time and either check the size or fail.
>
> > The function is not in a critical path.
>
> Implying what here? OK to check twice (even though it wasn't)
> or OK to expand scope of locking.
Implying that checking the mode outside the lock is not required.
>
> > Prior to Dynamic Capacity the extra check was not much
> > of an issue. The addition of DC modes increases the complexity of
> > the check.
> >
> > Simplify the mode check before adding the more complex DC modes.
> >
>
> The addition of the DC mode check doesn't seem complex.
It is if you have to check it 2 times.
>
> Pardon my picking at the words, but if you'd like to refactor the
> function, just say so. The final result is a bit more readable, but
> also adding the DC mode checks without refactoring would read fine
> also.
When I added the DC mode to this function without this refactoring it was
quite a bit more code and ugly IMO. So this cleanup helped. If I were
not adding the DC code there would be much less reason to change this
function.
[snip]
> > diff --git a/drivers/cxl/core/hdm.c b/drivers/cxl/core/hdm.c
> > index 7d97790b893d..66b8419fd0c3 100644
> > --- a/drivers/cxl/core/hdm.c
> > +++ b/drivers/cxl/core/hdm.c
> > @@ -411,44 +411,35 @@ int cxl_dpa_set_mode(struct cxl_endpoint_decoder *cxled,
> > struct cxl_memdev *cxlmd = cxled_to_memdev(cxled);
> > struct cxl_dev_state *cxlds = cxlmd->cxlds;
> > struct device *dev = &cxled->cxld.dev;
> > - int rc;
> >
> > + guard(rwsem_write)(&cxl_dpa_rwsem);
> > + if (cxled->cxld.flags & CXL_DECODER_F_ENABLE)
> > + return -EBUSY;
> > +
> > + /*
> > + * Check that the mode is supported by the current partition
> > + * configuration
> > + */
> > switch (mode) {
> > case CXL_DECODER_RAM:
> > + if (!resource_size(&cxlds->ram_res)) {
> > + dev_dbg(dev, "no available ram capacity\n");
> > + return -ENXIO;
> > + }
> > + break;
> > case CXL_DECODER_PMEM:
> > + if (!resource_size(&cxlds->pmem_res)) {
> > + dev_dbg(dev, "no available pmem capacity\n");
> > + return -ENXIO;
> > + }
> > break;
> > default:
> > dev_dbg(dev, "unsupported mode: %d\n", mode);
> > return -EINVAL;
> > }
> >
>
> delete extra line
You don't like the space following the switch?
Ira
Powered by blists - more mailing lists