From: Barret Rhoden <[email protected]> The mailbox headers (e.g. ucq.h) needed parts of event.h, but later parts of event.h needed the mailbox headers. Previously we dealt with this by being careful with where we #included. Commit df786ca456cb ("Replace #include guards with #pragma once.") broke that for evbitmap.h.
The right fix is to split out the parts of the header that the mailboxes need into it's own header. This should help avoid future issues with other mailboxes. FWIW, I don't know if we could keep the old style (even if I wanted to) with the #pragma once, which is probably why that one was left as an ifndef. Reinstall your kernel headers. Signed-off-by: Barret Rhoden <[email protected]> --- kern/include/ros/ceq.h | 1 + kern/include/ros/evbitmap.h | 3 +-- kern/include/ros/event.h | 49 +-------------------------------------- kern/include/ros/event_bits.h | 53 +++++++++++++++++++++++++++++++++++++++++++ kern/include/ros/ucq.h | 5 +--- 5 files changed, 57 insertions(+), 54 deletions(-) create mode 100644 kern/include/ros/event_bits.h diff --git a/kern/include/ros/ceq.h b/kern/include/ros/ceq.h index d7e3f27..52ace6d 100644 --- a/kern/include/ros/ceq.h +++ b/kern/include/ros/ceq.h @@ -34,6 +34,7 @@ #pragma once +#include <ros/event_bits.h> #include <ros/atomic.h> #include <ros/ring_buffer.h> diff --git a/kern/include/ros/evbitmap.h b/kern/include/ros/evbitmap.h index 4451653..3b0220f 100644 --- a/kern/include/ros/evbitmap.h +++ b/kern/include/ros/evbitmap.h @@ -7,8 +7,7 @@ #pragma once -/* Include this outside the ifndef, due to circular include concerns. */ -#include <ros/event.h> +#include <ros/event_bits.h> struct evbitmap { bool check_bits; diff --git a/kern/include/ros/event.h b/kern/include/ros/event.h index 8719916..0afb63a 100644 --- a/kern/include/ros/event.h +++ b/kern/include/ros/event.h @@ -6,57 +6,10 @@ #pragma once -#include <ros/common.h> +#include <ros/event_bits.h> #include <ros/atomic.h> #include <ros/trapframe.h> -/* #include <ros/ucq.h> included below */ -/* #include <ros/evbitmap.h> included below */ -/* Event Delivery Flags from the process to the kernel */ -#define EVENT_IPI 0x00001 /* IPI the vcore (usually with INDIR) */ -#define EVENT_SPAM_PUBLIC 0x00002 /* spam the msg to public vcpd mboxes */ -#define EVENT_INDIR 0x00004 /* send an indirection event to vcore */ -#define EVENT_VCORE_PRIVATE 0x00008 /* Will go to the private VCPD mbox */ -#define EVENT_SPAM_INDIR 0x00010 /* spam INDIRs if the vcore's offline */ -#define EVENT_VCORE_MUST_RUN 0x00020 /* spams go to a vcore that will run */ -#define EVENT_NOTHROTTLE 0x00040 /* send all INDIRs (no throttling) */ -#define EVENT_ROUNDROBIN 0x00080 /* pick a vcore, RR style */ -#define EVENT_VCORE_APPRO 0x00100 /* send to where the kernel wants */ -#define EVENT_WAKEUP 0x00200 /* wake up the process after sending */ - -/* Event Message Types */ -#define EV_NONE 0 -#define EV_PREEMPT_PENDING 1 -#define EV_GANG_PREMPT_PENDING 2 -#define EV_VCORE_PREEMPT 3 -#define EV_GANG_RETURN 4 -#define EV_USER_IPI 5 -#define EV_PAGE_FAULT 6 -#define EV_ALARM 7 -#define EV_EVENT 8 -#define EV_FREE_APPLE_PIE 9 -#define EV_SYSCALL 10 -#define EV_CHECK_MSGS 11 -#define EV_POSIX_SIGNAL 12 -#define NR_EVENT_TYPES 25 /* keep me last (and 1 > the last one) */ - -/* Will probably have dynamic notifications later */ -#define MAX_NR_DYN_EVENT 25 -#define MAX_NR_EVENT (NR_EVENT_TYPES + MAX_NR_DYN_EVENT) - -/* Want to keep this small and generic, but add items as you need them. One - * item some will need is an expiration time, which ought to be put in the 64 - * bit arg. Will need tweaking / thought as we come up with events. These are - * what get put on the per-core queue in procdata. */ -struct event_msg { - uint16_t ev_type; - uint16_t ev_arg1; - uint32_t ev_arg2; - void *ev_arg3; - uint64_t ev_arg4; -}; - -/* Include here since the mboxes need to know event.h basics (e.g. event_msg) */ #include <ros/ucq.h> #include <ros/evbitmap.h> #include <ros/ceq.h> diff --git a/kern/include/ros/event_bits.h b/kern/include/ros/event_bits.h new file mode 100644 index 0000000..5a67cee --- /dev/null +++ b/kern/include/ros/event_bits.h @@ -0,0 +1,53 @@ +/* Copyright (c) 2010-2011 The Regents of the University of California + * Barret Rhoden <[email protected]> + * See LICENSE for details. + * + * Bits for the kernel interface for event. */ + +#pragma once + +#include <ros/common.h> + +/* Event Delivery Flags from the process to the kernel */ +#define EVENT_IPI 0x00001 /* IPI the vcore (usually with INDIR) */ +#define EVENT_SPAM_PUBLIC 0x00002 /* spam the msg to public vcpd mboxes */ +#define EVENT_INDIR 0x00004 /* send an indirection event to vcore */ +#define EVENT_VCORE_PRIVATE 0x00008 /* Will go to the private VCPD mbox */ +#define EVENT_SPAM_INDIR 0x00010 /* spam INDIRs if the vcore's offline */ +#define EVENT_VCORE_MUST_RUN 0x00020 /* spams go to a vcore that will run */ +#define EVENT_NOTHROTTLE 0x00040 /* send all INDIRs (no throttling) */ +#define EVENT_ROUNDROBIN 0x00080 /* pick a vcore, RR style */ +#define EVENT_VCORE_APPRO 0x00100 /* send to where the kernel wants */ +#define EVENT_WAKEUP 0x00200 /* wake up the process after sending */ + +/* Event Message Types */ +#define EV_NONE 0 +#define EV_PREEMPT_PENDING 1 +#define EV_GANG_PREMPT_PENDING 2 +#define EV_VCORE_PREEMPT 3 +#define EV_GANG_RETURN 4 +#define EV_USER_IPI 5 +#define EV_PAGE_FAULT 6 +#define EV_ALARM 7 +#define EV_EVENT 8 +#define EV_FREE_APPLE_PIE 9 +#define EV_SYSCALL 10 +#define EV_CHECK_MSGS 11 +#define EV_POSIX_SIGNAL 12 +#define NR_EVENT_TYPES 25 /* keep me last (and 1 > the last one) */ + +/* Will probably have dynamic notifications later */ +#define MAX_NR_DYN_EVENT 25 +#define MAX_NR_EVENT (NR_EVENT_TYPES + MAX_NR_DYN_EVENT) + +/* Want to keep this small and generic, but add items as you need them. One + * item some will need is an expiration time, which ought to be put in the 64 + * bit arg. Will need tweaking / thought as we come up with events. These are + * what get put on the per-core queue in procdata. */ +struct event_msg { + uint16_t ev_type; + uint16_t ev_arg1; + uint32_t ev_arg2; + void *ev_arg3; + uint64_t ev_arg4; +}; diff --git a/kern/include/ros/ucq.h b/kern/include/ros/ucq.h index 199c139..3b76585 100644 --- a/kern/include/ros/ucq.h +++ b/kern/include/ros/ucq.h @@ -17,7 +17,7 @@ #pragma once -#include <ros/common.h> +#include <ros/event_bits.h> #include <ros/atomic.h> #include <ros/arch/mmu.h> @@ -49,9 +49,6 @@ struct ucq_page_header { atomic_t nr_cons; /* like an inverted refcnt */ }; -/* Including here since event.h needs to know about struct ucq */ -#include <ros/event.h> - struct msg_container { struct event_msg ev_msg; bool ready; /* kernel has written */ -- 2.8.0.rc3.226.g39d4020 -- You received this message because you are subscribed to the Google Groups "Akaros" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. For more options, visit https://groups.google.com/d/optout.
