Received: by 2002:ac0:bc90:0:0:0:0:0 with SMTP id a16csp615969img; Fri, 22 Mar 2019 05:13:20 -0700 (PDT) X-Google-Smtp-Source: APXvYqyRpn5WrN/D8WD3u3gK+0ZM2zAiGWAT6Oj3SgVyEAapX7ZIQ+6r9mGvR8lZH+Ux+Y6Ut3Rz X-Received: by 2002:a63:5ec2:: with SMTP id s185mr8499268pgb.27.1553256799944; Fri, 22 Mar 2019 05:13:19 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1553256799; cv=none; d=google.com; s=arc-20160816; b=XFEAfBVjFDcHeauMkpzKLYo+i/P9FieOgoaJ2JOERF52SSwaLBf1En9S2eDwz6V2tb ymK7o307eWgMSOWHPlRXqmoiSgrTEvlPKEghoD7lkYXfzXSTGHB4IY3NA6llTh+v1htM +VKvKfzAOLxZuDcZq0UfAuMrqe3Slo0ZQIzB13d63xs5dgHU9FuEsi32NwmIz1udlIlX vhfRbU0+QLMBjDawdZwTkrY5hvHWv36p/vE4045IrX0Wrod+ZHMdyqnAJGC2c5FwFKXT xf9Tsh3vcGXafHWW4rcUc2TxqDfFWKZsRTTuVZfS2V1Yp95ytiLSuM0Syv3eRc4Fnw6y TN1g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=Bkiv+ao+nema1oijuz5/LTWu0N6OU8VB6jGaCw+PXr4=; b=eqgcdTVjqWvaYYnbm5rb1jn6jP/MBx9iOCQ6QJHo6K2VhF3IRH/27/7yVx4gS1cmq2 Koj8rL042KzAlFX+IhwlCKpvDkehrlrh0vzwseZBcMydHecXHpmWF90gukSS6UxOinCi Wsnu2Gr+pX5bgV0oYJasS3kjn5C4xRuQP1treAqz0AUDLdE/h6gxs3+YHyQS+WHs5UTG OWbCUL6bmGbjcY5RHe9yDPuF4IPsglBKJTDrPkgObo8s3+YIspFxSMAoFbK+3O4j+riP iLIqo7UPdp6rJCELPdec/HPSIUlOrFBxAGtxe8qq6PBLnzq7d5gPuvzxChTsQI5EE/n9 542g== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b="NX2/AuBy"; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id m15si3998714pgj.126.2019.03.22.05.13.04; Fri, 22 Mar 2019 05:13:19 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b="NX2/AuBy"; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2389479AbfCVMMe (ORCPT + 99 others); Fri, 22 Mar 2019 08:12:34 -0400 Received: from mail.kernel.org ([198.145.29.99]:50680 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2389625AbfCVMMa (ORCPT ); Fri, 22 Mar 2019 08:12:30 -0400 Received: from localhost (83-86-89-107.cable.dynamic.v4.ziggo.nl [83.86.89.107]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 31C092082C; Fri, 22 Mar 2019 12:12:29 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1553256749; bh=akxBTI8izapSTkpWCq9huMqYxzELSIDhDdZd/iC03X8=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=NX2/AuBy98MMzi1uzlCULeanvi0SSip/abucJN7c5S6MG5jnSyBDusgpixIXXvL1t MiSANZGhFrtKjVzueV70rSAVBXQZWCNeDG4nO5T/+8PsfV8Z0RYj3IBvWmWbxD3g/E lL5cgDYtVMg7TryTYlcRnhnqyxb18CmabrL3plOM= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Alexander Usyskin , Tomas Winkler Subject: [PATCH 5.0 009/238] mei: bus: move hw module get/put to probe/release Date: Fri, 22 Mar 2019 12:13:48 +0100 Message-Id: <20190322111258.815866293@linuxfoundation.org> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190322111258.383569278@linuxfoundation.org> References: <20190322111258.383569278@linuxfoundation.org> User-Agent: quilt/0.65 X-stable: review X-Patchwork-Hint: ignore MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 5.0-stable review patch. If anyone has any objections, please let me know. ------------------ From: Alexander Usyskin commit b5958faa34e2f99f3475ad89c52d98dfea079d33 upstream. Fix unbalanced module reference counting during internal reset, which prevents the drivers unloading. Tracking mei_me/txe modules on mei client bus via mei_cldev_enable/disable is error prone due to possible internal reset flow, where clients are disconnected underneath. Moving reference counting to probe and release of mei bus client driver solves this issue in simplest way, as each client provides only a single connection to a client bus driver. Cc: Signed-off-by: Alexander Usyskin Signed-off-by: Tomas Winkler Signed-off-by: Greg Kroah-Hartman --- drivers/misc/mei/bus.c | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) --- a/drivers/misc/mei/bus.c +++ b/drivers/misc/mei/bus.c @@ -541,17 +541,9 @@ int mei_cldev_enable(struct mei_cl_devic goto out; } - if (!mei_cl_bus_module_get(cldev)) { - dev_err(&cldev->dev, "get hw module failed"); - ret = -ENODEV; - goto out; - } - ret = mei_cl_connect(cl, cldev->me_cl, NULL); - if (ret < 0) { + if (ret < 0) dev_err(&cldev->dev, "cannot connect\n"); - mei_cl_bus_module_put(cldev); - } out: mutex_unlock(&bus->device_lock); @@ -614,7 +606,6 @@ int mei_cldev_disable(struct mei_cl_devi if (err < 0) dev_err(bus->dev, "Could not disconnect from the ME client\n"); - mei_cl_bus_module_put(cldev); out: /* Flush queues and remove any pending read */ mei_cl_flush_queues(cl, NULL); @@ -725,9 +716,16 @@ static int mei_cl_device_probe(struct de if (!id) return -ENODEV; + if (!mei_cl_bus_module_get(cldev)) { + dev_err(&cldev->dev, "get hw module failed"); + return -ENODEV; + } + ret = cldrv->probe(cldev, id); - if (ret) + if (ret) { + mei_cl_bus_module_put(cldev); return ret; + } __module_get(THIS_MODULE); return 0; @@ -755,6 +753,7 @@ static int mei_cl_device_remove(struct d mei_cldev_unregister_callbacks(cldev); + mei_cl_bus_module_put(cldev); module_put(THIS_MODULE); dev->driver = NULL; return ret;