89 lines · c
1/* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */2/*3 * Copyright(c) 2015 - 2020 Intel Corporation.4 */5 6#ifndef _HFI1_AFFINITY_H7#define _HFI1_AFFINITY_H8 9#include "hfi.h"10 11enum irq_type {12 IRQ_SDMA,13 IRQ_RCVCTXT,14 IRQ_NETDEVCTXT,15 IRQ_GENERAL,16 IRQ_OTHER17};18 19/* Can be used for both memory and cpu */20enum affinity_flags {21 AFF_AUTO,22 AFF_NUMA_LOCAL,23 AFF_DEV_LOCAL,24 AFF_IRQ_LOCAL25};26 27struct cpu_mask_set {28 struct cpumask mask;29 struct cpumask used;30 uint gen;31};32 33struct hfi1_msix_entry;34 35/* Initialize non-HT cpu cores mask */36void init_real_cpu_mask(void);37/* Initialize driver affinity data */38int hfi1_dev_affinity_init(struct hfi1_devdata *dd);39/*40 * Set IRQ affinity to a CPU. The function will determine the41 * CPU and set the affinity to it.42 */43int hfi1_get_irq_affinity(struct hfi1_devdata *dd,44 struct hfi1_msix_entry *msix);45/*46 * Remove the IRQ's CPU affinity. This function also updates47 * any internal CPU tracking data48 */49void hfi1_put_irq_affinity(struct hfi1_devdata *dd,50 struct hfi1_msix_entry *msix);51/*52 * Determine a CPU affinity for a user process, if the process does not53 * have an affinity set yet.54 */55int hfi1_get_proc_affinity(int node);56/* Release a CPU used by a user process. */57void hfi1_put_proc_affinity(int cpu);58 59struct hfi1_affinity_node {60 int node;61 u16 __percpu *comp_vect_affinity;62 struct cpu_mask_set def_intr;63 struct cpu_mask_set rcv_intr;64 struct cpumask general_intr_mask;65 struct cpumask comp_vect_mask;66 struct list_head list;67};68 69struct hfi1_affinity_node_list {70 struct list_head list;71 struct cpumask real_cpu_mask;72 struct cpu_mask_set proc;73 int num_core_siblings;74 int num_possible_nodes;75 int num_online_nodes;76 int num_online_cpus;77 struct mutex lock; /* protects affinity nodes */78};79 80int node_affinity_init(void);81void node_affinity_destroy_all(void);82extern struct hfi1_affinity_node_list node_affinity;83void hfi1_dev_affinity_clean_up(struct hfi1_devdata *dd);84int hfi1_comp_vect_mappings_lookup(struct rvt_dev_info *rdi, int comp_vect);85int hfi1_comp_vectors_set_up(struct hfi1_devdata *dd);86void hfi1_comp_vectors_clean_up(struct hfi1_devdata *dd);87 88#endif /* _HFI1_AFFINITY_H */89