Messages in this thread | | | From | Avri Altman <> | Subject | RE: [PATCH] mmc: truncate quirks' oemid to 8 bits | Date | Thu, 26 Oct 2023 10:16:53 +0000 |
| |
> We now only capture 8 bits for oemid in card->cid.oemid, so quirks that > were filling up the full 16 bits up till now would no longer apply. > > Work around the problem by only checking for the bottom 8 bits when > checking if quirks should be applied > > Fixes: 84ee19bffc93 ("mmc: core: Capture correct oemid-bits for eMMC > cards") > Link: https://lkml.kernel.org/r/ZToJsSLHr8RnuTHz@codewreck.org > Signed-off-by: Dominique Martinet <dominique.martinet@atmark- > techno.com> > Cc: stable@vger.kernel.org > Cc: Avri Altman <avri.altman@wdc.com> > Cc: Ulf Hansson <ulf.hansson@linaro.org> > Cc: Alex Fetters <Alex.Fetters@garmin.com> Reviewed-by: Avri Altman <avri.altman@wdc.com>
> --- > Notes: > - mmc_fixup_device() was rewritten in 5.17, so older stable kernels > will need a separate patch... I suppose I can send it to stable > after this is merged if we go this way > - struct mmc_cid's and mmc_fixup's oemid fields are unsigned shorts, > we probably just want to make them unsigned char instead in which > case we don't need that check anymore? > But it's kind of nice to have a wider type so CID_OEMID_ANY can never > be a match.... Which unfortunately my patch makes moot as > ((unsigned short)-1) & 0xff will be 0xff which can match anything... > - this could also be worked around in the _FIXUP_EXT macro that builds > the fixup structs, but we're getting ugly here... Or we can just go > for the big boom and try to fix all MMC_FIXUP() users in tree and > call it a day, but that'll also be fun to backport. To me, your fix is clean, elegant and does the job. I would let the quirk owners to fix that hard-coded bogus oemid - should they choose to. I guess Sandisk would need to do that as well.
Thanks, Avri
> > drivers/mmc/core/quirks.h | 3 ++- > 1 file changed, 2 insertions(+), 1 deletion(-) > > diff --git a/drivers/mmc/core/quirks.h b/drivers/mmc/core/quirks.h > index 32b64b564fb1..27e0349e176d 100644 > --- a/drivers/mmc/core/quirks.h > +++ b/drivers/mmc/core/quirks.h > @@ -211,8 +211,9 @@ static inline void mmc_fixup_device(struct > mmc_card *card, > if (f->manfid != CID_MANFID_ANY && > f->manfid != card->cid.manfid) > continue; > + /* Only the bottom 8bits are valid in JESD84-B51 */ > if (f->oemid != CID_OEMID_ANY && > - f->oemid != card->cid.oemid) > + (f->oemid & 0xff) != (card->cid.oemid & 0xff)) > continue; > if (f->name != CID_NAME_ANY && > strncmp(f->name, card->cid.prod_name, > -- > 2.39.2 >
| |