brintos

brintos / linux-shallow public Read only

0
0
Text · 2.1 KiB · ffdd0d5 Raw
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