On Wed, Feb 12, 2025, Andy Shevchenko wrote: > On Wed, Feb 12, 2025 at 01:10:17AM +0000, Thinh Nguyen wrote: > > On Mon, Feb 03, 2025, Andy Shevchenko wrote: > > > The snps,reserved-endpoints property lists the reserved endpoints > > > that shouldn't be used for normal transfers. Add support for that > > > to the driver. > > > > While at it, make sure we don't crash by a sudden access to those > > > endpoints in the gadget driver. > > ^^^ (1) > > ... > > > > /* Reset resource allocation flags */ > > > - for (i = resource_index; i < dwc->num_eps && dwc->eps[i]; i++) > > > - dwc->eps[i]->flags &= ~DWC3_EP_RESOURCE_ALLOCATED; > > > + for (i = resource_index; i < dwc->num_eps; i++) { > > > + dep = dwc->eps[i]; > > > + if (!dep) > > > + continue; > > > + > > > + dep->flags &= ~DWC3_EP_RESOURCE_ALLOCATED; > > > + } > > > > Please keep code refactoring as a separate patch. > > It's induced by the change you asked for, it's not a simple refactoring. > > Or do you want me to have the patch to check eps against NULL to be separated > from this one (see (1) above)? The condition "i < dwc->num && dwc->eps[i]" already does the NULL check. The change here only move things around. > > > > > > > return 0; > > ... > > > > +static int dwc3_gadget_parse_reserved_endpoints(struct dwc3 *dwc, const char *propname, > > > + u8 *eps, u8 num) > > > +{ > > > + u8 count; > > > + int ret; > > > + > > > + if (!device_property_present(dwc->dev, propname)) > > > + return 0; > > > + > > > + ret = device_property_count_u8(dwc->dev, propname); > > > + if (ret < 0) > > > + return ret; > > > + count = ret; > > > + > > > + ret = device_property_read_u8_array(dwc->dev, propname, eps, min(num, count)); > > > > Why do min(num, count)? Can we just put the size of the eps array as > > specified by the function doc. > > No, we can't ask more than there is. The call will fail in such a case. > In case you wonder, the similar OF call also behaves in the same way. Yeah, I realized that right after I wrote the comment and responded after. BR, Thinh