diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2019-05-13 11:19:05 +0200 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2019-05-15 13:43:49 +0200 |
commit | edc4bf9f71d8f4cec17ba901198730c58879e2c2 (patch) | |
tree | 94ef7b42489da3d90a0b43e42018ab23223e3d3a | |
parent | Fix USB_DEBUG redefinition warnings (diff) | |
download | rtems-libbsd-edc4bf9f71d8f4cec17ba901198730c58879e2c2.tar.bz2 |
Separate libbsd and RTEMS clock ticks
-rw-r--r-- | freebsd/sys/kern/kern_intr.c | 1 | ||||
-rw-r--r-- | freebsd/sys/kern/kern_timeout.c | 5 | ||||
-rw-r--r-- | freebsd/sys/kern/subr_sleepqueue.c | 1 | ||||
-rw-r--r-- | freebsd/sys/kern/sys_generic.c | 2 | ||||
-rw-r--r-- | freebsd/sys/sys/kernel.h | 9 | ||||
-rw-r--r-- | rtemsbsd/include/machine/rtems-bsd-kernel-namespace.h | 1 | ||||
-rw-r--r-- | rtemsbsd/rtems/rtems-kernel-init.c | 20 | ||||
-rw-r--r-- | rtemsbsd/rtems/rtems-kernel-thread.c | 2 |
8 files changed, 15 insertions, 26 deletions
diff --git a/freebsd/sys/kern/kern_intr.c b/freebsd/sys/kern/kern_intr.c index 9c647eb6..2ba76e88 100644 --- a/freebsd/sys/kern/kern_intr.c +++ b/freebsd/sys/kern/kern_intr.c @@ -65,7 +65,6 @@ __FBSDID("$FreeBSD$"); #else /* __rtems__ */ #include <machine/rtems-bsd-thread.h> #define RTEMSBSD_SWI_WAKEUP_EVENT RTEMS_EVENT_31 - #undef ticks #include <rtems/score/threadimpl.h> #endif /* __rtems__ */ #include <machine/stdarg.h> diff --git a/freebsd/sys/kern/kern_timeout.c b/freebsd/sys/kern/kern_timeout.c index 8ef42c9a..2f478afc 100644 --- a/freebsd/sys/kern/kern_timeout.c +++ b/freebsd/sys/kern/kern_timeout.c @@ -317,6 +317,7 @@ rtems_bsd_callout_timer(rtems_id id, void *arg) sc = rtems_timer_reset(id); BSD_ASSERT(sc == RTEMS_SUCCESSFUL); + ++ticks; callout_process(sbinuptime()); } @@ -339,7 +340,9 @@ rtems_bsd_timeout_init_late(void *unused) sc = rtems_timer_create(rtems_build_name('_', 'C', 'L', 'O'), &id); BSD_ASSERT(sc == RTEMS_SUCCESSFUL); - sc = rtems_timer_server_fire_after(id, 1, rtems_bsd_callout_timer, NULL); + sc = rtems_timer_server_fire_after(id, + rtems_clock_get_ticks_per_second() / (rtems_interval)hz, + rtems_bsd_callout_timer, NULL); BSD_ASSERT(sc == RTEMS_SUCCESSFUL); } diff --git a/freebsd/sys/kern/subr_sleepqueue.c b/freebsd/sys/kern/subr_sleepqueue.c index 9aa9d7fa..e8e221c8 100644 --- a/freebsd/sys/kern/subr_sleepqueue.c +++ b/freebsd/sys/kern/subr_sleepqueue.c @@ -94,7 +94,6 @@ __FBSDID("$FreeBSD$"); #endif #ifdef __rtems__ #include <machine/rtems-bsd-thread.h> -#undef ticks #include <rtems/score/threadimpl.h> #include <rtems/score/watchdogimpl.h> #endif /* __rtems__ */ diff --git a/freebsd/sys/kern/sys_generic.c b/freebsd/sys/kern/sys_generic.c index b0da68a8..dc7f3f7b 100644 --- a/freebsd/sys/kern/sys_generic.c +++ b/freebsd/sys/kern/sys_generic.c @@ -1994,8 +1994,6 @@ kern_posix_error(struct thread *td, int error) #ifdef __rtems__ #include <machine/rtems-bsd-thread.h> -#undef ticks - #include <rtems/score/objectimpl.h> #include <rtems/score/threadimpl.h> diff --git a/freebsd/sys/sys/kernel.h b/freebsd/sys/sys/kernel.h index 42a37604..41a5233a 100644 --- a/freebsd/sys/sys/kernel.h +++ b/freebsd/sys/sys/kernel.h @@ -70,16 +70,7 @@ extern int psratio; /* ratio: prof / stat */ extern int stathz; /* statistics clock's frequency */ extern int profhz; /* profiling clock's frequency */ extern int profprocs; /* number of process's profiling */ -#ifndef __rtems__ extern volatile int ticks; -#else /* __rtems__ */ -/* - * This must be a singed integer type, otherwise expressions like - * (x - ticks) > 0 would yield unexpected results. - */ -extern volatile int32_t _bsd_ticks; -#define ticks _bsd_ticks -#endif /* __rtems__ */ #endif /* _KERNEL */ diff --git a/rtemsbsd/include/machine/rtems-bsd-kernel-namespace.h b/rtemsbsd/include/machine/rtems-bsd-kernel-namespace.h index b472edd4..017516f3 100644 --- a/rtemsbsd/include/machine/rtems-bsd-kernel-namespace.h +++ b/rtemsbsd/include/machine/rtems-bsd-kernel-namespace.h @@ -4936,6 +4936,7 @@ #define ticket_altqs_active _bsd_ticket_altqs_active #define ticket_altqs_inactive _bsd_ticket_altqs_inactive #define ticket_pabuf _bsd_ticket_pabuf +#define ticks _bsd_ticks #define tick_sbt _bsd_tick_sbt #define ti_hwmods _bsd_ti_hwmods #define ti_hwmods_contains _bsd_ti_hwmods_contains diff --git a/rtemsbsd/rtems/rtems-kernel-init.c b/rtemsbsd/rtems/rtems-kernel-init.c index 846ca1f1..ac03fedf 100644 --- a/rtemsbsd/rtems/rtems-kernel-init.c +++ b/rtemsbsd/rtems/rtems-kernel-init.c @@ -85,6 +85,7 @@ void mi_startup(void); int hz; int tick; +volatile int ticks; sbintime_t tick_sbt; struct bintime bt_timethreshold; struct bintime bt_tickthreshold; @@ -105,22 +106,21 @@ SYSCTL_INT(_kern_smp, OID_AUTO, maxid, CTLFLAG_RD|CTLFLAG_CAPRD, SYSCTL_INT(_kern_smp, OID_AUTO, maxcpus, CTLFLAG_RD|CTLFLAG_CAPRD, &maxid_maxcpus, 0, "Max number of CPUs that the system was compiled for."); -#undef _bsd_ticks - -RTEMS_STATIC_ASSERT(sizeof(int) == sizeof(int32_t), ticks); - -volatile uint32_t _Watchdog_Ticks_since_boot; - -extern volatile int32_t _bsd_ticks - __attribute__ ((__alias__("_Watchdog_Ticks_since_boot"))); - rtems_status_code rtems_bsd_initialize(void) { static const char name[] = "TIME"; rtems_status_code sc; + int tps; + + /* + * Limit the libbsd ticks per second to 100Hz. This helps to reduce + * the processor load on low end targets which use 1000Hz for the RTEMS + * clock tick. + */ + tps = (int)rtems_clock_get_ticks_per_second(); + hz = MIN(100, tps); - hz = (int) rtems_clock_get_ticks_per_second(); tick = 1000000 / hz; tick_sbt = SBT_1S / hz; FREQ2BT(hz, &tc_tick_bt); diff --git a/rtemsbsd/rtems/rtems-kernel-thread.c b/rtemsbsd/rtems/rtems-kernel-thread.c index 8d8f30a5..8e3344ef 100644 --- a/rtemsbsd/rtems/rtems-kernel-thread.c +++ b/rtemsbsd/rtems/rtems-kernel-thread.c @@ -53,8 +53,6 @@ #include <rtems/bsd/bsd.h> -#undef ticks - #include <rtems/score/objectimpl.h> #include <rtems/score/statesimpl.h> #include <rtems/score/threaddispatch.h> |