Received: by 2002:a05:6358:c692:b0:131:369:b2a3 with SMTP id fe18csp4254053rwb; Mon, 31 Jul 2023 04:16:02 -0700 (PDT) X-Google-Smtp-Source: APBJJlHmqXenin8HBw5yli6B0P/crfHItIbMe77ZMCbGJGkaSSLAQLcYW8Ba5AY0bblEs+JOI0rZ X-Received: by 2002:a17:902:6b49:b0:1b8:a720:f513 with SMTP id g9-20020a1709026b4900b001b8a720f513mr8883599plt.30.1690802162059; Mon, 31 Jul 2023 04:16:02 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1690802162; cv=none; d=google.com; s=arc-20160816; b=S6YNi2krCnrvAx+OH7r78xgDdKEfjccvTosUAPsBc8qf+1ovwJIFh363uYXb71mEqw G49ifBdXpW2Lww+iLW7peU2TJ+m8k+gf+nrhXLC3JJyasB/uK1tJE9ewHtyzNgUQxeZt Sxc3xJlrzpJQbwnRMn3gS2Z1cQAKJuro5ruFEhn4OBYTgXebCOGs3sPo1NCRVGvKXEfB oavV4S258a5Yx8SA+BywGrOHddvrQrb7Qapq0ry4C006zwlFTlFe+vLl9S0KlCMcXazE EbSTtaHI5jXl39lTL8rfOIL64xAq1dYM1v40M7pCcuEn2d3/rka6jJilHkrbTxHlY921 Gdcg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:in-reply-to:content-transfer-encoding :content-disposition:mime-version:references:message-id:subject:cc :to:from:date:dkim-signature; bh=zz2hKwOyZCuTNd+i4sOlu5W34v8EHmP5cnYPjRwyECg=; fh=Ec3muTOsMKowk6R8FeeXr7q1QGyvuk1uuJajuzWR+6M=; b=DpujaRMdUI3/FvObjTmpsEM0sv2eqciY32oNHYyHS/S8mxHtlNC7bTWyLSCstG7mkJ CZr+/FiHsYLv5r8LrwzBjcUtX9/NYxYKScacTvAGLO/hrwUxREy1AKB+o5ga04adHu6o HMpUtWXhHGjV5f8Oc7lARjMQPhPdQYQ2DhkCyj/cIBcV/TXj5qtZ7hQFid/1plSix9hO IAOq2Y/yUqvp38LYE8dypvUVHbfciPnQW58fompuAzPAUnGVzbsW7WDMl3VhfuMogMrb ph6UmmK7T/alZ9PvhuzQ+kLQ1Wo0UDFMZz2trmqqrRFkDp/MmV/xgAtMX87gWri3g9La PKJA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@rere.qmqm.pl header.s=1 header.b=hMIvpzgD; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=rere.qmqm.pl Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id u7-20020a170902714700b001bba2804c9bsi6951112plm.247.2023.07.31.04.15.49; Mon, 31 Jul 2023 04:16:02 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@rere.qmqm.pl header.s=1 header.b=hMIvpzgD; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=rere.qmqm.pl Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230031AbjGaIxc (ORCPT + 99 others); Mon, 31 Jul 2023 04:53:32 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:58776 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229678AbjGaIwo (ORCPT ); Mon, 31 Jul 2023 04:52:44 -0400 Received: from rere.qmqm.pl (rere.qmqm.pl [91.227.64.183]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id EB12219B3; Mon, 31 Jul 2023 01:49:48 -0700 (PDT) Received: from remote.user (localhost [127.0.0.1]) by rere.qmqm.pl (Postfix) with ESMTPSA id 4RDsPR0pfDz9j; Mon, 31 Jul 2023 10:49:46 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=rere.qmqm.pl; s=1; t=1690793387; bh=o4XjcotNjTUFB2FgPspmvJ0v4ljlPDC2JjFINt0i4xY=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=hMIvpzgDs39MwGa1rHHrT95+B9BlLr9gG+zuR6mHAWzupUPAIBjJQq2GYmZ8CMvPQ f4HCs3LdqvY7rEHgSSaIRKK3rTVLFdEEgTKvd6RUS/jjL4rsyxwJ5Pu14rGTo0tTnm Pmy+iYlbX4DTy5JqiRk6uJxq2h96sow4htOo2R07LGWvH1b8TSwu5FJ6IbiYGgXUgo 1cU3Q8vFkj12fgYEBDatBCaCEXlrvOzf535tA59o8GSXfNmrReGK8boqHxjx0oQ/6W ZBAf98jTvf16GC3gM92ESkCKcalOJi3mEMVquKDSDNhzmwKQJ3fGMfU06CJy3vfF+5 moCv2ImtovrQA== X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.8 at mail Date: Mon, 31 Jul 2023 10:49:44 +0200 From: =?iso-8859-2?Q?Micha=B3_Miros=B3aw?= To: Krzysztof Kozlowski Cc: Svyatoslav Ryhel , Andi Shyti , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Wolfram Sang , linux-i2c@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH v3 2/2] i2c: Add GPIO-based hotplug gate Message-ID: References: <20230729160857.6332-1-clamor95@gmail.com> <20230729160857.6332-3-clamor95@gmail.com> <25858c22-ef92-2136-67ef-0d27364c1600@linaro.org> MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-2 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: X-Spam-Status: No, score=-2.0 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,RCVD_IN_DNSWL_BLOCKED,SPF_HELO_PASS,SPF_PASS, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Mon, Jul 31, 2023 at 08:58:14AM +0200, Krzysztof Kozlowski wrote: > On 30/07/2023 23:55, Micha? Miros?aw wrote: > > On Sun, Jul 30, 2023 at 10:30:56PM +0200, Krzysztof Kozlowski wrote: > >> On 29/07/2023 18:08, Svyatoslav Ryhel wrote: > >>> From: Micha? Miros?aw > >>> > >>> Implement driver for hot-plugged I2C busses, where some devices on > >>> a bus are hot-pluggable and their presence is indicated by GPIO line. > > [...] > >>> + priv->irq = platform_get_irq(pdev, 0); > >>> + if (priv->irq < 0) > >>> + return dev_err_probe(&pdev->dev, priv->irq, > >>> + "failed to get IRQ %d\n", priv->irq); > >>> + > >>> + ret = devm_request_threaded_irq(&pdev->dev, priv->irq, NULL, > >>> + i2c_hotplug_interrupt, > >>> + IRQF_ONESHOT | IRQF_SHARED, > >> > >> Shared IRQ with devm is a recipe for disaster. Are you sure this is a > >> shared one? You have a remove() function which also points that it is > >> not safe. You can: > >> 1. investigate to be sure it is 100% safe (please document why do you > >> think it is safe) > > > > Could you elaborate on what is unsafe in using devm with shared > > interrupts (as compared to non-shared or not devm-managed)? > > > > The remove function is indeed reversing the order of cleanup. The > > shutdown path can be fixed by removing `remove()` and adding > > `devm_add_action_or_reset(...deactivate)` before the IRQ is registered. > Shared interrupt might be triggered easily by other device between > remove() and irq release function (devm_free_irq() or whatever it is > called). This is no different tham a non-shared interrupt that can be triggered by the device being removed. Since devres will release the IRQ first, before freeing the driver data, the interrupt hander will see consistent driver-internal state. (The difference between remove() and devres release phase is that for the latter sysfs files are already removed.) Best Regards Micha? Miros?aw