RE: RE: [PATCH v22 3/4] scsi: ufs: Prepare HPB read for cached sub-region
From: Daejun Park
Date: Tue Feb 23 2021 - 19:23:50 EST
> > +static int ufshpb_fill_ppn_from_page(struct ufshpb_lu *hpb,
> > + struct ufshpb_map_ctx *mctx, int pos,
> > + int len, u64 *ppn_buf)
> > +{
> > + struct page *page;
> > + int index, offset;
> > + int copied;
> > +
> > + index = pos / (PAGE_SIZE / HPB_ENTRY_SIZE);
> > + offset = pos % (PAGE_SIZE / HPB_ENTRY_SIZE);
> Maybe cache hpb->entries_per_page in ufshpb_lu_parameter_init as well?
They are just defined constants and complier will optimize them.
Thanks,
Daejun
> > +
> > + if ((offset + len) <= (PAGE_SIZE / HPB_ENTRY_SIZE))
> > + copied = len;
> > + else
> > + copied = (PAGE_SIZE / HPB_ENTRY_SIZE) - offset;
> > +
> > + page = mctx->m_page[index];
> > + if (unlikely(!page)) {
> > + dev_err(&hpb->sdev_ufs_lu->sdev_dev,
> > + "error. cannot find page in mctx\n");
> > + return -ENOMEM;
> > + }
> > +
> > + memcpy(ppn_buf, page_address(page) + (offset * HPB_ENTRY_SIZE),
> > + copied * HPB_ENTRY_SIZE);
> > +
> > + return copied;
> > +}
>
>
>