Received: by 2002:a05:6a10:206:0:0:0:0 with SMTP id 6csp1392281pxj; Fri, 21 May 2021 13:06:59 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzrPZDE+AutqML3uXnsXEHkZOpC+S7XOO/Kv4NT3tYGc0vdeUfm/p+udDf9bUIOpttaUB7I X-Received: by 2002:a5e:cb45:: with SMTP id h5mr471291iok.207.1621627619791; Fri, 21 May 2021 13:06:59 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1621627619; cv=none; d=google.com; s=arc-20160816; b=LrIq+dGgwu1kFAN1/+VEkwE6V0k8myHyU8fEGPu29ePFN99NxCtz+j6ZxYCCE7pklu D+2ICABrbaEO491fPY6gDE5u8a/Nhd8rQEdeI6BQawVm4ONT+YyVpRBpoEq1hioquZej dTwlZg9KMjbF/iIcPRrMzxojR8rhOeXXKjFFqYD371a7CQyhq70FZ4Y/NPNTTtI+5vKg JXEPpNkcLvTXX/G8B3BUQcC22XZ7ItRavmWJ4VPrV5cNmKbCtdWajXIBecFIuTF0XLwM TVvFOn/a0HqCyeTy8d4K7jE9WbFW600Nt3wPUN2aMUEpH9HRQXFbYrUElY6LnDVQwtCx 1nUQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:subject:message-id:date:user-agent:from :references:in-reply-to:mime-version:dkim-signature; bh=FKfovp3/MGxEXHdgHe1obh+6nfXZPRl0l3elRwa0NRo=; b=W5IZPigkWLJCa4SviRehrD5etdCgfuCrU9ZfckZSzBtl6hqaT+4qh7BUhdcGhfO1QQ uBJx9tHeCBEepzvnkE1ZBKrL/199UAqL+vA3a1HhHZEC9n8KDjlvAoLcBKOWSIszZ7Wu oVsIh/dAnPc8An4NzfejtJuKA1OkO1h/WUxXWbUpGr0Q1PznbepR69sYPTu34KWaZyXH Wt9MVNV+xxbgW9qa+4FelHr0ZBTJpnkZiOaQisfq6QZoh4wgIcEqt8N6Bs9rDNNrBvuB UDZOxGBP23VxzpmM9pVWFsY8/6RNyNviNMfHNvp5Unc42555UjlLFlVYT7vajuQRQjGi nwgw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@chromium.org header.s=google header.b=mjmlVCqg; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=chromium.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id l2si4800690ilj.152.2021.05.21.13.06.46; Fri, 21 May 2021 13:06:59 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@chromium.org header.s=google header.b=mjmlVCqg; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=chromium.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S238275AbhEUFBj (ORCPT + 99 others); Fri, 21 May 2021 01:01:39 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:54048 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232966AbhEUFBh (ORCPT ); Fri, 21 May 2021 01:01:37 -0400 Received: from mail-oo1-xc30.google.com (mail-oo1-xc30.google.com [IPv6:2607:f8b0:4864:20::c30]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 26168C061574 for ; Thu, 20 May 2021 22:00:14 -0700 (PDT) Received: by mail-oo1-xc30.google.com with SMTP id i8-20020a4aa1080000b0290201edd785e7so4308043ool.1 for ; Thu, 20 May 2021 22:00:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; h=mime-version:in-reply-to:references:from:user-agent:date:message-id :subject:to:cc; bh=FKfovp3/MGxEXHdgHe1obh+6nfXZPRl0l3elRwa0NRo=; b=mjmlVCqghK3ZHVV6fQUFx2yEVid2cPUx4McEN61V7vEIl/0pVwyB5ZxV8Nxg74FDjM vcGLGwSvjXXJ6MGwuIgtjU6Oj+ufIOU8I5+VvKP1jmxY2P1SyyGNhvx9fMN2h7MuIWiD I/umWum291wATj83pjphOCDTZics1tLeYhV1o= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:in-reply-to:references:from :user-agent:date:message-id:subject:to:cc; bh=FKfovp3/MGxEXHdgHe1obh+6nfXZPRl0l3elRwa0NRo=; b=fAD6EwUyi1Hvz2+E6cFqhr5UCJ8ZLLywt5uyUI6hb3R6ylxDK38WR+10mG88H4TaPY J/NXbBjRHi7OOI/O4dmmyhCkhtOralLYkf2RxXZFaqAi3IATIDwEiu2oZbLCYMaIG53p KZ8toIzSkbb5VSacCeKnFiniJSa0M0ydfW0L7lU/VIbNIE6rd6UvHJ4/1evJjxH8LG0p ZoRkq6uZHNaCg31F4oV4/Sz8ybWf8QbAUIs3li5D2I+NikrzqAN3ZdNnK+k8S8z7QKsz 2DZ8tS+YX/Ijs/rrp5h5aTk2wsVnwStCA6KbCjPkFaqOa+HAeXc4J7rznhjHUjqhJlXM 090A== X-Gm-Message-State: AOAM533CglmDX9fYYJLO9l3somKQjPYxsPcH7upPrJwbfwR329iUAUTU JS4bXzw2ZPOKUdiTUGjK0Cnts7pWA7CDJpddW1r9zg== X-Received: by 2002:a4a:85ca:: with SMTP id u10mr6551230ooh.80.1621573213469; Thu, 20 May 2021 22:00:13 -0700 (PDT) Received: from 753933720722 named unknown by gmailapi.google.com with HTTPREST; Thu, 20 May 2021 22:00:12 -0700 MIME-Version: 1.0 In-Reply-To: <5d341df202facb3240a72cfb35e18167@codeaurora.org> References: <1621013713-6860-1-git-send-email-khsieh@codeaurora.org> <5d341df202facb3240a72cfb35e18167@codeaurora.org> From: Stephen Boyd User-Agent: alot/0.9.1 Date: Thu, 20 May 2021 22:00:12 -0700 Message-ID: Subject: Re: [PATCH v4 1/2] drm/msm/dp: handle irq_hpd with sink_count = 0 correctly To: khsieh@codeaurora.org Cc: agross@kernel.org, bjorn.andersson@linaro.org, robdclark@gmail.com, sean@poorly.run, vkoul@kernel.org, abhinavk@codeaurora.org, aravindh@codeaurora.org, linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org Content-Type: text/plain; charset="UTF-8" Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Quoting khsieh@codeaurora.org (2021-05-20 15:39:09) > On 2021-05-20 14:28, Stephen Boyd wrote: > > Quoting khsieh@codeaurora.org (2021-05-20 13:05:48) > >> On 2021-05-20 12:28, Stephen Boyd wrote: > >> >> Put dongle to D3 state so that it will not issue the unnecessary > >> >> second > >> >> irq_hpd with sink_count = 0. this will prevent the annoy but unharmful > >> >> DP_LINK_STATUS_UPDATED warning message. > >> >> Again, we can not disable hpd interrupt since dongle still attached > >> >> and > >> >> hdmi cable can be plugged in at any instant. > >> >> > >> > > >> > Right I'm not suggesting to disable hpd interrupt, just the hpd_irq > >> > interrupt once an unplug irq comes in, and do that in hardirq context. > >> > Also, I'm suggesting that we consider unplug as a higher priority if > >> > the > >> > hard irq handler is delayed for some reason and both an unplug irq and > >> > an hpd irq are pending in the hardware when the hard irq handler is > >> > running. Putting the dongle into D3 state won't fix these problems. > >> > >> > >> > >> The unplug interrupt is not happen in this case since dongle still > >> attached. > >> The unplug interrupt only happen when dongle unplugged. > > > > Agreed. > > > >> > >> I think you mistakenly think DP_LINK_STATUS_UPDATED is caused by > >> unplug > >> interrupt. > > > > Ok, got it. > > > >> DP_LINK_STATUS_UPDATED happen is due to dongle issue two consecutive > >> irq_hpd with sink_count = 0 when hdmi cable unplugged from dongle. > >> The first irq_hpd with sink_count = 0 is handled as expected to turn > >> off > >> display. > >> After that the second irq_hpd with sink_count = 0 is handled. > >> Since display had turned off, then there is nothing to do but spill > >> DP_LINK_STATUS_UPDATED warning message. > >> There is no unplug (hpd become low) happen in this case since dongle > >> still attached. > > > > Agreed. > > > >> > >> All interrupt (plug/irq_hpd and unplug) are required to be handled in > >> the order of happening. > >> We can not ignore any one. > >> For example, you plug/unplug two different resolution monitor > >> alternative to/from dongle and unplug dongle once for while. > >> > >> I think the race condition you describe here all had been taken care > >> with > >> 1) convert irq into event and store at event q in order. > >> 2) irq handled base on transaction. Next irq can be handled when > >> previous irq transaction is done. > >> > > > > I'm mostly trying to point out that the irq handling and masking needs > > to be done in the hard irq context and not in the kthread. It may or > > may > > not be related to this message that's printed. > > > > What happens if the hardirq is blocked by some other irq that takes a > > long time to process? Imagine this scenario: > > > > CPU0 CPU1 > > ---- ---- > > really_long_other_hardirq() { > > hpd_irq > > hpd_irq > > hpd low > > } > > > > dp_display_irq_handler() { > > > > > > > > } > > > > Shouldn't we ignore any hpd_irq events in this scenario? And shouldn't > > we be disabling the hpd_irq by masking it with DP_DP_IRQ_HPD_INT_MASK > > when hpd goes low (i.e. DP_DP_HPD_UNPLUG_INT_MASK)? > > > > 1) irq_hpd interrupt always happen before unplug interrupt > 2)if hdp_isr_status = (DP_DP_IRQ_HPD_INT_MASK | > DP_DP_HPD_UNPLUG_INT_MASK) at the time when read at > dp_display_irq_handler(), > then DP_DP_IRQ_HPD_INT_MASK will be add into evetn q first followed by > DP_DP_HPD_UNPLUG_INT_MASK be add into event q. > So that DP_DP_IRQ_HPD_INT_MASK will be executed by the event thread > before DP_DP_HPD_UNPLUG_INT_MASK. > On the other word, IRQ_HPD has higher priority over UNPLUG in the timing > matter. > By doing that we can shut down display gracefully. Ok. So you're saying that we want to put both events on the queue regardless, and put IRQ_HPD there first because we want to check the status bit? Doesn't reading the status bit require the dongle to be connected though? So if an unplug came in along with an irq_hpd we may queue both the irq_hpd and the unplug, but when it comes time to process the irq_hpd in the kthread the link will be gone and so trying the dpcd read for the link status will fail? > > If you insist, at hdp_isr_status = (DP_DP_IRQ_HPD_INT_MASK | > DP_DP_HPD_UNPLUG_INT_MASK) case, > we can have only add DP_DP_HPD_UNPLUG_INT_MASK to event q only by > dropping DP_DP_IRQ_HPD_INT_MASK. > Is this will work for you? > I'm not insisting on anything. I'm just trying to think of various corner cases that we're not handling in the code so we don't have to worry about them in the future.