Received: by 2002:a05:6a10:a852:0:0:0:0 with SMTP id d18csp3983948pxy; Tue, 4 May 2021 14:49:10 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxp5eOu7KPit+jblg5rM5Rjwiz/SyIXSh/zq08zGevF455W+6IkDfCr1mxpTUfigG0IsJTM X-Received: by 2002:a17:907:2bc7:: with SMTP id gv7mr24007838ejc.187.1620164949803; Tue, 04 May 2021 14:49:09 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1620164949; cv=none; d=google.com; s=arc-20160816; b=F9FcgIpXhe1EfwBYCNr5uYo5LaMG3syYQ5Lx1Zx2IJWatGIWyPLveWoi33kJ1x2xls 1Agq6r3JHDMoy/0LrOhoVXIKRYHS6fGG4Jh1Ihn7ssrBBadUndXvXdDQj4XR807sLABq TOTLcMMrOG5BlbOI2sLOMoq6sRv6S6CzirG4nZrc3+OmN4Lnu4BnIiETwLGya82znUb6 iSwdvjM+xVIFrzex19i5YazHyWzmNHACR8NqVNsHMnl61QXoi7+A7A8Esm9w9URvGMh2 vJAQwQx7NcgHsu/VkJTm1I9svCyBpe74v5QVq/QwWyW25w8yVDGTUoeLqsI1a1Qy5zby YlCw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:references:in-reply-to:message-id:date:subject :cc:to:from:ironport-sdr:ironport-sdr; bh=SEehx2I6Bgrjdlz7bE+TU1wxcgRyO4hTbdmKjaXt1QA=; b=TEzR21Z/nRo+13eZaylK518/VSdH4VKruo63d2LYHHqAjpXKF1rdiDDDZA7wH+Sna5 oBb7smlExbptY1asFuFY5LhkYT89H0TCwMZNJ4aPB/qUVUDamIpBp9REJutWAp1pbLc/ LU9Yd1QzKcS9LBBj8iLn1vbtx3y89A7eYWaBDsnhNtFlf90FfNdHlGhRUDZpmhQBtHV1 Xt3UVkrJEEcQmuc78AOTe60WTy7yomaJslI8hDj3Zz7zAWQB41Ov9XpnxOB81gav8MXZ a4fsglahCA9NfaDGYKmarVbUw2+OnRsTQRNYzT7BzGzlztT9e1AgzS+4rPaP7qhCLXkR G1OQ== ARC-Authentication-Results: i=1; mx.google.com; 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=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id y2si779040edr.397.2021.05.04.14.48.46; Tue, 04 May 2021 14:49:09 -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; 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=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232412AbhEDTMp (ORCPT + 99 others); Tue, 4 May 2021 15:12:45 -0400 Received: from mga03.intel.com ([134.134.136.65]:9835 "EHLO mga03.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232163AbhEDTMh (ORCPT ); Tue, 4 May 2021 15:12:37 -0400 IronPort-SDR: nkYOEIHVUwmCDMct4llsQ9OPQ1aPSCg8werZa/vLk4E5Lj+OezlY63+cTvpfLVkwpXwIl5H2fm 8hi50gDLZrHQ== X-IronPort-AV: E=McAfee;i="6200,9189,9974"; a="198115955" X-IronPort-AV: E=Sophos;i="5.82,272,1613462400"; d="scan'208";a="198115955" Received: from fmsmga007.fm.intel.com ([10.253.24.52]) by orsmga103.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 04 May 2021 12:11:41 -0700 IronPort-SDR: IK6bB7wYh6Fq1z+4b4l2CKAy6AQJOKFWjnU47QxqU+svFLNmNZdKBQJpGpTG2XWFRYHsFlmidk XI2OCd794ozw== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.82,272,1613462400"; d="scan'208";a="396245287" Received: from ranerica-svr.sc.intel.com ([172.25.110.23]) by fmsmga007.fm.intel.com with ESMTP; 04 May 2021 12:11:40 -0700 From: Ricardo Neri To: Joerg Roedel , Will Deacon Cc: woodhouse@vger.kernel.org, Jacob Pan , Lu Baolu , Stephane Eranian , Thomas Gleixner , Ingo Molnar , Borislav Petkov , iommu@lists.linux-foundation.org, x86@kernel.org, linux-kernel@vger.kernel.org, "Ravi V. Shankar" , Ricardo Neri , Ricardo Neri , Andi Kleen , David Woodhouse Subject: [RFC PATCH v5 3/7] iommu/vt-d: Rework prepare_irte() to support per-irq delivery mode Date: Tue, 4 May 2021 12:10:45 -0700 Message-Id: <20210504191049.22661-4-ricardo.neri-calderon@linux.intel.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20210504191049.22661-1-ricardo.neri-calderon@linux.intel.com> References: <20210504191049.22661-1-ricardo.neri-calderon@linux.intel.com> Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org A previous changeset introduced a new member to struct irq_cfg to specify the delivery mode of an interrupt. Supporting the configuration of the delivery mode would require adding a third argument to prepare_irte(). Instead, simply take a pointer to an irq_cfg data structure as the only argument. Always configure the delivery mode of the Interrupt Remapping Table Entry using the values specified in the irq_cfg data structure. This change does not change the existing behavior, as the delivery mode of the APIC is used to configure the irq_cfg of each irq. Cc: Andi Kleen Cc: Borislav Petkov Cc: David Woodhouse (supporter:INTEL IOMMU (VT-d)) Cc: "Ravi V. Shankar" Cc: Ingo Molnar Cc: Jacob Pan Cc: Lu Baolu (supporter:INTEL IOMMU (VT-d)) Cc: Stephane Eranian Cc: Thomas Gleixner Cc: iommu@lists.linux-foundation.org (open list:INTEL IOMMU (VT-d)) Cc: x86@kernel.org Reviewed-by: Ashok Raj Signed-off-by: Ricardo Neri --- Changes since v4: * None Changes since v3: * None Changes since v2: * None Changes since v1: * Introduced this patch. --- drivers/iommu/intel/irq_remapping.c | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/drivers/iommu/intel/irq_remapping.c b/drivers/iommu/intel/irq_remapping.c index 611ef5243cb6..daa5df53db59 100644 --- a/drivers/iommu/intel/irq_remapping.c +++ b/drivers/iommu/intel/irq_remapping.c @@ -1104,7 +1104,7 @@ void intel_irq_remap_add_device(struct dmar_pci_notify_info *info) dev_set_msi_domain(&info->dev->dev, map_dev_to_ir(info->dev)); } -static void prepare_irte(struct irte *irte, int vector, unsigned int dest) +static void prepare_irte(struct irte *irte, struct irq_cfg *irq_cfg) { memset(irte, 0, sizeof(*irte)); @@ -1118,9 +1118,9 @@ static void prepare_irte(struct irte *irte, int vector, unsigned int dest) * irq migration in the presence of interrupt-remapping. */ irte->trigger_mode = 0; - irte->dlvry_mode = apic->delivery_mode; - irte->vector = vector; - irte->dest_id = IRTE_DEST(dest); + irte->dlvry_mode = irq_cfg->delivery_mode; + irte->vector = irq_cfg->vector; + irte->dest_id = IRTE_DEST(irq_cfg->dest_apicid); irte->redir_hint = 1; } @@ -1261,8 +1261,7 @@ static void intel_irq_remapping_prepare_irte(struct intel_ir_data *data, { struct irte *irte = &data->irte_entry; - prepare_irte(irte, irq_cfg->vector, irq_cfg->dest_apicid); - + prepare_irte(irte, irq_cfg); switch (info->type) { case X86_IRQ_ALLOC_TYPE_IOAPIC: /* Set source-id of interrupt request */ -- 2.17.1