From patchwork Fri Jan 13 21:35:14 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tim Gardner X-Patchwork-Id: 715282 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from huckleberry.canonical.com (huckleberry.canonical.com [91.189.94.19]) by ozlabs.org (Postfix) with ESMTP id 3v0bXW0K27z9vFD; Sat, 14 Jan 2017 08:35:55 +1100 (AEDT) Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=canonical-com.20150623.gappssmtp.com header.i=@canonical-com.20150623.gappssmtp.com header.b="UXGocY3q"; dkim-atps=neutral Received: from localhost ([127.0.0.1] helo=huckleberry.canonical.com) by huckleberry.canonical.com with esmtp (Exim 4.76) (envelope-from ) id 1cS9Vn-0007pR-TT; Fri, 13 Jan 2017 21:35:51 +0000 Received: from mail-it0-f43.google.com ([209.85.214.43]) by huckleberry.canonical.com with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.76) (envelope-from ) id 1cS9VO-0007ct-OW for kernel-team@lists.ubuntu.com; Fri, 13 Jan 2017 21:35:26 +0000 Received: by mail-it0-f43.google.com with SMTP id c7so41234883itd.1 for ; Fri, 13 Jan 2017 13:35:26 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=canonical-com.20150623.gappssmtp.com; s=20150623; h=from:to:subject:date:message-id:in-reply-to:references; bh=Qcwkm2wbFaMESVsEI308OFei4FXGVu3endjqz32rnd4=; b=UXGocY3qibuH3Ew5sErvXp/zlhHgYHK+VC/OUraPmvU0MYsmVgaqjpicfcBoS+SHjv Bbh92WfLH5qwJ7OiCSZSeoPwM0dXWyV7fBz798RA/sykQ81XJ9C2jCYeyLF9VQgjEue2 qtUrTscU71B8LTJi/is0/sD/7IVF+Gw0oQFL/2uOkVxSWEiogONmP1ERfYNg92Wq6B2G i1Ss8rGyZIzcVjZK6j/P+m5yyXg2tJ8JlZyueXHTbdrSqr0OgryCoY3fxWKc2163gfHt UZC9Tqp/pXYq1XzEdlDteuXlNS4e8T35WwLBGj3BBafavedRy7iv6CTciaiYyk/Gbqqe NpXg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references; bh=Qcwkm2wbFaMESVsEI308OFei4FXGVu3endjqz32rnd4=; b=YXYU+FL8co0Wgq1VzoOaHT5W0G4r9T4eMyuN9EEnYa5lRLI3ViABZFLcJwlnniUB4G +jqHrXb0RtLA/+YuqWu1b9B1m7ji4HT1pN509Z9xZvAVrGdReJRW24U66YxXwkJIGaH5 dPO5QBwB949jpXyc6D4fjgmfTlPvOi9BMceOj/CZqc/esfyoiFI7eyA7/1wS3JIW/RrG 9C1GluyjL7jo/a0R8auMb4/6U065iuJv10alowsLfsTgDkA8HjH/fXwcTI9sJgXgt8PU zSeO6d0W+PdBTVTfoHlUtdH2p+SnhDoBNCgPZvje+xMZoo3xjDWCzLSqPW6VaH1r0omw pDPQ== X-Gm-Message-State: AIkVDXK4PN29xixVN7ce1l3QcO9UWGd9p2Umf/tTe0p+Cc6HFXkF0HtTlVbvNMjoYDxrhvn6 X-Received: by 10.36.103.198 with SMTP id u189mr4573804itc.9.1484343325543; Fri, 13 Jan 2017 13:35:25 -0800 (PST) Received: from localhost.localdomain (host-98-127-250-84.bln-mt.client.bresnan.net. [98.127.250.84]) by smtp.gmail.com with ESMTPSA id g130sm1509698ita.10.2017.01.13.13.35.24 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Fri, 13 Jan 2017 13:35:25 -0800 (PST) From: Tim Gardner To: kernel-team@lists.ubuntu.com Subject: [PATCH 3/8] PCI: Update BARs using property bits appropriate for type Date: Fri, 13 Jan 2017 14:35:14 -0700 Message-Id: <1484343319-27051-4-git-send-email-tim.gardner@canonical.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1484343319-27051-1-git-send-email-tim.gardner@canonical.com> References: <1484343319-27051-1-git-send-email-tim.gardner@canonical.com> X-BeenThere: kernel-team@lists.ubuntu.com X-Mailman-Version: 2.1.14 Precedence: list List-Id: Kernel team discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: kernel-team-bounces@lists.ubuntu.com Sender: kernel-team-bounces@lists.ubuntu.com From: Bjorn Helgaas BugLink: http://bugs.launchpad.net/bugs/1625318 The BAR property bits (0-3 for memory BARs, 0-1 for I/O BARs) are supposed to be read-only, but we do save them in res->flags and include them when updating the BAR. Mask the I/O property bits with ~PCI_BASE_ADDRESS_IO_MASK (0x3) instead of PCI_REGION_FLAG_MASK (0xf) to make it obvious that we can't corrupt bits 2-3 of I/O addresses. Use PCI_ROM_ADDRESS_MASK for ROM BARs. This means we'll only check the top 21 bits (instead of the 28 bits we used to check) of a ROM BAR to see if the update was successful. Signed-off-by: Bjorn Helgaas (cherry picked from commit 45d004f4afefdd8d79916ee6d97a9ecd94bb1ffe) Signed-off-by: Tim Gardner --- drivers/pci/setup-res.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/drivers/pci/setup-res.c b/drivers/pci/setup-res.c index 4ff1e19..363c748 100644 --- a/drivers/pci/setup-res.c +++ b/drivers/pci/setup-res.c @@ -59,12 +59,17 @@ void pci_update_resource(struct pci_dev *dev, int resno) return; pcibios_resource_to_bus(dev->bus, ®ion, res); + new = region.start; - new = region.start | (res->flags & PCI_REGION_FLAG_MASK); - if (res->flags & IORESOURCE_IO) + if (res->flags & IORESOURCE_IO) { mask = (u32)PCI_BASE_ADDRESS_IO_MASK; - else + new |= res->flags & ~PCI_BASE_ADDRESS_IO_MASK; + } else if (resno == PCI_ROM_RESOURCE) { + mask = (u32)PCI_ROM_ADDRESS_MASK; + } else { mask = (u32)PCI_BASE_ADDRESS_MEM_MASK; + new |= res->flags & ~PCI_BASE_ADDRESS_MEM_MASK; + } reg = pci_resource_bar(dev, resno, &type); if (!reg)