Received: by 2002:a05:6a10:9848:0:0:0:0 with SMTP id x8csp3737953pxf; Mon, 22 Mar 2021 13:50:11 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzvZyw6pmbk1JLftCUk1Y76LJ1qZqFdvAJugi4x2IIV+Rm4xVTINrpKrD7ksDF4lTpQmz3t X-Received: by 2002:a17:907:3e9e:: with SMTP id hs30mr1678740ejc.66.1616446211059; Mon, 22 Mar 2021 13:50:11 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1616446211; cv=none; d=google.com; s=arc-20160816; b=JJ3T2dlq+P/s6q/I+6ybp/uCPtX14IaO3c97Q2iwwe0PZe0WwYi83BZ8cEzXrzwwSa 7udqk2LO8gi+N3FiLBtwgdNaJgSEOKgOS6ZxdJ/ROni/UxJpHA7TsHLjsVcV+mA1/+wn Mxdq/DeUg9uOPXlKvuA2FT/LtI3LwRb5xblX5rftdlMc0pp0rtf2fTvJRFYJhsKLPQ9W ZEPzBYD7HX1MzkRGBjctymXXiZ57kgtVOKICKwBllqCvlBynhaCVZokB7sbNpCMml2Wd b5rkwbr8MIjVIg35yU106ifwZOXAWfNXLC53I7c0tcW7ZuFCT2f9zfi0ZlEcfq80wu1o l/5A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :ironport-sdr:ironport-sdr; bh=gkXdCaYL0C5oHIFCp3MmSywS3Wwt+9QJH1/+GTclNEw=; b=iHwF/dZpfbxp5isbQjzw6DYiSdYzDiy/LAEuGMuNspIB1Xd4lJQnwsVa0r9ejobYxf Wlu6wN8+YO35eYPq6EiSi0nrId3j57v89LIIiQ6LnDTwD63o5BR8Ic5vXHhSznRmA0rQ WtxZQN2jM0ZaBmYjaSMD4t1Vyn0W0JBwRtsPKucogrOOyIIGJYraVCux3Ijf7uohNyVF mqCyf83+ahVzh67e72Rt8EHmh4I+K4chGkTnq6eT21Xf4M6U3Glwy4Y/oU1Yf+Q32Qda 9t4rO2EaggWeUHNyoDkUa33+UpZiyksZ5uI28EJhvTZelGqIpw0SUwEFntpJ6X2VhHE0 xSfQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-wireless-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-wireless-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id z22si12573835edb.163.2021.03.22.13.49.47; Mon, 22 Mar 2021 13:50:11 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-wireless-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-wireless-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-wireless-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231536AbhCVUrY (ORCPT + 99 others); Mon, 22 Mar 2021 16:47:24 -0400 Received: from mga14.intel.com ([192.55.52.115]:38743 "EHLO mga14.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230259AbhCVUqx (ORCPT ); Mon, 22 Mar 2021 16:46:53 -0400 IronPort-SDR: QxyO/9M3FvG0XMRr641ePljlrKSKc/uCaHDJPqrrJSbotPi9h1iivPzrZSggd2yU+j7MROY0We R82T3XWLveJA== X-IronPort-AV: E=McAfee;i="6000,8403,9931"; a="189746691" X-IronPort-AV: E=Sophos;i="5.81,269,1610438400"; d="scan'208";a="189746691" Received: from orsmga008.jf.intel.com ([10.7.209.65]) by fmsmga103.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 22 Mar 2021 13:46:51 -0700 IronPort-SDR: NsvoX11hLp/zj7eO2OtcDDpxOT3fkS24ZGOVqimxMrfyZDS/2fxyNqxNEy7Tw8OWpYPmibsgOa kBdbMgZx6gQg== X-IronPort-AV: E=Sophos;i="5.81,269,1610438400"; d="scan'208";a="414640834" Received: from isutskov-mobl.ger.corp.intel.com (HELO egrumbac-mobl1.lan) ([10.251.189.99]) by orsmga008-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 22 Mar 2021 13:46:48 -0700 From: Emmanuel Grumbach To: kvalo@codeaurora.org Cc: johannes@sipsolutions.net, linux-wireless@vger.kernel.org, luca@coelho.fi, Tomas Winkler , Emmanuel Grumbach Subject: [PATCH 1/5] mei: allow map and unmap of client dma buffer only for disconnected client Date: Mon, 22 Mar 2021 22:46:29 +0200 Message-Id: <20210322204633.102581-2-emmanuel.grumbach@intel.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210322204633.102581-1-emmanuel.grumbach@intel.com> References: <20210322204633.102581-1-emmanuel.grumbach@intel.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-wireless@vger.kernel.org From: Tomas Winkler Allow map and unmap of the client dma buffer only when the client is not connected. The functions return -EPROTO if the client is already connected. This is to fix the race when traffic may start or stop when buffer is not available. Signed-off-by: Tomas Winkler Signed-off-by: Emmanuel Grumbach --- drivers/misc/mei/client.c | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/drivers/misc/mei/client.c b/drivers/misc/mei/client.c index 4378a9b25848..2cc370adb238 100644 --- a/drivers/misc/mei/client.c +++ b/drivers/misc/mei/client.c @@ -2286,8 +2286,8 @@ int mei_cl_dma_alloc_and_map(struct mei_cl *cl, const struct file *fp, if (buffer_id == 0) return -EINVAL; - if (!mei_cl_is_connected(cl)) - return -ENODEV; + if (mei_cl_is_connected(cl)) + return -EPROTO; if (cl->dma_mapped) return -EPROTO; @@ -2327,9 +2327,7 @@ int mei_cl_dma_alloc_and_map(struct mei_cl *cl, const struct file *fp, mutex_unlock(&dev->device_lock); wait_event_timeout(cl->wait, - cl->dma_mapped || - cl->status || - !mei_cl_is_connected(cl), + cl->dma_mapped || cl->status, mei_secs_to_jiffies(MEI_CL_CONNECT_TIMEOUT)); mutex_lock(&dev->device_lock); @@ -2376,8 +2374,9 @@ int mei_cl_dma_unmap(struct mei_cl *cl, const struct file *fp) return -EOPNOTSUPP; } - if (!mei_cl_is_connected(cl)) - return -ENODEV; + /* do not allow unmap for connected client */ + if (mei_cl_is_connected(cl)) + return -EPROTO; if (!cl->dma_mapped) return -EPROTO; @@ -2405,9 +2404,7 @@ int mei_cl_dma_unmap(struct mei_cl *cl, const struct file *fp) mutex_unlock(&dev->device_lock); wait_event_timeout(cl->wait, - !cl->dma_mapped || - cl->status || - !mei_cl_is_connected(cl), + !cl->dma_mapped || cl->status, mei_secs_to_jiffies(MEI_CL_CONNECT_TIMEOUT)); mutex_lock(&dev->device_lock); -- 2.25.1