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-doc" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html