brintos

brintos / linux-shallow public Read only

0
0
Text · 1.8 KiB · 879a66e Raw
79 lines · c
1// SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause2/*3 * Copyright(c) 2017 Intel Corporation.4 */5 6#include "exp_rcv.h"7#include "trace.h"8 9/**10 * hfi1_exp_tid_set_init - initialize exp_tid_set11 * @set: the set12 */13static void hfi1_exp_tid_set_init(struct exp_tid_set *set)14{15	INIT_LIST_HEAD(&set->list);16	set->count = 0;17}18 19/**20 * hfi1_exp_tid_group_init - initialize rcd expected receive21 * @rcd: the rcd22 */23void hfi1_exp_tid_group_init(struct hfi1_ctxtdata *rcd)24{25	hfi1_exp_tid_set_init(&rcd->tid_group_list);26	hfi1_exp_tid_set_init(&rcd->tid_used_list);27	hfi1_exp_tid_set_init(&rcd->tid_full_list);28}29 30/**31 * hfi1_alloc_ctxt_rcv_groups - initialize expected receive groups32 * @rcd: the context to add the groupings to33 */34int hfi1_alloc_ctxt_rcv_groups(struct hfi1_ctxtdata *rcd)35{36	struct hfi1_devdata *dd = rcd->dd;37	u32 tidbase;38	struct tid_group *grp;39	int i;40	u32 ngroups;41 42	ngroups = rcd->expected_count / dd->rcv_entries.group_size;43	rcd->groups =44		kcalloc_node(ngroups, sizeof(*rcd->groups),45			     GFP_KERNEL, rcd->numa_id);46	if (!rcd->groups)47		return -ENOMEM;48	tidbase = rcd->expected_base;49	for (i = 0; i < ngroups; i++) {50		grp = &rcd->groups[i];51		grp->size = dd->rcv_entries.group_size;52		grp->base = tidbase;53		tid_group_add_tail(grp, &rcd->tid_group_list);54		tidbase += dd->rcv_entries.group_size;55	}56 57	return 0;58}59 60/**61 * hfi1_free_ctxt_rcv_groups - free  expected receive groups62 * @rcd: the context to free63 *64 * The routine dismantles the expect receive linked65 * list and clears any tids associated with the receive66 * context.67 *68 * This should only be called for kernel contexts and the69 * a base user context.70 */71void hfi1_free_ctxt_rcv_groups(struct hfi1_ctxtdata *rcd)72{73	kfree(rcd->groups);74	rcd->groups = NULL;75	hfi1_exp_tid_group_init(rcd);76 77	hfi1_clear_tids(rcd);78}79