cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

gct.c (1047B)


      1// SPDX-License-Identifier: GPL-2.0
      2/*
      3 *	linux/arch/alpha/kernel/gct.c
      4 */
      5
      6#include <linux/kernel.h>
      7#include <linux/types.h>
      8#include <linux/errno.h>
      9
     10#include <asm/hwrpb.h>
     11#include <asm/gct.h>
     12
     13int
     14gct6_find_nodes(gct6_node *node, gct6_search_struct *search)
     15{
     16	gct6_search_struct *wanted;
     17	int status = 0;
     18
     19	/* First check the magic number.  */
     20	if (node->magic != GCT_NODE_MAGIC) {
     21		printk(KERN_ERR "GCT Node MAGIC incorrect - GCT invalid\n");
     22		return -EINVAL;
     23	}
     24
     25	/* Check against the search struct.  */
     26	for (wanted = search; 
     27	     wanted && (wanted->type | wanted->subtype); 
     28	     wanted++) {
     29		if (node->type != wanted->type)
     30			continue;
     31		if (node->subtype != wanted->subtype)
     32			continue;
     33
     34		/* Found it -- call out.  */
     35		if (wanted->callout)
     36			wanted->callout(node);
     37	}
     38
     39	/* Now walk the tree, siblings first.  */
     40	if (node->next) 
     41		status |= gct6_find_nodes(GCT_NODE_PTR(node->next), search);
     42
     43	/* Then the children.  */
     44	if (node->child) 
     45		status |= gct6_find_nodes(GCT_NODE_PTR(node->child), search);
     46
     47	return status;
     48}