Re: [PATCH for-next v6 10/12] RDMA/efa: Add EFA verbs implementation

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Mon, May 06, 2019 at 09:38:56AM +0300, Gal Pressman wrote:
> On 05-May-19 15:35, Jason Gunthorpe wrote:
> > On Sun, May 05, 2019 at 11:13:01AM +0300, Gal Pressman wrote:
> >> On 03-May-19 15:19, Jason Gunthorpe wrote:
> >>> On Fri, May 03, 2019 at 12:53:55PM +0300, Gal Pressman wrote:
> >>>> On 02-May-19 21:14, Jason Gunthorpe wrote:
> >>>>> On Wed, May 01, 2019 at 01:48:22PM +0300, Gal Pressman wrote:
> >>>>>
> >>>>>> +/* create a page buffer list from a mapped user memory region */
> >>>>>> +static int pbl_create(struct efa_dev *dev,
> >>>>>> +		      struct pbl_context *pbl,
> >>>>>> +		      struct ib_umem *umem,
> >>>>>> +		      int hp_cnt,
> >>>>>> +		      u8 hp_shift)
> >>>>>> +{
> >>>>>> +	int err;
> >>>>>> +
> >>>>>> +	pbl->pbl_buf_size_in_bytes = hp_cnt * EFA_CHUNK_PAYLOAD_PTR_SIZE;
> >>>>>> +	pbl->pbl_buf = kzalloc(pbl->pbl_buf_size_in_bytes,
> >>>>>> +			       GFP_KERNEL | __GFP_NOWARN);
> >>>>>> +	if (pbl->pbl_buf) {
> >>>>>> +		pbl->physically_continuous = 1;
> >>>>>> +		err = umem_to_page_list(dev, umem, pbl->pbl_buf, hp_cnt,
> >>>>>> +					hp_shift);
> >>>>>> +		if (err)
> >>>>>> +			goto err_continuous;
> >>>>>> +		err = pbl_continuous_initialize(dev, pbl);
> >>>>>> +		if (err)
> >>>>>> +			goto err_continuous;
> >>>>>> +	} else {
> >>>>>> +		pbl->physically_continuous = 0;
> >>>>>> +		pbl->pbl_buf = vzalloc(pbl->pbl_buf_size_in_bytes);
> >>>>>> +		if (!pbl->pbl_buf)
> >>>>>> +			return -ENOMEM;
> >>>>>
> >>>>> This way to fallback seems ugly, I think you should just call kvzalloc
> >>>>> and check for continuity during the umem_to_page_list
> >>>>
> >>>> I've considered using kvzalloc, but it doesn't really fit this use case.
> >>>
> >>> It does, you just check for continuity when building the pbl instead
> >>> of assuming it based on how it was created. It isn't hard, and drivers
> >>> shouldn't abuse APIs like this
> >>
> >> This is by no means abusing the API..
> > 
> > It is, vzalloc isn't just kzalloc followed by vzalloc and you
> > shouldn't expec the two to be the same. Most likely the above has bad
> > behavior if it triggers reclaim.
> 
> Is it OK to call kvzalloc and test for is_vmalloc_addr?

Yes

Jason




[Index of Archives]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Photo]     [Yosemite News]     [Yosemite Photos]     [Linux Kernel]     [Linux SCSI]     [XFree86]

  Powered by Linux