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

lscsa_alloc.c (982B)


      1// SPDX-License-Identifier: GPL-2.0-or-later
      2/*
      3 * SPU local store allocation routines
      4 *
      5 * Copyright 2007 Benjamin Herrenschmidt, IBM Corp.
      6 */
      7
      8#undef DEBUG
      9
     10#include <linux/kernel.h>
     11#include <linux/mm.h>
     12#include <linux/slab.h>
     13#include <linux/vmalloc.h>
     14
     15#include <asm/spu.h>
     16#include <asm/spu_csa.h>
     17#include <asm/mmu.h>
     18
     19#include "spufs.h"
     20
     21int spu_alloc_lscsa(struct spu_state *csa)
     22{
     23	struct spu_lscsa *lscsa;
     24	unsigned char *p;
     25
     26	lscsa = vzalloc(sizeof(*lscsa));
     27	if (!lscsa)
     28		return -ENOMEM;
     29	csa->lscsa = lscsa;
     30
     31	/* Set LS pages reserved to allow for user-space mapping. */
     32	for (p = lscsa->ls; p < lscsa->ls + LS_SIZE; p += PAGE_SIZE)
     33		SetPageReserved(vmalloc_to_page(p));
     34
     35	return 0;
     36}
     37
     38void spu_free_lscsa(struct spu_state *csa)
     39{
     40	/* Clear reserved bit before vfree. */
     41	unsigned char *p;
     42
     43	if (csa->lscsa == NULL)
     44		return;
     45
     46	for (p = csa->lscsa->ls; p < csa->lscsa->ls + LS_SIZE; p += PAGE_SIZE)
     47		ClearPageReserved(vmalloc_to_page(p));
     48
     49	vfree(csa->lscsa);
     50}