linux/arch/x86/kernel/apic/x2apic_cluster.c

// SPDX-License-Identifier: GPL-2.0

#include <linux/cpuhotplug.h>
#include <linux/cpumask.h>
#include <linux/slab.h>
#include <linux/mm.h>

#include <asm/apic.h>

#include "local.h"

#define apic_cluster(apicid)

/*
 * __x2apic_send_IPI_mask() possibly needs to read
 * x86_cpu_to_logical_apicid for all online cpus in a sequential way.
 * Using per cpu variable would cost one cache line per cpu.
 */
static u32 *x86_cpu_to_logical_apicid __read_mostly;

static DEFINE_PER_CPU(cpumask_var_t, ipi_mask);
static DEFINE_PER_CPU_READ_MOSTLY(struct cpumask *, cluster_masks);

static int x2apic_acpi_madt_oem_check(char *oem_id, char *oem_table_id)
{}

static void x2apic_send_IPI(int cpu, int vector)
{}

static void
__x2apic_send_IPI_mask(const struct cpumask *mask, int vector, int apic_dest)
{}

static void x2apic_send_IPI_mask(const struct cpumask *mask, int vector)
{}

static void
x2apic_send_IPI_mask_allbutself(const struct cpumask *mask, int vector)
{}

static u32 x2apic_calc_apicid(unsigned int cpu)
{}

static void init_x2apic_ldr(void)
{}

/*
 * As an optimisation during boot, set the cluster_mask for all present
 * CPUs at once, to prevent each of them having to iterate over the others
 * to find the existing cluster_mask.
 */
static void prefill_clustermask(struct cpumask *cmsk, unsigned int cpu, u32 cluster)
{}

static int alloc_clustermask(unsigned int cpu, u32 cluster, int node)
{}

static int x2apic_prepare_cpu(unsigned int cpu)
{}

static int x2apic_dead_cpu(unsigned int dead_cpu)
{}

static int x2apic_cluster_probe(void)
{}

static struct apic apic_x2apic_cluster __ro_after_init =;

apic_driver();