Received: by 2002:a05:6a10:f347:0:0:0:0 with SMTP id d7csp1800201pxu; Tue, 24 Nov 2020 09:11:41 -0800 (PST) X-Google-Smtp-Source: ABdhPJxGRBZW6uDPJ6Y5C8gOUcxD681aiqwVZSoLhK+XiiTeUQ0IWpfMGnaAjfkCxWzonFMzttto X-Received: by 2002:a05:6402:38a:: with SMTP id o10mr4990939edv.349.1606237900702; Tue, 24 Nov 2020 09:11:40 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1606237900; cv=none; d=google.com; s=arc-20160816; b=ZXL//ryB1877XtIipBWaorSmRC8mn3ktIbJHElnnHdFtfDfGmbjv/u9n4lxxHZd5Cj H0cJbcKUdEBX3e1FqY8AHUCD3wVZQCWoE2tCp9KBDJWIjuF6AMrlcgkqxzgPU5TzhNCv z87ovn6RVoz2nQqU7Y41yAbxZ9obfDaEf1E9v066hvZ92pz92TVJ1Se0y/wedW8NxJoL s+Okh5OKcFeBk+hJ9i6+Oo4WHMMhc1MOHjhIVT44iXwl6z7W8/TqY5zCHFEkYaudGqgR frvdLChvXS/1BGLmkEKmevm3DeUdMx0QDYkF6wHv8dGe7izfO+2fKRK9iU638CNso1jD /big== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=iGYCPoxbPXb/Nle4GGVqLIpoK4S0/Gv0sux/bkFSTu8=; b=h2/LslUJl4ndNd/B6Kh+p7kAk3ZCM/YDgABJfEKslryi+rsRRM51A2FQJsWVcxSmsO 1NBxnBjUBEM1s6THpGPfj0skULHimT13NzVJlPPg3lqkH4HdrvzREAIYQkY6cS56inoy ddpYp1EBnxMcQLb118dFKdkxt0DUB7T8Y3DMn1c0Uqjbf+Pyl+ZV/iG+XnpxZ66Munwv L1HzOWW4AW5dg9Euz1RAmalC4hdj8Wjbw0tf0a9NEbzf8YVT9xwlCgpdGXzPXHOlLz3u eDOgcanqoBsbggi3hDAcRiFGebGcd2UpLTYm5tawOWPI2uwLw+A0wFbhH2B2tJnRCZok bAKw== 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=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id w26si6055242edt.3.2020.11.24.09.11.16; Tue, 24 Nov 2020 09:11:40 -0800 (PST) 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=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2403848AbgKXRIQ (ORCPT + 99 others); Tue, 24 Nov 2020 12:08:16 -0500 Received: from mail-wr1-f65.google.com ([209.85.221.65]:33255 "EHLO mail-wr1-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2403819AbgKXRIM (ORCPT ); Tue, 24 Nov 2020 12:08:12 -0500 Received: by mail-wr1-f65.google.com with SMTP id u12so23153096wrt.0; Tue, 24 Nov 2020 09:08:11 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=iGYCPoxbPXb/Nle4GGVqLIpoK4S0/Gv0sux/bkFSTu8=; b=qNu5Xxlk+mlT23nNVb6v2vEybyvSRjpCvcF81QB5lFQT9KlwzLwYZCQ4gL7c42z4TE DAFbuxTVW8VM+HkHB5/sp4rN3ctI5OoqrL1y5Q8ZbN2K+f/c2enthUYyA9hkeEWOuhUI UirR1uAulm0nnKntLHMsVgo9hl39THQIHFuugPN6MTgSnGrdXiSkYVJzsgkkAwNcRW0a PJ0BH5RG7DHxE6aaIpbNp4aiW+4z5C9n/zpbhaiTYmjfK0hjr8F436dMnEJ6zvRKUPjv ZD/TQy3p7KxYouLca9nbTCYYZwIRDY33+BG7o9suHbMWRkdnFl4r9zLxVHIyMQPhl5AE +B2A== X-Gm-Message-State: AOAM532fjo4awa2Bf9JvIcEOjW9VX3DIzAggmV1T72xZ4mbuThbTmxIf 31UltbaY/56KXzjI1nzWVQPUVQIRhV8= X-Received: by 2002:adf:a1c2:: with SMTP id v2mr6464916wrv.95.1606237690231; Tue, 24 Nov 2020 09:08:10 -0800 (PST) Received: from liuwe-devbox-debian-v2.j3c5onc20sse1dnehy4noqpfcg.zx.internal.cloudapp.net ([51.145.34.42]) by smtp.gmail.com with ESMTPSA id v20sm6419874wmh.44.2020.11.24.09.08.09 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 24 Nov 2020 09:08:09 -0800 (PST) From: Wei Liu To: Linux on Hyper-V List Cc: virtualization@lists.linux-foundation.org, Linux Kernel List , Michael Kelley , Vineeth Pillai , Sunil Muthuswamy , Nuno Das Neves , Wei Liu , Thomas Gleixner , Ingo Molnar , Borislav Petkov , x86@kernel.org (maintainer:X86 ARCHITECTURE (32-BIT AND 64-BIT)), "H. Peter Anvin" , Joerg Roedel , Bjorn Helgaas , Andy Shevchenko , Jon Derrick , YueHaibing , "Gustavo A. R. Silva" Subject: [PATCH v3 16/17] x86/ioapic: export a few functions and data structures via io_apic.h Date: Tue, 24 Nov 2020 17:07:43 +0000 Message-Id: <20201124170744.112180-17-wei.liu@kernel.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20201124170744.112180-1-wei.liu@kernel.org> References: <20201124170744.112180-1-wei.liu@kernel.org> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org We are about to implement an irqchip for IO-APIC when Linux runs as root on Microsoft Hypervisor. At the same time we would like to reuse existing code as much as possible. Move mp_chip_data to io_apic.h and make a few helper functions non-static. No functional change. Signed-off-by: Wei Liu --- arch/x86/include/asm/io_apic.h | 21 +++++++++++++++++++++ arch/x86/kernel/apic/io_apic.c | 28 +++++++++------------------- 2 files changed, 30 insertions(+), 19 deletions(-) diff --git a/arch/x86/include/asm/io_apic.h b/arch/x86/include/asm/io_apic.h index a1a26f6d3aa4..1375983a6028 100644 --- a/arch/x86/include/asm/io_apic.h +++ b/arch/x86/include/asm/io_apic.h @@ -152,6 +152,15 @@ extern unsigned long io_apic_irqs; #define io_apic_assign_pci_irqs \ (mp_irq_entries && !skip_ioapic_setup && io_apic_irqs) +struct mp_chip_data { + struct list_head irq_2_pin; + struct IO_APIC_route_entry entry; + int trigger; + int polarity; + u32 count; + bool isa_irq; +}; + struct irq_cfg; extern void ioapic_insert_resources(void); extern int arch_early_ioapic_init(void); @@ -195,6 +204,18 @@ extern void clear_IO_APIC(void); extern void restore_boot_irq_mode(void); extern int IO_APIC_get_PCI_irq_vector(int bus, int devfn, int pin); extern void print_IO_APICs(void); + +struct irq_data; +extern struct IO_APIC_route_entry ioapic_read_entry(int apic, int pin); +extern void ioapic_write_entry(int apic, int pin, struct IO_APIC_route_entry e); +extern void mask_ioapic_irq(struct irq_data *irq_data); +extern void unmask_ioapic_irq(struct irq_data *irq_data); +extern int ioapic_set_affinity(struct irq_data *irq_data, const struct cpumask *mask, bool force); +extern struct irq_domain *mp_ioapic_irqdomain(int ioapic); +enum irqchip_irq_state; +extern int ioapic_irq_get_chip_state(struct irq_data *irqd, + enum irqchip_irq_state which, + bool *state); #else /* !CONFIG_X86_IO_APIC */ #define IO_APIC_IRQ(x) 0 diff --git a/arch/x86/kernel/apic/io_apic.c b/arch/x86/kernel/apic/io_apic.c index 7b3c7e0d4a09..23047f98b5e4 100644 --- a/arch/x86/kernel/apic/io_apic.c +++ b/arch/x86/kernel/apic/io_apic.c @@ -88,15 +88,6 @@ struct irq_pin_list { int apic, pin; }; -struct mp_chip_data { - struct list_head irq_2_pin; - struct IO_APIC_route_entry entry; - int trigger; - int polarity; - u32 count; - bool isa_irq; -}; - struct mp_ioapic_gsi { u32 gsi_base; u32 gsi_end; @@ -154,7 +145,7 @@ static inline bool mp_is_legacy_irq(int irq) return irq >= 0 && irq < nr_legacy_irqs(); } -static inline struct irq_domain *mp_ioapic_irqdomain(int ioapic) +struct irq_domain *mp_ioapic_irqdomain(int ioapic) { return ioapics[ioapic].irqdomain; } @@ -301,7 +292,7 @@ static struct IO_APIC_route_entry __ioapic_read_entry(int apic, int pin) return eu.entry; } -static struct IO_APIC_route_entry ioapic_read_entry(int apic, int pin) +struct IO_APIC_route_entry ioapic_read_entry(int apic, int pin) { union entry_union eu; unsigned long flags; @@ -328,7 +319,7 @@ static void __ioapic_write_entry(int apic, int pin, struct IO_APIC_route_entry e io_apic_write(apic, 0x10 + 2*pin, eu.w1); } -static void ioapic_write_entry(int apic, int pin, struct IO_APIC_route_entry e) +void ioapic_write_entry(int apic, int pin, struct IO_APIC_route_entry e) { unsigned long flags; @@ -453,7 +444,7 @@ static void io_apic_sync(struct irq_pin_list *entry) readl(&io_apic->data); } -static void mask_ioapic_irq(struct irq_data *irq_data) +void mask_ioapic_irq(struct irq_data *irq_data) { struct mp_chip_data *data = irq_data->chip_data; unsigned long flags; @@ -468,7 +459,7 @@ static void __unmask_ioapic(struct mp_chip_data *data) io_apic_modify_irq(data, ~IO_APIC_REDIR_MASKED, 0, NULL); } -static void unmask_ioapic_irq(struct irq_data *irq_data) +void unmask_ioapic_irq(struct irq_data *irq_data) { struct mp_chip_data *data = irq_data->chip_data; unsigned long flags; @@ -1868,8 +1859,7 @@ static void ioapic_configure_entry(struct irq_data *irqd) __ioapic_write_entry(entry->apic, entry->pin, mpd->entry); } -static int ioapic_set_affinity(struct irq_data *irq_data, - const struct cpumask *mask, bool force) +int ioapic_set_affinity(struct irq_data *irq_data, const struct cpumask *mask, bool force) { struct irq_data *parent = irq_data->parent_data; unsigned long flags; @@ -1898,9 +1888,9 @@ static int ioapic_set_affinity(struct irq_data *irq_data, * * Verify that the corresponding Remote-IRR bits are clear. */ -static int ioapic_irq_get_chip_state(struct irq_data *irqd, - enum irqchip_irq_state which, - bool *state) +int ioapic_irq_get_chip_state(struct irq_data *irqd, + enum irqchip_irq_state which, + bool *state) { struct mp_chip_data *mcd = irqd->chip_data; struct IO_APIC_route_entry rentry; -- 2.20.1