From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932990AbdBVPGL (ORCPT ); Wed, 22 Feb 2017 10:06:11 -0500 Received: from mail-dm3nam03on0044.outbound.protection.outlook.com ([104.47.41.44]:52159 "EHLO NAM03-DM3-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S932703AbdBVPGB (ORCPT ); Wed, 22 Feb 2017 10:06:01 -0500 Authentication-Results: spf=pass (sender IP is 149.199.60.100) smtp.mailfrom=xilinx.com; vger.kernel.org; dkim=none (message not signed) header.d=none;vger.kernel.org; dmarc=bestguesspass action=none header.from=xilinx.com; From: Anurag Kumar Vulisha To: , CC: , , , , Anurag Kumar Vulisha Subject: [RFC PATCH] xhci: Use Cached ring during endpoint ring allocation Date: Wed, 22 Feb 2017 20:35:54 +0530 Message-ID: <1487775954-16258-1-git-send-email-anuragku@xilinx.com> X-Mailer: git-send-email 2.1.1 X-RCIS-Action: ALLOW X-TM-AS-Product-Ver: IMSS-7.1.0.1224-8.1.0.1062-22900.005 X-TM-AS-User-Approved-Sender: Yes;Yes X-EOPAttributedMessage: 0 X-MS-Office365-Filtering-HT: Tenant X-Forefront-Antispam-Report: CIP:149.199.60.100;IPV:NLI;CTRY:US;EFV:NLI;SFV:NSPM;SFS:(10009020)(6009001)(7916002)(39450400003)(39860400002)(39850400002)(39410400002)(39840400002)(2980300002)(438002)(199003)(189002)(9170700003)(50986999)(8936002)(54906002)(2906002)(42186005)(103686003)(63266004)(45336002)(8676002)(47776003)(4326007)(106466001)(90966002)(92566002)(107886003)(38730400002)(6266002)(5660300001)(50466002)(46386002)(305945005)(50226002)(189998001)(356003)(36386004)(52956003)(626004)(5003940100001)(36756003)(81166006)(33646002)(48376002)(107986001);DIR:OUT;SFP:1101;SCL:1;SRVR:BY2PR0201MB0758;H:xsj-pvapsmtpgw02;FPR:;SPF:Pass;MLV:nspm;A:1;MX:1;PTR:unknown-60-100.xilinx.com,xapps1.xilinx.com;LANG:en; X-Microsoft-Exchange-Diagnostics: 1;BL2NAM02FT007;1:cnAODO8V/iacq6tCvIcG1o7q0ptwrM7pywain8sm+Rwhi9Ob8aJLfFXtnK6axslN7h4w6VpUXJEvN7QRrVo6XN4ojHeqhDYsx6ItdeJMoNNAc43dhtnkhpp1/dAwpwaCe4/KcuOatyCSv9VOyjgSkH5tZzHzjyMugBc5fYTK8JEW7gb5yo9FBVyko2HWOpyFaWLiPMUyou5FYLKclqda63mTdwPHblN0XLUy2rXqPLOBarbREv9KumuUx05cZMxCIPukQ4dmSmqX1OLorNbuWj6G0uNA7QUiNaz+/lBdfMffdqivSOj62c9XXup1vP0N3idqiQuAEOe3nv/ZApW3iesRcc8T1ijTtZ49URI67lAk/cN4+zAYehj4qbdD4cUw9AZx+gKlIE4Ya1ylhxSoVTdpMK2H548XN96Vo2DFCHcgdP9zrk1bt2IKoDEhS8hkBucXvC+r9fIQk0zS5V4lF2XTexFZlU+9kLjph811YMMPfkGN7WZior0wwdQpHiezujAh3Sl+vtqr4zPRqdqE6Eb5AzLWrRM3A5bW7pQfZKkmzWHbUvqDzxLEB53nSnK0YTEbWxgi7V70Wt7jJ8c4KW1LOrXCt4+2J7QQ4BewVlZo2jmRjmBK8vutqxZSloHQ MIME-Version: 1.0 Content-Type: text/plain X-MS-Office365-Filtering-Correlation-Id: 532da965-7922-4902-d0c9-08d45b344f2b X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(22001)(8251501002);SRVR:BY2PR0201MB0758; X-Microsoft-Exchange-Diagnostics: 1;BY2PR0201MB0758;3:xT9zS5MkkuhPkyK3dJnRJp06WB5tW7uKbZMAQfzDsbUnU0ED4Pmot5IE/IigWCmWBNq8i23FTduqHNljoYpflYJTCelUpHDiYnCtA7Oo1CeYMOHZxP+JAnab6bXJGNmpzA3kMVgNUfdFfkcZd+niExTjRIlwfztQVgK7JD8L2RFlavJCh+1meew1is9Gj6EQy0ERT+RYpmHExNTLWixyU7XmIdDdtywTS7pQv3mfEuVItYtHXZZAwBfA54wb8PFqGIfkeYO1XirMR4xkv/nWUVDhhmSZ3lhPRN9xqoTjOistnvvYVkZThcgMBhzOxxe+/B9fD9QzbxUQVDFPDB693TJYuDVHS4o91OmmEDINuJKB5XA7jkNMi4ou75BIKNVfyMExwhAwij5YfjKYSEdqbw==;25:XyuaxBar5e/BhxYGCjYEmsdb5I9JHhoKtIlA4WyxDUGFnyespe/wRAn4mSyNfo84D5fiKKjmWBEEluprvf/SLpYogGkZ4uZPXOkrC9q2VBQkEIYbInSd4y3LnaLo7p/N+XBPDgUoy5OgmpI2kz5zcj2hva/Y2rYEkG229BjEnzE8Es9rP/F/4YRL7zZiwQsGQ06vbm80TS/dEVqX5Xp6vmEaBt0PfsdtpvxRKC6uBnZW8ZechW7Y9HEwbY4wtbbBqobCZ12dkRgkBv64gn11vqAgOStQI9H8bylQTjiZuniuMSPksfHXMnKtuqI85v1XNKwEaWlGrgpwbtAzYKG98m8zmcesLtpQP6ot1SnRnZTNSpQd07eqpOiCSkapBHMHQ3Ttht2fF/PuTMywoQajoJGeexIULP6IuBxo6MbApJgIw6lVX3mHehOEIAMfoaaPUjiblhmuJAOfq2qjv5HVQw== X-Microsoft-Exchange-Diagnostics: 1;BY2PR0201MB0758;31:m3qqyXgzDxvyhSKTY+Zkh7nhwFLnWjU47N1FgkI+z6Y5ZigYO6mMBzsgN5YXuTJBRZ0nELmgwpEi3sEsU9TK3gLTBKxHpdk9cgt49ny+QmirBVLPOk9znEqsHiGmCt4gmKU9BQfvAUj5AJdvxbDSYvoXww5Q1+qZvjKhJmHfIsVK7r5yXStZ7v7UgF5m/BlVnRkZodPYcaJefgT4ZDAmyBdTeWAyc9TQLjNvga1m4Sa21ah4humtIR1WmE/8EHTNY9Pnp9WSeknKHQfdmJyK+MBY4LaN8LE47pbg+1cCs4Q=;20:j4vUiyz8bke+yZrgfh5+W9N8252WKUH5I0XHQCcpvrVI495U2aAAbVR4H81kfVux4ARVf1+VZs4Bes5VO5OjVJG9/q4TuAQQwKcK9a17/bi2KPmBrwyjY6EsrrZac4fyJbwDXSQrTCgczN/a74JUzKgdl37xk29SummyO6MM+o6S+hvys5w+v0UOPbygwtl5ZnS3O4yi3n53g5IJHhW/1XPkN3mda7KEDD2VS0dKd6TJNhxhKIyPQu9CKKo9aUCvkvMNTzBw5HAAykSZ8husEXi7/FtS2TEj/kV3W2nlhoeFrcAfF/xHh1vwDFXD+jw/rQxlWD7/twyHubYxHiMRZSbWouZ8TS+ZCM6KJAlsabGgfxMlvE1hoDKjOuS1u/WVTSRLOm8warptTR+uWqbHC7yQuvfCpPuvdQwNZJFo6PQXvogXGdVu+Vdqlc6vDmuy+trGfr7NnTqAp1pWDvVQ2+2jGRhTHAWbX4Q7EKYiMylil9rAaj/kUTWKJlba6Zpc X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(192813158149592); X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(6040375)(601004)(2401047)(13018025)(8121501046)(5005006)(13017025)(13024025)(13015025)(13023025)(3002001)(10201501046)(6055026)(6041248)(20161123555025)(20161123562025)(20161123564025)(20161123560025)(20161123558025)(6072148);SRVR:BY2PR0201MB0758;BCL:0;PCL:0;RULEID:;SRVR:BY2PR0201MB0758; X-Microsoft-Exchange-Diagnostics: 1;BY2PR0201MB0758;4:tDPBuDgKm59D9GBWkU9QgNNhWywVtR5SJ9zU0Hwy2OtB5fM63Tfmebw2NDebsnL4b8jfRzEeI/1LdOOuKhO3RXJYao+xLJsuN3MMuYch0mocbM1sjZcuz5jCF2KH9lagsJv0QTCgyL0tbIVjcBLy+E466sp7Hs1qX1tdwz3wQX0XfV5KqPqz8sOF3xx16aCJZ+A7kjJek4300mVieESuKhV536vELdChnVH8oV9lykLPuztpSZ9l+/5HqKa7iKWbwxxaah1AgcZHjVXRnAtA1Uzbe1sXfTEw6lInuVqsFh/obaFAtvbfbmd0QtyhgIilBAyJCY9AqZJbADIUt49euKP4uw0+ljq2jLGqe9/Sj+cLr+PH0kF2+8UhKNsUTWCKQbyo7maRK+PSJdVtSHRtCorBGa2IjzVwagyLTHZB/LUzo3RvPUg1IetIuB2nJbWHngLTqpxJxMFnq0Pvshi8fJDeDfGUbyc2tJL42ORDvTQeQo6i2s8NV6PYCaurXZS/4LJooTZHB2g0ytqQmY6jckIHvN0D5ta1Q81bobfJKaUFwPXP42tux/Pysu/W2eR01dK/Vmqc83htagwaFHu6cwOCZ+K8+l1/dFpaKOrJ5r+Leeru4RmUcOGjC8A4SMrQdOr8WOvt9GBI4eebJQD9tavIZcyC8+Jx5O/c4QqKwSWTIFDAbNV9oNTtxcs51WKlk1pamdaP8W9K3zViMYkO2FGVYntpPwRUmym2g7V0Se4xWNLblOTABY/kkH0Tu0fTprlVyCBhV0OG0roIOGhn7A== X-Forefront-PRVS: 022649CC2C X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;BY2PR0201MB0758;23:DU+qb/EjyigcjSQU+kr8ZzbUYBBWrLZU0Fx869v?= =?us-ascii?Q?I3TH+hpwlJ6KffhtIPjbHyhXFJjk1iLYrbMUFQHIbABl4t20UwdNmHUwQWbN?= =?us-ascii?Q?UHHdiUPqtNPXzebhMrwAPYCtf4FJM811wP15gw57j/HjDmQtBPW1Re6NVHLr?= =?us-ascii?Q?gjUPEYCeqMh3Mxs/FVxsvOoBkHlqSa4oJLOYMYXT704zE7kFgGgYNxa2YdCs?= =?us-ascii?Q?ZZOpxXtzJ6gx8qoRg+OiPo/ZFvm2YD7Y7kYMsKsEtd9b6IKbDb5+8R7pZkCt?= =?us-ascii?Q?C3NW4EvjhD29Iu6n0xDT2OprCjJRpFgZAyxceOr3VbqEmonPSHEutyTaN6oE?= =?us-ascii?Q?lYRLpXGO7G3ABBXU1QG/+97sef9w7InO3ZadtGC5/d2jzfXQ23KFUKHX4K5U?= =?us-ascii?Q?vnMz8UCHHavREgSX3Wu0lWvJcfDYq1U39FxDgi/Ie72e+N/ZWpnXr+jc3rUc?= =?us-ascii?Q?So6RzdkKmzqrWXN9xOTuHJIocLZd8ipaKkU6rc3L3Oebu69+hIN1Yn7op3U8?= =?us-ascii?Q?xtPRLxF0hb2dw4PNkohlJX3VIC67vheTHHZf9sESihtEGm773gD+H1HGe5QQ?= =?us-ascii?Q?bg+LRFayYFcvLfVbKhrRSVIf264ASm5jY0/Zz8JaL1qmsjVBM5uGLdrdkzfR?= =?us-ascii?Q?D/eX4MHUiOBYJCiu9JPz11DkDEqeWDjb3SF4WWbO4uNHI9Pl3FSfxB35CMPE?= =?us-ascii?Q?QLc4r81eeRMP4Cw5JhoxqgWFzeproRcly6U701tye3+H3NO8AcEdaBGA6TQS?= =?us-ascii?Q?VOJz8PEGvGoZLD8Yzxu7v1yBv41cX5crE41TUzP7aZfse/5IME/LLUQ7pPAu?= =?us-ascii?Q?JNwnXwJsz4e/GXzniBBRC/P0LlZ09LRj1T2/5r8TAFgGqLkM6Heulpn0RZ90?= =?us-ascii?Q?e1Z+XVYa1/9J7ML9LyTB4/zbELCIFcN5+O+0M5mTWUXJKReIRZMK/cl/a1+D?= =?us-ascii?Q?EY1iQI+UR79Y558cSmW/dJ8dGwOXZ1VbUrX682Btb8fu7CD+vgWJ9KHHztUH?= =?us-ascii?Q?LiR5LiN0kL2FvNkMwjw/53ZVqItq/2r+D4/cp3Ymo7mxxVWAW6sUbyUIPcET?= =?us-ascii?Q?RZ81TwldbF5cv3EA+JlktxcmwWCqDDBboR1ZhIc+9E0275OZ8kcaZpDeBNWe?= =?us-ascii?Q?+MHJwcecdjGA=3D?= X-Microsoft-Exchange-Diagnostics: 1;BY2PR0201MB0758;6:BDBMZCGvIOzcqmwTsaN/vBv6VO5LSwl4/bT/W0TlSwjrODqF+GslWTf7iFxEVmCDMl2Glnf68XYsOvhX73XSsivDMvQq3d2qLW1dlgwGQ/Cf/uKun81gHFFGaQrCPs9s0cFWRdzb7l3uItbwTLQpP3V8pbnkOpoD0IHr3Fqg4wAMer2yIi5nKjsYW3O9CfTTx9UrI/E1YTgZAfrc8hZgmCJslbPrefXcGN7qQJugwsg9jSi4SLsdwGBJLwr/2cbdqtUi8AIFlX3C8gUyoHpGULCoz/16X7jqmsMgbIDKyNgqegUKKMS8Y5g681Mg2HK5Iv+IyqqT+bw5VkAC4VnELRBRheIOBsEptRPwlU9zYVw631HPC4eFYB3SZxo12vDhOPx1qpdwrit4HBydQ1Y/R4E1iWln3QxAUT8MeRuND+E=;5:sygQRn+pc9pSP2SitFFIngV1jpavKTDvRj9C9FApqDM6nQkMKzu82fQ+PxsYNjiSMBIBNDNcA6/yM5UkjBb3kcEkQXOE+JLnbu1DHz5XIe1xOqJLrLYtlcIs6LMYsUx2BPP6vr97R2IQGk/QrerJN5mauR4FXEYRLNgdJ4uGXrU=;24:HfAD6FXdx98ng3bJxcE27XRJ4TqPfGuKqlJRDihFbQAZtNZddR1RP0aG+Hg/UJVmgTLxqwtqbuTCFRT87nyAsa91ino7cMHhWiMWqMBtEg4= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;BY2PR0201MB0758;7:X036YaJP4xRIzFVG8juACC/zUCwDiU/md+k2zpyAWk3QHPmutmXVzG2P8Fq/Yk+bC4KzrjJ7P9In3U8V6R1N1Md2mQbVcbbWI7E1oUrq1tkLqPht2dxhjLh9GG98BhkDInAD7INnPrs1P/9scoB4EaGQa4PbfBf5oWZJnl3WOebueCDzoGLR4VZY2xyEIPe+Br+b1MYSxOCWCdYzt7wb5KmlrWIYUK0ITLc1igq4JIinuQlN/oLgTQb4I+8XdGRS9OB7FrTXFS0PEWz41kj+C4JA1lBapqE7xwe0Cp4PQxSbZpz8h7Hsbj968Og7K9RCVqnwzxyPYj6DAQGaMW0apg== X-OriginatorOrg: xilinx.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Feb 2017 15:05:58.8906 (UTC) X-MS-Exchange-CrossTenant-Id: 657af505-d5df-48d0-8300-c31994686c5c X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=657af505-d5df-48d0-8300-c31994686c5c;Ip=[149.199.60.100];Helo=[xsj-pvapsmtpgw02] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY2PR0201MB0758 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Currently during endpoint initialization, a new endpoint ring is alloacte using xhci_ring_alloc(), if this function fails to allocate ring a cached ring(if available) is assigned to endpoint ring. This patch modifies the code that during endpoint initialization, if cached ring is available it is assigned to the endpoint ring. If cached rings are not available then xhci_ring_alloc() is called to allocate a new ring. Doing so will avoid unncessary memory allocations if cached ring is already available for use. This also fixes endpoint "Ring expansion failed" error which occurs due to insufficient memory during ring expansion. Signed-off-by: Anurag Kumar Vulisha --- drivers/usb/host/xhci-mem.c | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/drivers/usb/host/xhci-mem.c b/drivers/usb/host/xhci-mem.c index 8414ed2..587b6c6 100644 --- a/drivers/usb/host/xhci-mem.c +++ b/drivers/usb/host/xhci-mem.c @@ -1514,19 +1514,22 @@ int xhci_endpoint_init(struct xhci_hcd *xhci, mult = 0; /* Set up the endpoint ring */ - virt_dev->eps[ep_index].new_ring = - xhci_ring_alloc(xhci, 2, 1, ring_type, max_packet, mem_flags); - if (!virt_dev->eps[ep_index].new_ring) { + if (virt_dev->num_rings_cached > 0) { /* Attempt to use the ring cache */ - if (virt_dev->num_rings_cached == 0) - return -ENOMEM; virt_dev->num_rings_cached--; virt_dev->eps[ep_index].new_ring = virt_dev->ring_cache[virt_dev->num_rings_cached]; virt_dev->ring_cache[virt_dev->num_rings_cached] = NULL; xhci_reinit_cached_ring(xhci, virt_dev->eps[ep_index].new_ring, 1, ring_type); + } else { + virt_dev->eps[ep_index].new_ring = + xhci_ring_alloc(xhci, 2, 1, ring_type, max_packet, + mem_flags); + if (!virt_dev->eps[ep_index].new_ring) + return -ENOMEM; } + virt_dev->eps[ep_index].skip = false; ep_ring = virt_dev->eps[ep_index].new_ring; -- 2.1.1