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

consistent.c (1580B)


      1/*
      2 * Copyright (C) 2004 - 2007  Paul Mundt
      3 *
      4 * This file is subject to the terms and conditions of the GNU General Public
      5 * License.  See the file "COPYING" in the main directory of this archive
      6 * for more details.
      7 */
      8#include <linux/mm.h>
      9#include <linux/init.h>
     10#include <linux/platform_device.h>
     11#include <linux/dma-mapping.h>
     12#include <linux/io.h>
     13
     14static int __init memchunk_setup(char *str)
     15{
     16	return 1; /* accept anything that begins with "memchunk." */
     17}
     18__setup("memchunk.", memchunk_setup);
     19
     20static void __init memchunk_cmdline_override(char *name, unsigned long *sizep)
     21{
     22	char *p = boot_command_line;
     23	int k = strlen(name);
     24
     25	while ((p = strstr(p, "memchunk."))) {
     26		p += 9; /* strlen("memchunk.") */
     27		if (!strncmp(name, p, k) && p[k] == '=') {
     28			p += k + 1;
     29			*sizep = memparse(p, NULL);
     30			pr_info("%s: forcing memory chunk size to 0x%08lx\n",
     31				name, *sizep);
     32			break;
     33		}
     34	}
     35}
     36
     37int __init platform_resource_setup_memory(struct platform_device *pdev,
     38					  char *name, unsigned long memsize)
     39{
     40	struct resource *r;
     41	dma_addr_t dma_handle;
     42	void *buf;
     43
     44	r = pdev->resource + pdev->num_resources - 1;
     45	if (r->flags) {
     46		pr_warn("%s: unable to find empty space for resource\n", name);
     47		return -EINVAL;
     48	}
     49
     50	memchunk_cmdline_override(name, &memsize);
     51	if (!memsize)
     52		return 0;
     53
     54	buf = dma_alloc_coherent(&pdev->dev, memsize, &dma_handle, GFP_KERNEL);
     55	if (!buf) {
     56		pr_warn("%s: unable to allocate memory\n", name);
     57		return -ENOMEM;
     58	}
     59
     60	r->flags = IORESOURCE_MEM;
     61	r->start = dma_handle;
     62	r->end = r->start + memsize - 1;
     63	r->name = name;
     64	return 0;
     65}