Hi Ruslan,

Thank you for the patch! Perhaps something to improve:

[auto build test WARNING on balbi-usb/next]
[also build test WARNING on v4.14-rc8 next-20171107]
[if your patch is applied to the wrong git tree, please drop us a note to help 
improve the system]

url:    
https://github.com/0day-ci/linux/commits/Ruslan-Bilovol/usb-gadget-add-USB-Audio-Device-Class-3-0-gadget-support/20171107-175202
base:   https://git.kernel.org/pub/scm/linux/kernel/git/balbi/usb.git next


coccinelle warnings: (new ones prefixed by >>)

>> drivers/usb/gadget/function/f_uac3.c:766:2-9: alloc with no test, possible 
>> model on line 780

vim +766 drivers/usb/gadget/function/f_uac3.c

   722  
   723  static int f_audio_bind(struct usb_configuration *cfg, struct 
usb_function *fn)
   724  {
   725          struct f_uac3 *uac3 = func_to_uac3(fn);
   726          struct g_audio *audio = func_to_g_audio(fn);
   727          struct usb_composite_dev *cdev = cfg->cdev;
   728          struct usb_gadget *gadget = cdev->gadget;
   729          struct device *dev = &gadget->dev;
   730          struct f_uac3_opts *uac3_opts;
   731          struct uac3_hc_descriptor_header *cluster_desc;
   732          struct uac3_hc_desc *hc_desc;
   733          struct usb_string *us;
   734          u16 hc_desc_id = 1; /* HC id always starts from 1 */
   735          int ret;
   736  
   737          uac3_opts = container_of(fn->fi, struct f_uac3_opts, func_inst);
   738  
   739          us = usb_gstrings_attach(cdev, fn_strings, 
ARRAY_SIZE(strings_fn));
   740          if (IS_ERR(us))
   741                  return PTR_ERR(us);
   742  
   743          iad_desc.iFunction = us[STR_ASSOC].id;
   744          std_ac_if_desc.iInterface = us[STR_IF_CTRL].id;
   745          std_as_out_if0_desc.iInterface = us[STR_AS_OUT_ALT0].id;
   746          std_as_out_if1_desc.iInterface = us[STR_AS_OUT_ALT1].id;
   747          std_as_in_if0_desc.iInterface = us[STR_AS_IN_ALT0].id;
   748          std_as_in_if1_desc.iInterface = us[STR_AS_IN_ALT1].id;
   749  
   750          INIT_LIST_HEAD(&uac3->hc_desc_list);
   751  
   752          /* Initialize the configurable parameters */
   753          cluster_desc = build_cluster_descriptor(uac3_opts, 0); /* 
capture */
   754          if (cluster_desc) {
   755                  hc_desc = kzalloc(sizeof *hc_desc, GFP_KERNEL);
   756                  hc_desc->hc_header = cluster_desc;
   757                  list_add(&hc_desc->list, &uac3->hc_desc_list);
   758                  cluster_desc->wDescriptorID = cpu_to_le16(hc_desc_id);
   759                  usb_out_it_desc.wClusterDescrID = 
cluster_desc->wDescriptorID;
   760                  as_out_hdr_desc.wClusterDescrID = 
cluster_desc->wDescriptorID;
   761                  hc_desc_id++;
   762          }
   763  
   764          cluster_desc = build_cluster_descriptor(uac3_opts, 1); /* 
playback */
   765          if (cluster_desc) {
 > 766                  hc_desc = kzalloc(sizeof *hc_desc, GFP_KERNEL);
   767                  hc_desc->hc_header = cluster_desc;
   768                  list_add(&hc_desc->list, &uac3->hc_desc_list);
   769                  cluster_desc->wDescriptorID = cpu_to_le16(hc_desc_id);
   770                  io_in_it_desc.wClusterDescrID = 
cluster_desc->wDescriptorID;
   771                  as_in_hdr_desc.wClusterDescrID = 
cluster_desc->wDescriptorID;
   772          }
   773  
   774          as_out_hdr_desc.bSubslotSize = uac3_opts->c_ssize;
   775          as_out_hdr_desc.bBitResolution = uac3_opts->c_ssize * 8;
   776          as_in_hdr_desc.bSubslotSize = uac3_opts->p_ssize;
   777          as_in_hdr_desc.bBitResolution = uac3_opts->p_ssize * 8;
   778  
   779          /* alloc and configure Feature Unit descriptors */
 > 780          usb_out_fu_desc = 
 > alloc_fu_desc(num_channels(uac3_opts->c_chmask),
   781                                          USB_OUT_FU_ID,
   782                                          USB_OUT_IT_ID);
   783          if (!usb_out_fu_desc) {
   784                  dev_err(dev, "%s: can't allocate OUT FU descriptor on 
%s\n",
   785                                   fn->name, gadget->name);
   786                  ret = -ENOMEM;
   787                  goto err_free_hc_desc;
   788          }
   789  
   790          usb_in_fu_desc = 
alloc_fu_desc(num_channels(uac3_opts->p_chmask),
   791                                          USB_IN_FU_ID,
   792                                          IO_IN_IT_ID);
   793          if (!usb_in_fu_desc) {
   794                  dev_err(dev, "%s: can't allocate IN FU descriptor on 
%s\n",
   795                                   fn->name, gadget->name);
   796                  ret = -ENOMEM;
   797                  goto err_free_out_fu_desc;
   798          }
   799  
   800          /* update AC desc size with allocated FUs */
   801          ac_hdr_desc.wTotalLength = cpu_to_le16(
   802                            sizeof in_clk_src_desc + sizeof 
out_clk_src_desc
   803                          + sizeof usb_out_it_desc + sizeof io_in_it_desc
   804                          + sizeof usb_in_ot_desc + sizeof io_out_ot_desc
   805                          + sizeof usb_in_pd_desc + sizeof usb_out_pd_desc
   806                          + usb_out_fu_desc->bLength + 
usb_in_fu_desc->bLength);
   807  
   808          ret = usb_interface_id(cfg, fn);
   809          if (ret < 0) {
   810                  dev_err(dev, "%s: can't allocate AC interface id on 
%s\n",
   811                                   fn->name, gadget->name);
   812                  goto err_free_in_fu_desc;
   813          }
   814          std_ac_if_desc.bInterfaceNumber = ret;
   815          uac3->ac_intf = ret;
   816          uac3->ac_alt = 0;
   817  
   818          ret = usb_interface_id(cfg, fn);
   819          if (ret < 0) {
   820                  dev_err(dev, "%s: can't allocate AS OUT interface id on 
%s\n",
   821                                   fn->name, gadget->name);
   822                  goto err_free_in_fu_desc;
   823          }
   824          std_as_out_if0_desc.bInterfaceNumber = ret;
   825          std_as_out_if1_desc.bInterfaceNumber = ret;
   826          uac3->as_out_intf = ret;
   827          uac3->as_out_alt = 0;
   828  
   829          ret = usb_interface_id(cfg, fn);
   830          if (ret < 0) {
   831                  dev_err(dev, "%s: can't allocate AS IN interface id on 
%s\n",
   832                                   fn->name, gadget->name);
   833                  goto err_free_in_fu_desc;
   834          }
   835          std_as_in_if0_desc.bInterfaceNumber = ret;
   836          std_as_in_if1_desc.bInterfaceNumber = ret;
   837          uac3->as_in_intf = ret;
   838          uac3->as_in_alt = 0;
   839  
   840          /* Calculate wMaxPacketSize according to audio bandwidth */
   841          set_ep_max_packet_size(uac3_opts, &fs_epin_desc, 1000, true);
   842          set_ep_max_packet_size(uac3_opts, &fs_epout_desc, 1000, false);
   843          set_ep_max_packet_size(uac3_opts, &hs_epin_desc, 8000, true);
   844          set_ep_max_packet_size(uac3_opts, &hs_epout_desc, 8000, false);
   845  
   846          audio->out_ep = usb_ep_autoconfig(gadget, &fs_epout_desc);
   847          if (!audio->out_ep) {
   848                  dev_err(dev, "%s: can't autoconfigure on %s\n",
   849                                   fn->name, gadget->name);
   850                  ret = -ENODEV;
   851                  goto err_free_in_fu_desc;
   852          }
   853  
   854          audio->in_ep = usb_ep_autoconfig(gadget, &fs_epin_desc);
   855          if (!audio->in_ep) {
   856                  dev_err(dev, "%s: can't autoconfigure on %s\n",
   857                                   fn->name, gadget->name);
   858                  ret = -ENODEV;
   859                  goto err_free_in_fu_desc;
   860          }
   861  
   862          audio->in_ep_maxpsize = max_t(u16,
   863                                  
le16_to_cpu(fs_epin_desc.wMaxPacketSize),
   864                                  
le16_to_cpu(hs_epin_desc.wMaxPacketSize));
   865          audio->out_ep_maxpsize = max_t(u16,
   866                                  
le16_to_cpu(fs_epout_desc.wMaxPacketSize),
   867                                  
le16_to_cpu(hs_epout_desc.wMaxPacketSize));
   868  
   869          hs_epout_desc.bEndpointAddress = fs_epout_desc.bEndpointAddress;
   870          hs_epin_desc.bEndpointAddress = fs_epin_desc.bEndpointAddress;
   871  
   872          /* Copy descriptors */
   873          fn->fs_descriptors = uac3_copy_descriptors(USB_SPEED_FULL);
   874          if (!fn->fs_descriptors)
   875                  goto err_free_in_fu_desc;
   876          if (gadget_is_dualspeed(gadget)) {
   877                  fn->hs_descriptors = 
uac3_copy_descriptors(USB_SPEED_HIGH);
   878                  if (!fn->hs_descriptors)
   879                          goto err_free_in_fu_desc;
   880          }
   881  
   882          audio->gadget = gadget;
   883  
   884          audio->params.p_chmask = uac3_opts->p_chmask;
   885          audio->params.p_srate = uac3_opts->p_srate;
   886          audio->params.p_ssize = uac3_opts->p_ssize;
   887          audio->params.c_chmask = uac3_opts->c_chmask;
   888          audio->params.c_srate = uac3_opts->c_srate;
   889          audio->params.c_ssize = uac3_opts->c_ssize;
   890          audio->params.req_number = uac3_opts->req_number;
   891          ret = g_audio_setup(audio, "UAC3 PCM", "UAC3_Gadget");
   892          if (ret)
   893                  goto err_free_descs;
   894          return 0;
   895  
   896  err_free_descs:
   897          usb_free_all_descriptors(fn);
   898          audio->gadget = NULL;
   899  err_free_in_fu_desc:
   900          kfree(usb_in_fu_desc);
   901          usb_in_fu_desc = NULL;
   902  err_free_out_fu_desc:
   903          kfree(usb_out_fu_desc);
   904          usb_out_fu_desc = NULL;
   905  err_free_hc_desc:
   906          list_for_each_entry(hc_desc, &uac3->hc_desc_list, list)
   907                  kfree(hc_desc);
   908  
   909          return ret;
   910  }
   911  

---
0-DAY kernel test infrastructure                Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all                   Intel Corporation
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to