Received: by 2002:a25:c593:0:0:0:0:0 with SMTP id v141csp731900ybe; Thu, 5 Sep 2019 05:13:18 -0700 (PDT) X-Google-Smtp-Source: APXvYqyHI/2VjpJD9SEh/JWLxgH9zANII/zMKcD79Y25PJTmcL9swi2iEDSRYQS2f5xId9Qm+bZ8 X-Received: by 2002:a63:6407:: with SMTP id y7mr2843471pgb.188.1567685597971; Thu, 05 Sep 2019 05:13:17 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1567685597; cv=none; d=google.com; s=arc-20160816; b=vPk7/bAoVTdo3YdewCEjs/ojyU1TpyxtmrKY034UZEmel3TH7KuABXyfS9bCSUfm39 YCW1uoQ72gPmRWmof+gXGZUOKdjgj1dF8h6hbQXFIIKiTPH3ShM52AHHFZBmZFmd1LcB hhCweCAzQaJmayTxYcp0KfJXzSsmFr5Ru93dK5eJQPEuzGvoZaPCDUKVcHXWua4WUlEG WOGcEmq5dL99Q67eOhL2DrbnR0Yz1LoLw3ENplhVg3pMi4xrQCCFiI2GsLnkocViZDX3 iu7hGSqtlc7o87MJAEbFPFGXDSAsy4uxHFx7sV/vCG143n6vZux7MLCxiRxE/OLdWJrh 0cdw== 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 :content-language:in-reply-to:mime-version:user-agent:date :message-id:organization:from:references:cc:to:subject; bh=/uqdBRn9G7JAIwuJhcwUQQWdvO6IPzFBM7Oh773Z/IU=; b=bafKHCTTHsUntyONUeZ7QodoAfthaY74pOa/8K/6w16/KL0vn1L2TQGUXB9TGAp/hA X1eiMkxDaIw2/JnNux/r3TF8LA0Cv7WMf41CGZIrGU1IL4xd8LGYr1N/WEek3PbA1JNF RW/Ifxrd2BOBxeIYhJYF/PMddS2p6Mb7wBshzCKoj3qJSvHjUTJxUqvjVXgh5gQr4n2D M/d/ueujBftXuS8hSrmncicsawdB2axSEpmuOhi4aaffofVztf/mpryLH4mKUyFZqtRZ I9yGzQUo18TU5TLw40GovNyiK9+ogS2siccDBYwm8OQcA3SkuO/Vo/Qz0M/TJ6Oc/2BE GqLA== ARC-Authentication-Results: i=1; mx.google.com; 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; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id k23si1878829pfa.261.2019.09.05.05.13.01; Thu, 05 Sep 2019 05:13:17 -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; 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; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1731935AbfIEKCP (ORCPT + 99 others); Thu, 5 Sep 2019 06:02:15 -0400 Received: from foss.arm.com ([217.140.110.172]:40868 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728267AbfIEKCO (ORCPT ); Thu, 5 Sep 2019 06:02:14 -0400 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id D53DB1576; Thu, 5 Sep 2019 03:02:13 -0700 (PDT) Received: from [10.1.197.61] (usa-sjc-imap-foss1.foss.arm.com [10.121.207.14]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 9A4C93F67D; Thu, 5 Sep 2019 03:02:12 -0700 (PDT) Subject: Re: PCI/kernel msi code vs GIC ITS driver conflict? To: John Garry , Andrew Murray Cc: Thomas Gleixner , Bjorn Helgaas , Linux PCI , Linuxarm , "luojiaxing@huawei.com" , "linux-kernel@vger.kernel.org" References: <5fd4c1cf-76c1-4054-3754-549317509310@kernel.org> <20190904102537.GV9720@e119886-lin.cambridge.arm.com> <8f1c1fe6-c0d4-1805-b119-6a48a4900e6d@kernel.org> <84f6756f-79f2-2e46-fe44-9a46be69f99d@huawei.com> From: Marc Zyngier Organization: Approximate Message-ID: <651b4d5f-2d86-65dc-1232-580445852752@kernel.org> Date: Thu, 5 Sep 2019 11:02:10 +0100 User-Agent: Mozilla/5.0 (X11; Linux aarch64; rv:60.0) Gecko/20100101 Thunderbird/60.8.0 MIME-Version: 1.0 In-Reply-To: <84f6756f-79f2-2e46-fe44-9a46be69f99d@huawei.com> Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 05/09/2019 10:39, John Garry wrote: >> >> That's a "feature" of the architecture. The ITT is sized by the number >> of bits used to index the table, meaning that you can only describe a >> power of two >= 2. >> >> John, could you stick a "#define DEBUG 1" at the top of irq-gic-v3-its.c >> and report the LPI allocations for this device? >> > > Hi Marc, > > As requested, I enabled debug for that driver and here are some kernel > log snippets: > > [ 8.435707] hisi_sas_v3_hw 0000:74:02.0: Adding to iommu group 0 > [ 8.461467] scsi host0: hisi_sas_v3_hw > [ 9.683463] ITS: alloc 9920:32 > [ 9.686509] ITT 32 entries, 5 bits > [ 9.690044] ID:0 pID:9920 vID:23 > [ 9.693263] ID:1 pID:9921 vID:24 > [ 9.696480] ID:2 pID:9922 vID:25 > [ 9.699696] ID:3 pID:9923 vID:26 > [ 9.702911] ID:4 pID:9924 vID:27 > [ 9.706128] ID:5 pID:9925 vID:28 > [ 9.709344] ID:6 pID:9926 vID:29 > [ 9.712560] ID:7 pID:9927 vID:30 > [ 9.715776] ID:8 pID:9928 vID:31 > [ 9.718990] ID:9 pID:9929 vID:32 > [ 9.722207] ID:10 pID:9930 vID:33 > [ 9.725510] ID:11 pID:9931 vID:34 > [ 9.728813] ID:12 pID:9932 vID:35 > [ 9.732116] ID:13 pID:9933 vID:36 > [ 9.735419] ID:14 pID:9934 vID:37 > [ 9.738721] ID:15 pID:9935 vID:38 > [ 9.742024] ID:16 pID:9936 vID:39 > > > > (none)$ echo 0000:74:02.0 > ./sys/bus/pci/drivers/hisi_sas_v3_hw/unbind > > > > root@(none)$ > $ echo 0000:74:02.0 > ./sys/bus/pci/drivers/hisi_sas_v3_hw/bind > [ 41.110557] scsi host0: hisi_sas_v3_hw > [ 42.335455] Reusing ITT for devID 7410 > [ 42.359151] hisi_sas_v3_hw: probe of 0000:74:02.0 failed with error -2 > sh: echo: write error: No such device > root@(none)$ Very interesting. Somehow, we think that this is a *new* device that aliases with itself. Needless to say, that's unexpected. My hunch is that something goes wrong when freeing the device. Can you try adding the patch below and report what is happening on unbind? Thanks, M. diff --git a/drivers/irqchip/irq-gic-v3-its.c b/drivers/irqchip/irq-gic-v3-its.c index 1b5c3672aea2..3fed87e551d9 100644 --- a/drivers/irqchip/irq-gic-v3-its.c +++ b/drivers/irqchip/irq-gic-v3-its.c @@ -2651,6 +2651,8 @@ static void its_irq_domain_free(struct irq_domain *domain, unsigned int virq, /* Nuke the entry in the domain */ irq_domain_reset_irq_data(data); + + pr_debug("Freed devid %x LPI %ld\n", its_dev->device_id, data->hwirq); } mutex_lock(&its->dev_alloc_lock); @@ -2667,6 +2669,7 @@ static void its_irq_domain_free(struct irq_domain *domain, unsigned int virq, its_dev->event_map.nr_lpis); kfree(its_dev->event_map.col_map); + pr_debug("Unmap devid %x\n", its_dev->device_id); /* Unmap device/itt */ its_send_mapd(its_dev, 0); its_free_device(its_dev); -- Jazz is not dead, it just smells funny...