summaryrefslogtreecommitdiffstats
path: root/sys/cddl/compat
diff options
context:
space:
mode:
authoravg <avg@FreeBSD.org>2015-05-11 07:54:39 +0000
committeravg <avg@FreeBSD.org>2015-05-11 07:54:39 +0000
commita8e9a4b88b39ecd1cf48a11934feb4cfeec8dc87 (patch)
tree74a03b3d7bdf18ad65ae036044ec43c72bc2a55f /sys/cddl/compat
parent5e2ef62eeed97f6a86a3a35addc1447b975b55f9 (diff)
downloadFreeBSD-src-a8e9a4b88b39ecd1cf48a11934feb4cfeec8dc87.zip
FreeBSD-src-a8e9a4b88b39ecd1cf48a11934feb4cfeec8dc87.tar.gz
MFC r275576: remove opensolaris cyclic code, replace with high-precision callouts
Diffstat (limited to 'sys/cddl/compat')
-rw-r--r--sys/cddl/compat/opensolaris/sys/cpuvar.h3
-rw-r--r--sys/cddl/compat/opensolaris/sys/cyclic.h79
-rw-r--r--sys/cddl/compat/opensolaris/sys/cyclic_impl.h311
3 files changed, 0 insertions, 393 deletions
diff --git a/sys/cddl/compat/opensolaris/sys/cpuvar.h b/sys/cddl/compat/opensolaris/sys/cpuvar.h
index b42fda6..ff2ce9d 100644
--- a/sys/cddl/compat/opensolaris/sys/cpuvar.h
+++ b/sys/cddl/compat/opensolaris/sys/cpuvar.h
@@ -38,11 +38,8 @@ struct cyc_cpu;
typedef struct {
int cpuid;
- struct cyc_cpu *cpu_cyclic;
uint32_t cpu_flags;
uint_t cpu_intr_actv;
- uintptr_t cpu_profile_pc;
- uintptr_t cpu_profile_upc;
uintptr_t cpu_dtrace_caller; /* DTrace: caller, if any */
hrtime_t cpu_dtrace_chillmark; /* DTrace: chill mark time */
hrtime_t cpu_dtrace_chilled; /* DTrace: total chill time */
diff --git a/sys/cddl/compat/opensolaris/sys/cyclic.h b/sys/cddl/compat/opensolaris/sys/cyclic.h
deleted file mode 100644
index fced5df..0000000
--- a/sys/cddl/compat/opensolaris/sys/cyclic.h
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License, Version 1.0 only
- * (the "License"). You may not use this file except in compliance
- * with the License.
- *
- * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
- * or http://www.opensolaris.org/os/licensing.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information: Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- *
- * $FreeBSD$
- *
- */
-/*
- * Copyright (c) 1999-2001 by Sun Microsystems, Inc.
- * All rights reserved.
- */
-
-#ifndef _COMPAT_OPENSOLARIS_SYS_CYCLIC_H_
-#define _COMPAT_OPENSOLARIS_SYS_CYCLIC_H_
-
-#ifndef _KERNEL
-typedef void cpu_t;
-#endif
-
-
-#ifndef _ASM
-#include <sys/time.h>
-#include <sys/cpuvar.h>
-#endif /* !_ASM */
-
-#ifndef _ASM
-
-typedef uintptr_t cyclic_id_t;
-typedef int cyc_index_t;
-typedef uint16_t cyc_level_t;
-typedef void (*cyc_func_t)(void *);
-typedef void *cyb_arg_t;
-
-#define CYCLIC_NONE ((cyclic_id_t)0)
-
-typedef struct cyc_handler {
- cyc_func_t cyh_func;
- void *cyh_arg;
-} cyc_handler_t;
-
-typedef struct cyc_time {
- hrtime_t cyt_when;
- hrtime_t cyt_interval;
-} cyc_time_t;
-
-typedef struct cyc_omni_handler {
- void (*cyo_online)(void *, cpu_t *, cyc_handler_t *, cyc_time_t *);
- void (*cyo_offline)(void *, cpu_t *, void *);
- void *cyo_arg;
-} cyc_omni_handler_t;
-
-#ifdef _KERNEL
-
-cyclic_id_t cyclic_add(cyc_handler_t *, cyc_time_t *);
-cyclic_id_t cyclic_add_omni(cyc_omni_handler_t *);
-void cyclic_remove(cyclic_id_t);
-
-#endif /* _KERNEL */
-
-#endif /* !_ASM */
-
-#endif
diff --git a/sys/cddl/compat/opensolaris/sys/cyclic_impl.h b/sys/cddl/compat/opensolaris/sys/cyclic_impl.h
deleted file mode 100644
index 57bb167..0000000
--- a/sys/cddl/compat/opensolaris/sys/cyclic_impl.h
+++ /dev/null
@@ -1,311 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License, Version 1.0 only
- * (the "License"). You may not use this file except in compliance
- * with the License.
- *
- * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
- * or http://www.opensolaris.org/os/licensing.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information: Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- *
- * $FreeBSD$
- *
- */
-/*
- * Copyright 2004 Sun Microsystems, Inc. All rights reserved.
- * Use is subject to license terms.
- */
-
-#ifndef _COMPAT_OPENSOLARIS_SYS_CYCLIC_IMPL_H_
-#define _COMPAT_OPENSOLARIS_SYS_CYCLIC_IMPL_H_
-
-#include <sys/cyclic.h>
-
-/*
- * Cyclic Subsystem Backend-supplied Interfaces
- * --------------------------------------------
- *
- * 0 Background
- *
- * The design, implementation and interfaces of the cyclic subsystem are
- * covered in detail in block comments in the implementation. This
- * comment covers the interface from the cyclic subsystem into the cyclic
- * backend. The backend is specified by a structure of function pointers
- * defined below.
- *
- * 1 Overview
- *
- * cyb_configure() <-- Configures the backend on the specified CPU
- * cyb_unconfigure() <-- Unconfigures the backend
- * cyb_enable() <-- Enables the CY_HIGH_LEVEL interrupt source
- * cyb_disable() <-- Disables the CY_HIGH_LEVEL interrupt source
- * cyb_reprogram() <-- Reprograms the CY_HIGH_LEVEL interrupt source
- * cyb_xcall() <-- Cross calls to the specified CPU
- *
- * 2 cyb_arg_t cyb_configure(cpu_t *)
- *
- * 2.1 Overview
- *
- * cyb_configure() should configure the specified CPU for cyclic operation.
- *
- * 2.2 Arguments and notes
- *
- * cyb_configure() should initialize any backend-specific per-CPU
- * structures for the specified CPU. cyb_configure() will be called for
- * each CPU (including the boot CPU) during boot. If the platform
- * supports dynamic reconfiguration, cyb_configure() will be called for
- * new CPUs as they are configured into the system.
- *
- * 2.3 Return value
- *
- * cyb_configure() is expected to return a cookie (a cyb_arg_t, which is
- * of type void *) which will be used as the first argument for all future
- * cyclic calls into the backend on the specified CPU.
- *
- * 2.4 Caller's context
- *
- * cpu_lock will be held. The caller's CPU is unspecified, and may or
- * may not be the CPU specified to cyb_configure().
- *
- * 3 void cyb_unconfigure(cyb_arg_t arg)
- *
- * 3.1 Overview
- *
- * cyb_unconfigure() should unconfigure the specified backend.
- *
- * 3.2 Arguments and notes
- *
- * The only argument to cyb_unconfigure() is a cookie as returned from
- * cyb_configure().
- *
- * cyb_unconfigure() should free any backend-specific per-CPU structures
- * for the specified backend. cyb_unconfigure() will _only_ be called on
- * platforms which support dynamic reconfiguration. If the platform does
- * not support dynamic reconfiguration, cyb_unconfigure() may panic.
- *
- * After cyb_unconfigure() returns, the backend must not call cyclic_fire()
- * on the corresponding CPU; doing so will result in a bad trap.
- *
- * 3.3 Return value
- *
- * None.
- *
- * 3.4 Caller's context
- *
- * cpu_lock will be held. The caller's CPU is unspecified, and may or
- * may not be the CPU specified to cyb_unconfigure(). The specified
- * CPU is guaranteed to exist at the time cyb_unconfigure() is called.
- * The cyclic subsystem is guaranteed to be suspended when cyb_unconfigure()
- * is called, and interrupts are guaranteed to be disabled.
- *
- * 4 void cyb_enable(cyb_arg_t arg)
- *
- * 4.1 Overview
- *
- * cyb_enable() should enable the CY_HIGH_LEVEL interrupt source on
- * the specified backend.
- *
- * 4.2 Arguments and notes
- *
- * The only argument to cyb_enable() is a backend cookie as returned from
- * cyb_configure().
- *
- * cyb_enable() will only be called if a) the specified backend has never
- * been enabled or b) the specified backend has been explicitly disabled with
- * cyb_disable(). In either case, cyb_enable() will only be called if
- * the cyclic subsystem wishes to add a cyclic to the CPU corresponding
- * to the specified backend. cyb_enable() will be called before
- * cyb_reprogram() for a given backend.
- *
- * cyclic_fire() should not be called on a CPU which has not had its backend
- * explicitly cyb_enable()'d, but to do so does not constitute fatal error.
- *
- * 4.3 Return value
- *
- * None.
- *
- * 4.4 Caller's context
- *
- * cyb_enable() will only be called from CY_HIGH_LEVEL context on the CPU
- * corresponding to the specified backend.
- *
- * 5 void cyb_disable(cyb_arg_t arg)
- *
- * 5.1 Overview
- *
- * cyb_disable() should disable the CY_HIGH_LEVEL interrupt source on
- * the specified backend.
- *
- * 5.2 Arguments and notes
- *
- * The only argument to cyb_disable() is a backend cookie as returned from
- * cyb_configure().
- *
- * cyb_disable() will only be called on backends which have been previously
- * been cyb_enable()'d. cyb_disable() will be called when all cyclics have
- * been juggled away or removed from a cyb_enable()'d CPU.
- *
- * cyclic_fire() should not be called on a CPU which has had its backend
- * explicitly cyb_disable()'d, but to do so does not constitute fatal
- * error. cyb_disable() is thus not required to check for a pending
- * CY_HIGH_LEVEL interrupt.
- *
- * 5.3 Return value
- *
- * None.
- *
- * 5.4 Caller's context
- *
- * cyb_disable() will only be called from CY_HIGH_LEVEL context on the CPU
- * corresponding to the specified backend.
- *
- * 6 void cyb_reprogram(cyb_arg_t arg, hrtime_t time)
- *
- * 6.1 Overview
- *
- * cyb_reprogram() should reprogram the CY_HIGH_LEVEL interrupt source
- * to fire at the absolute time specified.
- *
- * 6.2 Arguments and notes
- *
- * The first argument to cyb_reprogram() is a backend cookie as returned from
- * cyb_configure().
- *
- * The second argument is an absolute time at which the CY_HIGH_LEVEL
- * interrupt should fire. The specified time _may_ be in the past (albeit
- * the very recent past). If this is the case, the backend should generate
- * a CY_HIGH_LEVEL interrupt as soon as possible.
- *
- * The platform should not assume that cyb_reprogram() will be called with
- * monotonically increasing values.
- *
- * If the platform does not allow for interrupts at arbitrary times in the
- * future, cyb_reprogram() may do nothing -- as long as cyclic_fire() is
- * called periodically at CY_HIGH_LEVEL. While this is clearly suboptimal
- * (cyclic granularity will be bounded by the length of the period between
- * cyclic_fire()'s), it allows the cyclic subsystem to be implemented on
- * inferior hardware.
- *
- * 6.3 Return value
- *
- * None.
- *
- * 6.4 Caller's context
- *
- * cyb_reprogram() will only be called from CY_HIGH_LEVEL context on the CPU
- * corresponding to the specified backend.
- *
- * 10 cyb_xcall(cyb_arg_t arg, cpu_t *, void(*func)(void *), void *farg)
- *
- * 10.1 Overview
- *
- * cyb_xcall() should execute the specified function on the specified CPU.
- *
- * 10.2 Arguments and notes
- *
- * The first argument to cyb_restore_level() is a backend cookie as returned
- * from cyb_configure(). The second argument is a CPU on which the third
- * argument, a function pointer, should be executed. The fourth argument,
- * a void *, should be passed as the argument to the specified function.
- *
- * cyb_xcall() must provide exactly-once semantics. If the specified
- * function is called more than once, or not at all, the cyclic subsystem
- * will become internally inconsistent. The specified function must be
- * be executed on the specified CPU, but may be executed in any context
- * (any interrupt context or kernel context).
- *
- * cyb_xcall() cannot block. Any resources which cyb_xcall() needs to
- * acquire must thus be protected by synchronization primitives which
- * never require the caller to block.
- *
- * 10.3 Return value
- *
- * None.
- *
- * 10.4 Caller's context
- *
- * cpu_lock will be held and kernel preemption may be disabled. The caller
- * may be unable to block, giving rise to the constraint outlined in
- * 10.2, above.
- *
- */
-typedef struct cyc_backend {
- cyb_arg_t (*cyb_configure)(cpu_t *);
- void (*cyb_unconfigure)(cyb_arg_t);
- void (*cyb_enable)(cyb_arg_t);
- void (*cyb_disable)(cyb_arg_t);
- void (*cyb_reprogram)(cyb_arg_t, hrtime_t);
- void (*cyb_xcall)(cyb_arg_t, cpu_t *, cyc_func_t, void *);
- cyb_arg_t cyb_arg;
-} cyc_backend_t;
-
-#define CYF_FREE 0x0001
-
-typedef struct cyclic {
- hrtime_t cy_expire;
- hrtime_t cy_interval;
- void (*cy_handler)(void *);
- void *cy_arg;
- uint16_t cy_flags;
-} cyclic_t;
-
-typedef struct cyc_cpu {
- cpu_t *cyp_cpu;
- cyc_index_t *cyp_heap;
- cyclic_t *cyp_cyclics;
- cyc_index_t cyp_nelems;
- cyc_index_t cyp_size;
- cyc_backend_t *cyp_backend;
- struct mtx cyp_mtx;
-} cyc_cpu_t;
-
-typedef struct cyc_omni_cpu {
- cyc_cpu_t *cyo_cpu;
- cyc_index_t cyo_ndx;
- void *cyo_arg;
- struct cyc_omni_cpu *cyo_next;
-} cyc_omni_cpu_t;
-
-typedef struct cyc_id {
- cyc_cpu_t *cyi_cpu;
- cyc_index_t cyi_ndx;
- struct cyc_id *cyi_prev;
- struct cyc_id *cyi_next;
- cyc_omni_handler_t cyi_omni_hdlr;
- cyc_omni_cpu_t *cyi_omni_list;
-} cyc_id_t;
-
-typedef struct cyc_xcallarg {
- cyc_cpu_t *cyx_cpu;
- cyc_handler_t *cyx_hdlr;
- cyc_time_t *cyx_when;
- cyc_index_t cyx_ndx;
- cyc_index_t *cyx_heap;
- cyclic_t *cyx_cyclics;
- cyc_index_t cyx_size;
- uint16_t cyx_flags;
- int cyx_wait;
-} cyc_xcallarg_t;
-
-#define CY_DEFAULT_PERCPU 1
-#define CY_PASSIVE_LEVEL -1
-
-#define CY_WAIT 0
-#define CY_NOWAIT 1
-
-#define CYC_HEAP_PARENT(ndx) (((ndx) - 1) >> 1)
-#define CYC_HEAP_RIGHT(ndx) (((ndx) + 1) << 1)
-#define CYC_HEAP_LEFT(ndx) ((((ndx) + 1) << 1) - 1)
-
-#endif
OpenPOWER on IntegriCloud