Port-sh3 archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
sysarch(2) syscall to sync icache
Re http://gnats.netbsd.org/52260
Does attached patch look ok? This is only the kernel part, the
lib/libarch counterpart is mechanical.
-uwe
/* $NetBSD$ */
/*-
* Copyright (c) 2017 The NetBSD Foundation, Inc.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef _SH3_SYSARCH_H_
#define _SH3_SYSARCH_H_
/*
* Architecture specific syscalls (sh3)
*/
#define SH3_SYNC_ICACHE 0
struct sh3_sync_icache_args {
uintptr_t addr; /* Virtual start address */
size_t len; /* Region size */
};
#ifndef _KERNEL
#include <sys/cdefs.h>
__BEGIN_DECLS
int sh3_sync_icache(uintptr_t, size_t);
int sysarch(int, void *);
__END_DECLS
#endif /* !_KERNEL */
#endif /* !_SH3_SYSARCH_H_ */
Index: sys_machdep.c
===================================================================
RCS file: /cvsroot/src/sys/arch/sh3/sh3/sys_machdep.c,v
retrieving revision 1.13
diff -u -p -u -r1.13 sys_machdep.c
--- sys_machdep.c 22 Dec 2007 08:59:02 -0000 1.13
+++ sys_machdep.c 20 Oct 2017 01:00:18 -0000
@@ -80,9 +80,39 @@ __KERNEL_RCSID(0, "$NetBSD: sys_machdep.
#include <sys/mount.h>
#include <sys/syscallargs.h>
+#include <sh3/sysarch.h>
+#include <sh3/cache.h>
+
int
sys_sysarch(struct lwp *l, const struct sys_sysarch_args *uap, register_t *retval)
{
+ /* {
+ syscallarg(int) op;
+ syscallarg(void *) parms;
+ } */
+ int op;
+ int error = 0;
+
+ op = SCARG(uap, op);
+ switch (op) {
+ case SH3_SYNC_ICACHE: {
+ struct sh3_sync_icache_args args;
+
+ error = copyin(SCARG(uap, parms), &args, sizeof(args));
+ if (error != 0)
+ break;
+
+ if (args.len < (size_t)sh_cache_size_icache)
+ sh_icache_sync_range_index(args.addr, args.len);
+ else
+ sh_icache_sync_all();
+ break;
+ }
+
+ default:
+ error = ENOSYS;
+ break;
+ }
- return (ENOSYS);
+ return error;
}
Home |
Main Index |
Thread Index |
Old Index