Received: by 2002:a05:6a10:8c0a:0:0:0:0 with SMTP id go10csp1529796pxb; Thu, 28 Jan 2021 20:52:14 -0800 (PST) X-Google-Smtp-Source: ABdhPJz02ganfuJHy90hkZlaFufzsaNo5x5b2FfpFV1535Sr/oaRP5B/567nxqPnaiSNp9A6OkPk X-Received: by 2002:a17:906:fc18:: with SMTP id ov24mr2828818ejb.529.1611895934817; Thu, 28 Jan 2021 20:52:14 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1611895934; cv=none; d=google.com; s=arc-20160816; b=MUiqC1YUbvGoarJ7jMsDMPBt0GbJSHtFklL0abRQrpcB3vVlxf4YSsCt4JJ8R25vep xK7cRshqi6SsgXBcUQ02ttKYMeifL8HFOCrLZwjvJQ6T9rm2bhp9qx0dduAk1JTT/NM0 ggtkvSYZ5Tcht89XeTs5Rqw3VoOwIUVuYRV+dRsQcyY6yR6iIpG/P8KMdhhTBECCnHcu UU6ADnIv3G4Rm4RCdqPYmtM7NVWPV6lp3YyU6Mw63KRtKOU5omjQv6KNUrtUMPjJF1BH YXoGAYBUusN95HOhLLitaxzJ1nWhSvwEW2acolHxY2DvAqtsuOvXdmYo+Mie0IIK5XJX FqIA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:references:in-reply-to:message-id:date:subject :cc:to:from:dmarc-filter:sender:dkim-signature; bh=0hhdoccd5OveXcLp6Vz/dxy+em7zD5NFIwnpITENxBc=; b=WMGz9r6lDVCpFB89aJBiMLHQfKwFUTlTQs4OaFj3CthChrtfNHaSLn8y3L0VPxKmzO WRiqkfXdVq2C3CChVTenmJxZBgAxMsX3/Li/oPtA7RWbpIHrgbDg1c5W1c2dH7+FWtDm Fc/65XxsGlj3k7DvLezBYhfvMf2tJ5IA8zgXIE6doaOiXSYty36cHN2JAHrx1YrnBxZr CDuXR8imLVgjj3/B/CV3MuH7M94Urz9VlBlYpBmybQxAKo9kpSBjt8WVbAFBaqEWUEYs twZwmrUKp7lpT1WeWFNXrVaXa1QE5mPwHweVpn1somA1gqFju9O/dhiAA1pjzJMyNClB e56A== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@mg.codeaurora.org header.s=smtp header.b=IvqO6DwD; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id x12si4145413ejw.662.2021.01.28.20.51.50; Thu, 28 Jan 2021 20:52:14 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@mg.codeaurora.org header.s=smtp header.b=IvqO6DwD; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231931AbhA2Et3 (ORCPT + 99 others); Thu, 28 Jan 2021 23:49:29 -0500 Received: from a1.mail.mailgun.net ([198.61.254.60]:14374 "EHLO a1.mail.mailgun.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231863AbhA2Erz (ORCPT ); Thu, 28 Jan 2021 23:47:55 -0500 DKIM-Signature: a=rsa-sha256; v=1; c=relaxed/relaxed; d=mg.codeaurora.org; q=dns/txt; s=smtp; t=1611895656; h=References: In-Reply-To: Message-Id: Date: Subject: Cc: To: From: Sender; bh=0hhdoccd5OveXcLp6Vz/dxy+em7zD5NFIwnpITENxBc=; b=IvqO6DwDUZvxzBM7/nS9e8IKg+qCJZS0Ez5bTYiNTILaI4ul/gNkHtLcQvemD6EghynWF117 39xg4o8pOZHcGY1Ghkj3vtE8M3cKlLg+nAV1oUklOnxTBI4X9x8pZAs7FdWf2U3e1P8Kz6ea e9IoIt8m+uleOLnmODNDWkmOCgE= X-Mailgun-Sending-Ip: 198.61.254.60 X-Mailgun-Sid: WyI0MWYwYSIsICJsaW51eC1rZXJuZWxAdmdlci5rZXJuZWwub3JnIiwgImJlOWU0YSJd Received: from smtp.codeaurora.org (ec2-35-166-182-171.us-west-2.compute.amazonaws.com [35.166.182.171]) by smtp-out-n06.prod.us-west-2.postgun.com with SMTP id 6013933c83b274b0af651e95 (version=TLS1.2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256); Fri, 29 Jan 2021 04:46:52 GMT Sender: wcheng=codeaurora.org@mg.codeaurora.org Received: by smtp.codeaurora.org (Postfix, from userid 1001) id 925E4C43462; Fri, 29 Jan 2021 04:46:52 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-caf-mail-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-2.9 required=2.0 tests=ALL_TRUSTED,BAYES_00,SPF_FAIL, URIBL_BLOCKED autolearn=no autolearn_force=no version=3.4.0 Received: from wcheng-linux.qualcomm.com (i-global254.qualcomm.com [199.106.103.254]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-SHA256 (128/128 bits)) (No client certificate requested) (Authenticated sender: wcheng) by smtp.codeaurora.org (Postfix) with ESMTPSA id 570CEC433C6; Fri, 29 Jan 2021 04:46:51 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 smtp.codeaurora.org 570CEC433C6 Authentication-Results: aws-us-west-2-caf-mail-1.web.codeaurora.org; dmarc=none (p=none dis=none) header.from=codeaurora.org Authentication-Results: aws-us-west-2-caf-mail-1.web.codeaurora.org; spf=fail smtp.mailfrom=wcheng@codeaurora.org From: Wesley Cheng To: agross@kernel.org, bjorn.andersson@linaro.org, balbi@kernel.org, gregkh@linuxfoundation.org, robh+dt@kernel.org Cc: linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-usb@vger.kernel.org, Wesley Cheng Subject: [PATCH v7 2/5] usb: gadget: configfs: Check USB configuration before adding Date: Thu, 28 Jan 2021 20:46:41 -0800 Message-Id: <1611895604-4496-3-git-send-email-wcheng@codeaurora.org> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1611895604-4496-1-git-send-email-wcheng@codeaurora.org> References: <1611895604-4496-1-git-send-email-wcheng@codeaurora.org> Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Ensure that the USB gadget is able to support the configuration being added based on the number of endpoints required from all interfaces. This is for accounting for any bandwidth or space limitations. Signed-off-by: Wesley Cheng --- drivers/usb/gadget/configfs.c | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/drivers/usb/gadget/configfs.c b/drivers/usb/gadget/configfs.c index 0d56f33..e6de3ca5 100644 --- a/drivers/usb/gadget/configfs.c +++ b/drivers/usb/gadget/configfs.c @@ -1368,6 +1368,7 @@ static int configfs_composite_bind(struct usb_gadget *gadget, struct usb_function *f; struct usb_function *tmp; struct gadget_config_name *cn; + unsigned long ep_map = 0; if (gadget_is_otg(gadget)) c->descriptors = otg_desc; @@ -1397,7 +1398,28 @@ static int configfs_composite_bind(struct usb_gadget *gadget, list_add(&f->list, &cfg->func_list); goto err_purge_funcs; } + if (f->fs_descriptors) { + struct usb_descriptor_header **d; + + d = f->fs_descriptors; + for (; *d; ++d) { + struct usb_endpoint_descriptor *ep; + int addr; + + if ((*d)->bDescriptorType != USB_DT_ENDPOINT) + continue; + + ep = (struct usb_endpoint_descriptor *)*d; + addr = ((ep->bEndpointAddress & 0x80) >> 3) | + (ep->bEndpointAddress & 0x0f); + set_bit(addr, &ep_map); + } + } } + ret = usb_gadget_check_config(cdev->gadget, ep_map); + if (ret) + goto err_purge_funcs; + usb_ep_autoconfig_reset(cdev->gadget); } if (cdev->use_os_string) { -- The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum, a Linux Foundation Collaborative Project