cregit-Linux how code gets into the kernel

Release 4.14 arch/blackfin/mm/maccess.c

Directory: arch/blackfin/mm
/*
 * safe read and write memory routines callable while atomic
 *
 * Copyright 2005-2008 Analog Devices Inc.
 *
 * Licensed under the GPL-2 or later.
 */

#include <linux/uaccess.h>
#include <asm/dma.h>


static int validate_memory_access_address(unsigned long addr, int size) { if (size < 0 || addr == 0) return -EFAULT; return bfin_mem_access_type(addr, size); }

Contributors

PersonTokensPropCommitsCommitProp
Jason Wessel35100.00%1100.00%
Total35100.00%1100.00%


long probe_kernel_read(void *dst, const void *src, size_t size) { unsigned long lsrc = (unsigned long)src; int mem_type; mem_type = validate_memory_access_address(lsrc, size); if (mem_type < 0) return mem_type; if (lsrc >= SYSMMR_BASE) { if (size == 2 && lsrc % 2 == 0) { u16 mmr = bfin_read16(src); memcpy(dst, &mmr, sizeof(mmr)); return 0; } else if (size == 4 && lsrc % 4 == 0) { u32 mmr = bfin_read32(src); memcpy(dst, &mmr, sizeof(mmr)); return 0; } } else { switch (mem_type) { case BFIN_MEM_ACCESS_CORE: case BFIN_MEM_ACCESS_CORE_ONLY: return __probe_kernel_read(dst, src, size); /* XXX: should support IDMA here with SMP */ case BFIN_MEM_ACCESS_DMA: if (dma_memcpy(dst, src, size)) return 0; break; case BFIN_MEM_ACCESS_ITEST: if (isram_memcpy(dst, src, size)) return 0; break; } } return -EFAULT; }

Contributors

PersonTokensPropCommitsCommitProp
Jason Wessel19899.50%150.00%
Steven Rostedt10.50%150.00%
Total199100.00%2100.00%


long probe_kernel_write(void *dst, const void *src, size_t size) { unsigned long ldst = (unsigned long)dst; int mem_type; mem_type = validate_memory_access_address(ldst, size); if (mem_type < 0) return mem_type; if (ldst >= SYSMMR_BASE) { if (size == 2 && ldst % 2 == 0) { u16 mmr; memcpy(&mmr, src, sizeof(mmr)); bfin_write16(dst, mmr); return 0; } else if (size == 4 && ldst % 4 == 0) { u32 mmr; memcpy(&mmr, src, sizeof(mmr)); bfin_write32(dst, mmr); return 0; } } else { switch (mem_type) { case BFIN_MEM_ACCESS_CORE: case BFIN_MEM_ACCESS_CORE_ONLY: return __probe_kernel_write(dst, src, size); /* XXX: should support IDMA here with SMP */ case BFIN_MEM_ACCESS_DMA: if (dma_memcpy(dst, src, size)) return 0; break; case BFIN_MEM_ACCESS_ITEST: if (isram_memcpy(dst, src, size)) return 0; break; } } return -EFAULT; }

Contributors

PersonTokensPropCommitsCommitProp
Jason Wessel20299.51%150.00%
Steven Rostedt10.49%150.00%
Total203100.00%2100.00%


Overall Contributors

PersonTokensPropCommitsCommitProp
Jason Wessel44299.55%150.00%
Steven Rostedt20.45%150.00%
Total444100.00%2100.00%
Directory: arch/blackfin/mm
Information contained on this website is for historical information purposes only and does not indicate or represent copyright ownership.
Created with cregit.