Received: by 2002:ad5:474a:0:0:0:0:0 with SMTP id i10csp2395355imu; Thu, 24 Jan 2019 12:02:32 -0800 (PST) X-Google-Smtp-Source: ALg8bN4SsVJC2pQ7pdU0M4lmpSTMdy268eH6Sr8YW+Q2SUG46iUO25/4YzMFn//d+8R9gQDhw+QS X-Received: by 2002:a62:26c7:: with SMTP id m190mr8031957pfm.79.1548360152067; Thu, 24 Jan 2019 12:02:32 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1548360152; cv=none; d=google.com; s=arc-20160816; b=N7qs1WgHQZmPQ/xh+oyVH8kF6d4H0/EM8MkhiWTHz9HGn93DaE45HFuIsq0CeMfWLT 4mbnn0Jb9g9XTNNdXC/IYz1l4lEE1jQrpOQPRdQhUXYFyS/V/YWqkYVYbn3802r0lJyL X58l3MfFqd+cJ04gYTKPL1CMKlIBI0b3tBbsdBxgHEqLo8N9R8nnzD5Sva2IesQJQ5Gp okkQFH/s6XaETrjCGKXu4TUq7aGqRLo1YkwuNgHNyuKTWeAnzLUdiKy1MYMemkjWtaKM ovKXP1wtXFhVlRPW+DEQsgU+PwHs87LF4Uwhr8A9DKeeNxwMWWvghnonYscKKJkn1Tv5 po1w== 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=monmv+Q+yhULr05dZeZcfizGB37V3wRTebJEP57S6XQ=; b=zCPN6bKD6wU3FOPp+I651+CQdeEXk2/nnLjvQ+2ddwh+LqFSqcwZMdWph5fzhh6J4l 7vzaUiwNMJ/aMa3CV+mSU/rAthzdAL3G3pc1BlAHupUNX6VPxF3Zt2hGTQngu6w1yYIZ BWSwSQs7Du1gxW60k7K0y56IXQblAPB+ueHu4ku5CpcNIdqeot2wJ5sywoKsdGZtwbac zRikLxmDfB+TmNOq3cDWKXPd3V4KlNM1//QLBhpeueQkTZbHKJXOhyD4u1cjON4iVKpr uT8d6M0QF7+7Ph2pW8hlbaom0nMvALFi6FEWKBDtWCtPy2d64vYGOWY0APDojZOmoXyk 0d7A== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=tJ4lWDlu; 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 j20si21303602pgb.520.2019.01.24.12.02.17; Thu, 24 Jan 2019 12:02:32 -0800 (PST) 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=tJ4lWDlu; 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 S1732036AbfAXTdc (ORCPT + 99 others); Thu, 24 Jan 2019 14:33:32 -0500 Received: from mail.kernel.org ([198.145.29.99]:33254 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1730494AbfAXTd3 (ORCPT ); Thu, 24 Jan 2019 14:33:29 -0500 Received: from localhost (5356596B.cm-6-7b.dynamic.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 05FAD21903; Thu, 24 Jan 2019 19:33:27 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1548358408; bh=HIwgbqwBqHR2gpk+dildLN936vAp54HtB1s7qDNdgLI=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=tJ4lWDlukZNpedP7MXpy3rIP7ld1R2g89PkXP0a7K05jzopXosscnN5FPWm62QOE1 9v6UpS36dKIx3GokOvMJtaCK0cvOHzUVSeXlMY6ysVyGX6diQsp2eaO4Ya1oosG0Wg i5J8UkDvs9OrOHAVthV7ECyYDtkP4Io/2FRQNUq4= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Trent Piepho , Niklas Cassel , Gustavo Pimentel , Stanimir Varbanov , Marc Zyngier , Lorenzo Pieralisi Subject: [PATCH 4.14 62/63] PCI: dwc: Move interrupt acking into the proper callback Date: Thu, 24 Jan 2019 20:20:51 +0100 Message-Id: <20190124190202.497835281@linuxfoundation.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190124190155.176570028@linuxfoundation.org> References: <20190124190155.176570028@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 4.14-stable review patch. If anyone has any objections, please let me know. ------------------ From: Marc Zyngier commit 3f7bb2ec20ce07c02b2002349d256c91a463fcc5 upstream. The write to the status register is really an ACK for the HW, and should be treated as such by the driver. Let's move it to the irq_ack() callback, which will prevent people from moving it around in order to paper over other bugs. Fixes: 8c934095fa2f ("PCI: dwc: Clear MSI interrupt status after it is handled, not before") Fixes: 7c5925afbc58 ("PCI: dwc: Move MSI IRQs allocation to IRQ domains hierarchical API") Link: https://lore.kernel.org/linux-pci/20181113225734.8026-1-marc.zyngier@arm.com/ Reported-by: Trent Piepho Tested-by: Niklas Cassel Tested-by: Gustavo Pimentel Tested-by: Stanimir Varbanov Signed-off-by: Marc Zyngier [lorenzo.pieralisi@arm.com: updated commit log] Signed-off-by: Lorenzo Pieralisi Cc: stable@vger.kernel.org Signed-off-by: Greg Kroah-Hartman --- drivers/pci/dwc/pcie-designware-host.c | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) --- a/drivers/pci/dwc/pcie-designware-host.c +++ b/drivers/pci/dwc/pcie-designware-host.c @@ -45,8 +45,19 @@ static int dw_pcie_wr_own_conf(struct pc return dw_pcie_write(pci->dbi_base + where, size, val); } +static void dwc_irq_ack(struct irq_data *d) +{ + struct msi_desc *msi = irq_data_get_msi_desc(d); + struct pcie_port *pp = msi_desc_to_pci_sysdata(msi); + int pos = d->hwirq % 32; + int i = d->hwirq / 32; + + dw_pcie_wr_own_conf(pp, PCIE_MSI_INTR0_STATUS + i * 12, 4, BIT(pos)); +} + static struct irq_chip dw_msi_irq_chip = { .name = "PCI-MSI", + .irq_ack = dwc_irq_ack, .irq_enable = pci_msi_unmask_irq, .irq_disable = pci_msi_mask_irq, .irq_mask = pci_msi_mask_irq, @@ -72,8 +83,6 @@ irqreturn_t dw_handle_msi_irq(struct pci pos)) != 32) { irq = irq_find_mapping(pp->irq_domain, i * 32 + pos); generic_handle_irq(irq); - dw_pcie_wr_own_conf(pp, PCIE_MSI_INTR0_STATUS + i * 12, - 4, 1 << pos); pos++; } } @@ -263,7 +272,7 @@ static struct msi_controller dw_pcie_msi static int dw_pcie_msi_map(struct irq_domain *domain, unsigned int irq, irq_hw_number_t hwirq) { - irq_set_chip_and_handler(irq, &dw_msi_irq_chip, handle_simple_irq); + irq_set_chip_and_handler(irq, &dw_msi_irq_chip, handle_edge_irq); irq_set_chip_data(irq, domain->host_data); return 0;