From patchwork Fri Jun 5 14:11:01 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Joerg Roedel X-Patchwork-Id: 6554291 X-Patchwork-Delegate: bhelgaas@google.com Return-Path: X-Original-To: patchwork-linux-pci@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork2.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.136]) by patchwork2.web.kernel.org (Postfix) with ESMTP id 0C085C0020 for ; Fri, 5 Jun 2015 14:12:15 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 3BBF9206FD for ; Fri, 5 Jun 2015 14:12:14 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 9317820712 for ; Fri, 5 Jun 2015 14:12:12 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1423088AbbFEOLw (ORCPT ); Fri, 5 Jun 2015 10:11:52 -0400 Received: from 8bytes.org ([81.169.241.247]:59232 "EHLO theia.8bytes.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1423047AbbFEOLW (ORCPT ); Fri, 5 Jun 2015 10:11:22 -0400 Received: by theia.8bytes.org (Postfix, from userid 1000) id E73797CA; Fri, 5 Jun 2015 16:11:12 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=8bytes.org; s=mail-1; t=1433513472; bh=GWY3rYgQB6BL7nuPZAKWi2jwHbHqTFw/XQWQXpK/W0E=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=mDE2vngiXiE5LZW+pP3hGVMozg/+OobX+VHXoTtVLAYkGJqVYtXLLaiCKSvp+ON7D 4nwmumwyDMXvJnp89IX9h6TCEnOpyI+mVgi8HPgF8L8JvyYRvKCxfUYene6ksbgyNc 1ssKooY/dmP1w6RA5qrQ2MUtJ0dXFUvrljjknsjy1nga75TOdIUyKXbFIPlaALmeeu CtRJV06j/eXHHBrTXorCdg2/AuN6ceXikAgsadBirHsUf9cuHjBSGujGouUkb1PU5G RiZmS+cXHrLiHf8TUl0B9/CDrak1VJxdNRbrFA8OKnP5tfE+ON0XkAgkCIeTn6ymz6 pxKFOXCnJNV1g== From: Joerg Roedel To: iommu@lists.linux-foundation.org Cc: zhen-hual@hp.com, bhe@redhat.com, dwmw2@infradead.org, vgoyal@redhat.com, dyoung@redhat.com, alex.williamson@redhat.com, ddutile@redhat.com, ishii.hironobu@jp.fujitsu.com, indou.takao@jp.fujitsu.com, bhelgaas@google.com, doug.hatch@hp.com, jerry.hoemann@hp.com, tom.vaden@hp.com, li.zhang6@hp.com, lisa.mitchell@hp.com, billsumnerlinux@gmail.com, rwright@hp.com, linux-kernel@vger.kernel.org, linux-pci@vger.kernel.org, kexec@lists.infradead.org, joro@8bytes.org, jroedel@suse.de Subject: [PATCH 15/17] iommu/vt-d: Mark irt entries from old kernel as allocated Date: Fri, 5 Jun 2015 16:11:01 +0200 Message-Id: <1433513463-19128-16-git-send-email-joro@8bytes.org> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1433513463-19128-1-git-send-email-joro@8bytes.org> References: <1433513463-19128-1-git-send-email-joro@8bytes.org> Sender: linux-pci-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-pci@vger.kernel.org X-Spam-Status: No, score=-6.8 required=5.0 tests=BAYES_00,DKIM_SIGNED, RCVD_IN_DNSWL_HI,T_DKIM_INVALID,T_RP_MATCHES_RCVD,UNPARSEABLE_RELAY autolearn=ham version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP From: Joerg Roedel After we copied over all irq remapping entries from the old kernel we need to mark the present entries as allocated in our table too. Otherwise we might overwrite entries from the previous kernel and cause DMAR faults. Tested-by: Baoquan He Signed-off-by: Joerg Roedel --- drivers/iommu/intel_irq_remapping.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/drivers/iommu/intel_irq_remapping.c b/drivers/iommu/intel_irq_remapping.c index fd6c25b..f7b02ca 100644 --- a/drivers/iommu/intel_irq_remapping.c +++ b/drivers/iommu/intel_irq_remapping.c @@ -1300,6 +1300,7 @@ static int iommu_load_old_irte(struct intel_iommu *iommu) { struct irte *old_ir_table; phys_addr_t irt_phys; + unsigned int i; size_t size; u64 irta; @@ -1325,6 +1326,15 @@ static int iommu_load_old_irte(struct intel_iommu *iommu) iommu->ir_table->base_old_phys = irt_phys; iommu->ir_table->base_old_virt = old_ir_table; + /* + * Now check the table for used entries and mark those as + * allocated in the bitmap + */ + for (i = 0; i < INTR_REMAP_TABLE_ENTRIES; i++) { + if (iommu->ir_table->base[i].present) + bitmap_set(iommu->ir_table->bitmap, i, 1); + } + return 0; }