From patchwork Mon Apr 9 04:47:58 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Mody, Rasesh" X-Patchwork-Id: 37616 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 5606E1B720; Mon, 9 Apr 2018 06:49:09 +0200 (CEST) Received: from NAM01-BY2-obe.outbound.protection.outlook.com (mail-by2nam01on0045.outbound.protection.outlook.com [104.47.34.45]) by dpdk.org (Postfix) with ESMTP id 9DA461B6F4 for ; Mon, 9 Apr 2018 06:49:04 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=CAVIUMNETWORKS.onmicrosoft.com; s=selector1-cavium-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=ZEuqaDruj/Nfa3XUgCev9nz0U/n72t1T6oCpANPI+4E=; b=YhVTmVgokThMKaupl+kYZ5Kz5Muzj80VP3n8Cuxuujx2ISRi10hXQgQFLKCHHDAHcc0eWhHZpgxF1n2E3YmRu2er/c3UwDCa2/Z4GwS26yORbwB1HAHUW2uqgo0owO12MXFa8MWYF4ol+7D/2Rz/ubBMqru2aW/ExrbU5bUqz3I= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Rasesh.Mody@cavium.com; Received: from cavium.com (198.186.0.2) by MWHPR0701MB3675.namprd07.prod.outlook.com (2603:10b6:301:7e::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.653.12; Mon, 9 Apr 2018 04:49:02 +0000 From: Rasesh Mody To: dev@dpdk.org Cc: Rasesh Mody , ferruh.yigit@intel.com, Dept-EngDPDKDev@cavium.com Date: Sun, 8 Apr 2018 21:47:58 -0700 Message-Id: <1523249290-7444-3-git-send-email-rasesh.mody@cavium.com> X-Mailer: git-send-email 1.7.10.3 In-Reply-To: <1522561624-15817-1-git-send-email-rasesh.mody@cavium.com> References: <1522561624-15817-1-git-send-email-rasesh.mody@cavium.com> MIME-Version: 1.0 X-Originating-IP: [198.186.0.2] X-ClientProxiedBy: BYAPR03CA0036.namprd03.prod.outlook.com (2603:10b6:a02:a8::49) To MWHPR0701MB3675.namprd07.prod.outlook.com (2603:10b6:301:7e::15) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 1f78d049-6882-4038-aa7d-08d59dd537a7 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020095)(4652020)(5600026)(4604075)(4534165)(4627221)(201703031133081)(201702281549075)(2017052603328)(7153060)(7193020); SRVR:MWHPR0701MB3675; X-Microsoft-Exchange-Diagnostics: 1; MWHPR0701MB3675; 3:IQ1PoHcsoNAtgm5fA2nKFXfkE0DL/+o+NMic4hwfF4yzz5uveHLDwoS2tSKxy8tLtCrt3YkyeQU0EJs3oBZzhX4/MSZD9byl2IxP896AJIg4XmO/Fu9CtOUx6vYeemRuYweqV5jSWzsI/Y687IPeyiYSxZ+BxRkUekAoOjhZpoFgzMLGItMmmaBKY60C4qtLzNhDjevz+bM0BTgY9sE1Mszki6JNd/afJz4jAX1U5ZelHrw95vyexr24JUgorOvJ; 25:L7mxbmOqvIVigYgWzLW7BL+5D8p/gEm8pQ3bSZVjcf5LXa06cUjM32Zy4sk/M5rht+VP0hPSFWI4u8zXwuyiKR1Tz9m7HSRlIc7OzJ05HGsjrOekLEItmQcMhlj6/V70NxoRzfBTq250yBtEu51SElb1ssRLYWI4vJhvKN3ul+SXAxJcRMge2wR3nDDyaxTuUYyebkjyApoW6FVBe4oJXbRlmOouAUh5fdrtcMdf52XdF/zut00K1rn8eXcYnv9cdjy79wGspgw3isx72UjNseXq7n04vZ/8/eeRTelU12Yy0la4QpacnaQ0M9zKBqFzvyLG8DjjyvWDLt2ZwOx/Hw==; 31:zrTwghWBt5Z9faqnRstW9mgiv1pNxleLsOPkopFIAGJULvKQv5g0+U93xqK+yuLlW9qJpvr7yO6RDthjZOWZG5l6OpCFHiKF8itqb88OjcwjUim7yBXrZkt3234UBVqVjNXhzQhuUf6RvjUU8FRBxiCJuwlRRn7DgCrxV1JE2IS8gMy5rkC3+d1N1zRiNdAW6qjUZ9A1SG/OeBOg9dvjRO41uZgTMH+PfNMgYyZT2jw= X-MS-TrafficTypeDiagnostic: MWHPR0701MB3675: X-Microsoft-Exchange-Diagnostics: 1; MWHPR0701MB3675; 20:V9n4geeNVeMupu2TmdwXpNy01P9eac5NP/Jb0ZMuhXU1dvXti33QREeWDSbEMAYVGc3uZSSp6IiAKbpdi02csr7k+P5FoM5VoCu2WDN2a0+roYGuHzbAo2M7yzEI2g70BBP0DTeOc79pYMi49N++ZJhcdBrDCt6G9mG8po81wXODpW/YYUJJ0s4A/QCuSwuUvCE6+GhIRNaD6qqNgZ2AG7uAHpktuvji07Ilt9kPTQYVVL3b6wa6T19FpOcc4ve3L57kajWcZTuCDuiMK2X+GuXaFSezAvCp2evsD/FGYlsjEobhIqF8v/XuFLgQQ/tjMDQr/+Ym/y+oxyGNTKrBSDpqVMcxzI6DfsnXdwh0T/Gk/v1/fxaS9asLiAPMqYKk1IrMugk9h5JotB7zn1pHB3Rep6YPqmuGgwnG4c2XQYKKE3i7+jEO5gDZouW+crFMsbQoo1xAsp1l/i/wWDdF8F2Nk5IMxA31qkNoRuInocGshCLq2PtV8BdCcRaoSE1x; 4:z8Y0NMeUFsjI383M4v+vzGHsrtOgViFaGqPT2HkExuannEgcP95xg3R5Sf/M7pLYFlWG7LdGPPcOf+T87xn6lDzzAUjs4kkwamDVO6NbPDDPNmTPosxE5eA1u9vLffC7GY0dPHNyYVpSg9IsjP4u00HTgmuv1oqM3UzHJbjJveEsEq9OrwEr3hTZ3hLc5XAgYMajL46C4rHqEy2YDTDDgmhSjKI/uQGkxblFH4cALLUhooAyisD/XNgeSuTbv8HAYyo5yqB8ES5uTfgRZoF0xw== X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(8211001083)(6040522)(2401047)(5005006)(8121501046)(3002001)(3231221)(944501327)(52105095)(10201501046)(93006095)(93001095)(6041310)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123558120)(20161123562045)(20161123564045)(20161123560045)(6072148)(201708071742011); SRVR:MWHPR0701MB3675; BCL:0; PCL:0; RULEID:; SRVR:MWHPR0701MB3675; X-Forefront-PRVS: 0637FCE711 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(366004)(396003)(346002)(39380400002)(39850400004)(376002)(189003)(199004)(105586002)(8936002)(316002)(7736002)(2351001)(72206003)(305945005)(186003)(21086003)(16526019)(486006)(2906002)(59450400001)(2361001)(386003)(55016002)(86362001)(3846002)(478600001)(6116002)(551934003)(76176011)(50226002)(51416003)(52116002)(7696005)(4326008)(50466002)(48376002)(53936002)(16586007)(81166006)(66066001)(476003)(68736007)(2616005)(11346002)(69596002)(47776003)(26005)(956004)(8676002)(6666003)(97736004)(4720700003)(25786009)(107886003)(81156014)(36756003)(446003)(106356001)(5660300001)(6916009); DIR:OUT; SFP:1101; SCL:1; SRVR:MWHPR0701MB3675; H:cavium.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; MX:1; A:1; Received-SPF: None (protection.outlook.com: cavium.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; MWHPR0701MB3675; 23:irGV4H5CMcbl4B/QHSey1Pljh2Qvdrwo540n93f?= SjZPy3iG8cyYDnKULLfLUE7vOWDQ/f2jDD2w9IWhT/i5936xeD87vrFUDmJO+GlyZCdxGQhJAhX419NzWMdAOW3lVVz/0zz+FgDG4Xn8DpHHO6pTruTGxYENFmd7xjHhm2zuYnoFs8+JltPJ5MHIPvyn1K2v/ttH/jWtcC7Gs5xYIBqtvDMlSJFRG1vVfxvoI/QgZjEL+HIdf+4JafT+B3bEfSVmC4RFkbNBTxp0dYMQWot3JEmhGj9MT1IWo4oL49saZ1nNIbQm3G4ddhaEZfP6DerC16808J1yQI0PjP0TkOpqKSDyZsiHHkz1k+dBuhGKNlufFKzrEfpIeHl8ebff7YveGbyrkWeZBQh3RSk8QioLlOIpy6yGq2bM3rnh1aQb4r+2J2jJBJiH/aXYPyu3msCxZCZJH2aVZbo8P1BQnnOvW2xlLd699uLCnT2Z9FhaaGst35pORbDUIRNawE4jG2QglQPAmgQVw7Aq8ZBNn8glJ46Nau4q08w36/DxxHnQAy3AOUw2x0juLOGc3bcokd9QR+NThD/B8dF5/jbC98CmGz07uXXZHBcdmVJtwkRxlC30zmeqYSRIn8LEr6fW4574DY0rWxA6VEGHIVNIEklwKuH8kfYwUU/SNKKKS03Tq2GR9cLsITNAvQf8jrIfCndnsaDKrYBlkrEI+iQDQ6PRJFuzdq7PqRwHP+WCB0JcRcyNzeTBUI1H1m9KPjyF/uTnMdkzMOnxsI80ryrAOBCjI4PmYFUMQQS6tkq/vhHFG7ivGAXQYzLyNEDJJ4QpUgn3/9OKwwguvqLq38R+MDwdcghK3q7HTuXF4OguISwz+bYT/78XVfv7ZpUbkDAj8rXbMZk9pSwsx3M5VI/bftAoeuggX/DEUQ9kZKEVA6lJLIgPnBy95yHEdHx9phk1W1difprU9yDAz+jEXdXhpDx4fo1ekr7pFIVNK5A8rJi12Jrus0FAOHsl4avrJ9q1w/uJhKaxSGqsdhOzVnzyISgujI0hebgx29W3SXI4/2gpTE3RxomFwPlCuXb3dv8roMhAuijbia44z6cL3senzjqYtx703RiX2Y9a85eual8kCpt2G0JVjwoaFvvSPelxls8RBLcslykp7WW2BXA5nITiHSf9wRQJ7xNACLEiZlLmG0sG9yzJEPD1BHInp8nCW9Ninou3ZgsfBcjqK9JTdfXSNIN3GZkKzI6Araj5tckme2OX4LY3eDNkqtorlxLHpZZDVtWF9CvSo5s/elVnL8ShMaKuolzSyUGS2F6STxsy1XL9sxHcGDNbOaocoHS/MerDCuz2ax9sM3XerTqArZw== X-Microsoft-Antispam-Message-Info: n+jTrEf9q436UfrUBDxMQ/H0DOdtQK0ffAMXAIHo5+idZWizyacqEOqTwDeHLcN63dazu/ir1aEBTIbqfGcO5aFNiZ5jeFtbaI7vIqlHnRLdLmF52NsoRL5wGZOEAJ/aYcPCNiBXUEPliJKmq2kRcy1GCJmN1PxCW6WYELptpyj7MdnOYUGJkH9IuwP6JoaF X-Microsoft-Exchange-Diagnostics: 1; MWHPR0701MB3675; 6:3szZHbb5CaqcIYJX/m6JBB5MeK5IOD7Qhfg8H0I0LmJUQfIH8r62Yxl9fifA6MmEm5IMibD5hfwYdTkg2H/P8vfUjYy1nUIs1dr+UqHEqz66J8K8GNmDPBoh7FEpf/FOs+JSMHx5RrEAIfrK/4xeUyx69Yrtnyc204yXArYdMK78gR/41xd4L/2IC8jfG7zFSwwk0Bs9rDtfNksgM2IFwJnkF8HRI0+APEr9E8jDoUJXTJ5p0nswQojOu4b1HY/Dkui2RbEbxO576IQ/qd3jpB8SzGR+gvskM7NSllhjl8aftU699SSrI/llpAXSFwgCSfuzx9BhAvE5xt0LePp3k8FBz92j+sib7DQA1xMbcaQLvERBBjSG+TrqHmgkzNqhq6OLHpgmsVD8heMqwss1vIwUgsZzJl/wnlFimTeOoPHH9msHDeyDn5Wez4b3+wH6xWj6/iUhP2f6+qK1BmpWPw==; 5:/XXnKTt4Q52gelHDYQTIEtExZ6EiShtsMNKjuB3k2+y1dnDqxtMQjIN+tuQp3pBt1zh4jrP83crm5AGRuhoLO1JFFEDA+cGm38YKssq+O5N+TMRyrMGZ2kS4NdHMTCg0NqcvcGbEXuCTuue7JNrYoDWD8R7xS4SSUhD6+idWSr0=; 24:I6G+Ed10OeTRWeAZ7NjDNSG+OBdn5PjOePuMxIHRAVT3FghrlCOuypWdX+dL0pxld4yR0CJ6iql0MU1TMcHSUH3P7is3zsnLhBXjnMEXqlY= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; MWHPR0701MB3675; 7:2g6o/3LGlS0VDyv/WnSZHdN6QZkDiV2I+m3784s0KMMUY73hvSTSqPtFAIQ7H/YUnRVICU7cSOZweTWKrMXGHWgKv4ev2HUpmug3RLPfrzqoJNQubwvwsvWm3A8LNQofagV/tfZy619Q46TJK6dLjwVnCOj5r0JwfgqF/SPe/PXJFvLL9UGIQ9d6CAlnT7XFHgxljrpLIdpsjLxb8IN/ZNMDojPsVizkmpd3nJvNBPfoOMAJPSklx+FpZ+gJIorA X-OriginatorOrg: cavium.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 Apr 2018 04:49:02.7935 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 1f78d049-6882-4038-aa7d-08d59dd537a7 X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 711e4ccf-2e9b-4bcf-a551-4094005b6194 X-MS-Exchange-Transport-CrossTenantHeadersStamped: MWHPR0701MB3675 Subject: [dpdk-dev] [PATCH v2 02/14] net/qede/base: protect DMAE transactions X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" Protect DMAE transactions with a spinlock instead of a mutex Signed-off-by: Rasesh Mody --- drivers/net/qede/base/ecore.h | 6 ++++-- drivers/net/qede/base/ecore_dev.c | 6 +++--- drivers/net/qede/base/ecore_hw.c | 31 ++++++++++++++++++++----------- 3 files changed, 27 insertions(+), 16 deletions(-) diff --git a/drivers/net/qede/base/ecore.h b/drivers/net/qede/base/ecore.h index ce5f3a9..7c642af 100644 --- a/drivers/net/qede/base/ecore.h +++ b/drivers/net/qede/base/ecore.h @@ -432,8 +432,10 @@ struct ecore_hw_info { #define DMAE_MAX_RW_SIZE 0x2000 struct ecore_dmae_info { - /* Mutex for synchronizing access to functions */ - osal_mutex_t mutex; + /* Spinlock for synchronizing access to functions */ + osal_spinlock_t lock; + + bool b_mem_ready; u8 channel; diff --git a/drivers/net/qede/base/ecore_dev.c b/drivers/net/qede/base/ecore_dev.c index cd274c3..b15af03 100644 --- a/drivers/net/qede/base/ecore_dev.c +++ b/drivers/net/qede/base/ecore_dev.c @@ -423,9 +423,9 @@ void ecore_init_struct(struct ecore_dev *p_dev) p_hwfn->b_active = false; #ifdef CONFIG_ECORE_LOCK_ALLOC - OSAL_MUTEX_ALLOC(p_hwfn, &p_hwfn->dmae_info.mutex); + OSAL_SPIN_LOCK_ALLOC(p_hwfn, &p_hwfn->dmae_info.lock); #endif - OSAL_MUTEX_INIT(&p_hwfn->dmae_info.mutex); + OSAL_SPIN_LOCK_INIT(&p_hwfn->dmae_info.lock); } /* hwfn 0 is always active */ @@ -4238,7 +4238,7 @@ void ecore_hw_remove(struct ecore_dev *p_dev) ecore_mcp_free(p_hwfn); #ifdef CONFIG_ECORE_LOCK_ALLOC - OSAL_MUTEX_DEALLOC(&p_hwfn->dmae_info.mutex); + OSAL_SPIN_LOCK_DEALLOC(&p_hwfn->dmae_info.lock); #endif } diff --git a/drivers/net/qede/base/ecore_hw.c b/drivers/net/qede/base/ecore_hw.c index 84f273b..1e76509 100644 --- a/drivers/net/qede/base/ecore_hw.c +++ b/drivers/net/qede/base/ecore_hw.c @@ -592,7 +592,8 @@ enum _ecore_status_t ecore_dmae_info_alloc(struct ecore_hwfn *p_hwfn) goto err; } - p_hwfn->dmae_info.channel = p_hwfn->rel_pf_id; + p_hwfn->dmae_info.channel = p_hwfn->rel_pf_id; + p_hwfn->dmae_info.b_mem_ready = true; return ECORE_SUCCESS; err: @@ -604,8 +605,9 @@ void ecore_dmae_info_free(struct ecore_hwfn *p_hwfn) { dma_addr_t p_phys; - /* Just make sure no one is in the middle */ - OSAL_MUTEX_ACQUIRE(&p_hwfn->dmae_info.mutex); + OSAL_SPIN_LOCK(&p_hwfn->dmae_info.lock); + p_hwfn->dmae_info.b_mem_ready = false; + OSAL_SPIN_UNLOCK(&p_hwfn->dmae_info.lock); if (p_hwfn->dmae_info.p_completion_word != OSAL_NULL) { p_phys = p_hwfn->dmae_info.completion_word_phys_addr; @@ -630,8 +632,6 @@ void ecore_dmae_info_free(struct ecore_hwfn *p_hwfn) p_phys, sizeof(u32) * DMAE_MAX_RW_SIZE); p_hwfn->dmae_info.p_intermediate_buffer = OSAL_NULL; } - - OSAL_MUTEX_RELEASE(&p_hwfn->dmae_info.mutex); } static enum _ecore_status_t ecore_dmae_operation_wait(struct ecore_hwfn *p_hwfn) @@ -777,6 +777,15 @@ static enum _ecore_status_t ecore_dmae_operation_wait(struct ecore_hwfn *p_hwfn) enum _ecore_status_t ecore_status = ECORE_SUCCESS; u32 offset = 0; + if (!p_hwfn->dmae_info.b_mem_ready) { + DP_VERBOSE(p_hwfn, ECORE_MSG_HW, + "No buffers allocated. Avoid DMAE transaction [{src: addr 0x%lx, type %d}, {dst: addr 0x%lx, type %d}, size %d].\n", + (unsigned long)src_addr, src_type, + (unsigned long)dst_addr, dst_type, + size_in_dwords); + return ECORE_NOMEM; + } + if (p_hwfn->p_dev->recov_in_prog) { DP_VERBOSE(p_hwfn, ECORE_MSG_HW, "Recovery is in progress. Avoid DMAE transaction [{src: addr 0x%lx, type %d}, {dst: addr 0x%lx, type %d}, size %d].\n", @@ -870,7 +879,7 @@ enum _ecore_status_t OSAL_MEMSET(¶ms, 0, sizeof(struct ecore_dmae_params)); params.flags = flags; - OSAL_MUTEX_ACQUIRE(&p_hwfn->dmae_info.mutex); + OSAL_SPIN_LOCK(&p_hwfn->dmae_info.lock); rc = ecore_dmae_execute_command(p_hwfn, p_ptt, source_addr, grc_addr_in_dw, @@ -878,7 +887,7 @@ enum _ecore_status_t ECORE_DMAE_ADDRESS_GRC, size_in_dwords, ¶ms); - OSAL_MUTEX_RELEASE(&p_hwfn->dmae_info.mutex); + OSAL_SPIN_UNLOCK(&p_hwfn->dmae_info.lock); return rc; } @@ -896,14 +905,14 @@ enum _ecore_status_t OSAL_MEMSET(¶ms, 0, sizeof(struct ecore_dmae_params)); params.flags = flags; - OSAL_MUTEX_ACQUIRE(&p_hwfn->dmae_info.mutex); + OSAL_SPIN_LOCK(&p_hwfn->dmae_info.lock); rc = ecore_dmae_execute_command(p_hwfn, p_ptt, grc_addr_in_dw, dest_addr, ECORE_DMAE_ADDRESS_GRC, ECORE_DMAE_ADDRESS_HOST_VIRT, size_in_dwords, ¶ms); - OSAL_MUTEX_RELEASE(&p_hwfn->dmae_info.mutex); + OSAL_SPIN_UNLOCK(&p_hwfn->dmae_info.lock); return rc; } @@ -917,7 +926,7 @@ enum _ecore_status_t { enum _ecore_status_t rc; - OSAL_MUTEX_ACQUIRE(&p_hwfn->dmae_info.mutex); + OSAL_SPIN_LOCK(&p_hwfn->dmae_info.lock); rc = ecore_dmae_execute_command(p_hwfn, p_ptt, source_addr, dest_addr, @@ -925,7 +934,7 @@ enum _ecore_status_t ECORE_DMAE_ADDRESS_HOST_PHYS, size_in_dwords, p_params); - OSAL_MUTEX_RELEASE(&p_hwfn->dmae_info.mutex); + OSAL_SPIN_UNLOCK(&p_hwfn->dmae_info.lock); return rc; }