On Wed, Apr 13, 2022 at 11:38 AM Ben Widawsky <[email protected]> wrote: > > Endpoint decoder enumeration is the only way in which we can determine > Device Physical Address (DPA) -> Host Physical Address (HPA) mappings. > Information is obtained only when the register state can be read > sequentially. If when enumerating the decoders a failure occurs, all > other decoders must also fail since the decoders can no longer be > accurately managed (unless it's the last decoder in which case it can > still work).
I think this should be expanded to fail if any decoder fails to allocate anywhere in the topology otherwise it leaves a mess for future address translation code to work through cases where decoder information is missing. The current approach is based around the current expectation that nothing is enumerating pre-existing regions, and nothing is performing address translation. > > Signed-off-by: Ben Widawsky <[email protected]> > --- > drivers/cxl/core/hdm.c | 2 ++ > 1 file changed, 2 insertions(+) > > diff --git a/drivers/cxl/core/hdm.c b/drivers/cxl/core/hdm.c > index bfc8ee876278..c3c021b54079 100644 > --- a/drivers/cxl/core/hdm.c > +++ b/drivers/cxl/core/hdm.c > @@ -255,6 +255,8 @@ int devm_cxl_enumerate_decoders(struct cxl_hdm *cxlhdm) > cxlhdm->regs.hdm_decoder, i); > if (rc) { > put_device(&cxld->dev); > + if (is_endpoint_decoder(&cxld->dev)) > + return rc; > failed++; > continue; > } > -- > 2.35.1 >
