Rebase against dd417540bb3afb3aa5a04a007eea9a7ee347655b.

This commit is contained in:
Zebediah Figura
2021-02-04 17:28:33 -06:00
parent cfe1b94e0f
commit a2f82c5c85
45 changed files with 2228 additions and 1319 deletions

View File

@ -1,4 +1,4 @@
From e5418972013afdb97f857e49d0beb06833b3b474 Mon Sep 17 00:00:00 2001
From 45b0af272838c1b28dee3dd50c588af888604f59 Mon Sep 17 00:00:00 2001
From: Zebediah Figura <z.figura12@gmail.com>
Date: Thu, 7 Jun 2018 20:09:59 -0500
Subject: [PATCH] server: Create server objects for eventfd-based
@ -28,7 +28,7 @@ index b58ce1e3002..5f225fd0591 100644
file.c \
diff --git a/server/esync.c b/server/esync.c
new file mode 100644
index 00000000000..b8b257281bf
index 00000000000..a571855c70a
--- /dev/null
+++ b/server/esync.c
@@ -0,0 +1,320 @@
@ -152,8 +152,8 @@ index 00000000000..b8b257281bf
+static const struct object_ops esync_ops =
+{
+ sizeof(struct esync), /* size */
+ &no_type, /* type */
+ esync_dump, /* dump */
+ no_get_type, /* get_type */
+ no_add_queue, /* add_queue */
+ NULL, /* remove_queue */
+ NULL, /* signaled */
@ -403,10 +403,10 @@ index dae08339874..f68888d0fa8 100644
set_current_time();
init_scheduler();
diff --git a/server/protocol.def b/server/protocol.def
index eba14534b9d..63fe88f9dda 100644
index abccc0a1275..f41afda0251 100644
--- a/server/protocol.def
+++ b/server/protocol.def
@@ -3657,3 +3657,27 @@ struct handle_info
@@ -3695,3 +3695,27 @@ struct handle_info
@REQ(resume_process)
obj_handle_t handle; /* process handle */
@END
@ -435,5 +435,5 @@ index eba14534b9d..63fe88f9dda 100644
+ unsigned int shm_idx;
+@END
--
2.29.2
2.20.1

View File

@ -1,4 +1,4 @@
From 05c4a58d8cc0fbafc760d3a0d4d6c14975e33fe2 Mon Sep 17 00:00:00 2001
From d468fdd5f1b4351f357fa75628096c6d759f0331 Mon Sep 17 00:00:00 2001
From: Zebediah Figura <zfigura@codeweavers.com>
Date: Mon, 6 Jul 2020 15:11:12 -0500
Subject: [PATCH] server: Create eventfd file descriptors for process objects.
@ -11,7 +11,7 @@ Subject: [PATCH] server: Create eventfd file descriptors for process objects.
4 files changed, 35 insertions(+), 1 deletion(-)
diff --git a/server/esync.c b/server/esync.c
index cfbbcf55c48..61513333bfd 100644
index d61dfdcd956..e18b76bff5b 100644
--- a/server/esync.c
+++ b/server/esync.c
@@ -297,6 +297,24 @@ struct esync *create_esync( struct object *root, const struct unicode_str *name,
@ -49,7 +49,7 @@ index 7ca4ca89394..6a0a367124d 100644
void esync_init(void);
+int esync_create_fd( int initval, int flags );
diff --git a/server/process.c b/server/process.c
index 30699fbaeae..febfc0237c6 100644
index 310b2716dfa..d2919a2db09 100644
--- a/server/process.c
+++ b/server/process.c
@@ -49,6 +49,7 @@
@ -58,9 +58,9 @@ index 30699fbaeae..febfc0237c6 100644
#include "security.h"
+#include "esync.h"
/* process structure */
/* process object */
@@ -68,6 +69,7 @@ static struct security_descriptor *process_get_sd( struct object *obj );
@@ -72,6 +73,7 @@ static struct security_descriptor *process_get_sd( struct object *obj );
static void process_poll_event( struct fd *fd, int event );
static struct list *process_get_kernel_obj_list( struct object *obj );
static void process_destroy( struct object *obj );
@ -68,7 +68,7 @@ index 30699fbaeae..febfc0237c6 100644
static void terminate_process( struct process *process, struct thread *skip, int exit_code );
static const struct object_ops process_ops =
@@ -78,7 +80,7 @@ static const struct object_ops process_ops =
@@ -82,7 +84,7 @@ static const struct object_ops process_ops =
add_queue, /* add_queue */
remove_queue, /* remove_queue */
process_signaled, /* signaled */
@ -77,7 +77,7 @@ index 30699fbaeae..febfc0237c6 100644
no_satisfied, /* satisfied */
no_signal, /* signal */
no_get_fd, /* get_fd */
@@ -545,6 +547,7 @@ struct process *create_process( int fd, struct process *parent, int inherit_all,
@@ -547,6 +549,7 @@ struct process *create_process( int fd, struct process *parent, int inherit_all,
process->trace_data = 0;
process->rawinput_mouse = NULL;
process->rawinput_kbd = NULL;
@ -85,7 +85,7 @@ index 30699fbaeae..febfc0237c6 100644
list_init( &process->kernel_object );
list_init( &process->thread_list );
list_init( &process->locks );
@@ -601,6 +604,9 @@ struct process *create_process( int fd, struct process *parent, int inherit_all,
@@ -603,6 +606,9 @@ struct process *create_process( int fd, struct process *parent, int inherit_all,
if (!token_assign_label( process->token, security_high_label_sid ))
goto error;
@ -103,7 +103,7 @@ index 30699fbaeae..febfc0237c6 100644
}
/* dump a process on stdout for debugging purposes */
@@ -673,6 +680,13 @@ static int process_signaled( struct object *obj, struct wait_queue_entry *entry
@@ -666,6 +673,13 @@ static int process_signaled( struct object *obj, struct wait_queue_entry *entry
return !process->running_threads;
}
@ -118,10 +118,10 @@ index 30699fbaeae..febfc0237c6 100644
{
if (access & GENERIC_READ) access |= STANDARD_RIGHTS_READ | PROCESS_QUERY_INFORMATION | PROCESS_VM_READ;
diff --git a/server/process.h b/server/process.h
index 56092e5b1ac..eec69ddbcaf 100644
index caab869c8a0..afa90581b97 100644
--- a/server/process.h
+++ b/server/process.h
@@ -98,6 +98,7 @@ struct process
@@ -95,6 +95,7 @@ struct process
const struct rawinput_device *rawinput_mouse; /* rawinput mouse device, if any */
const struct rawinput_device *rawinput_kbd; /* rawinput keyboard device, if any */
struct list kernel_object; /* list of kernel object pointers */
@ -130,5 +130,5 @@ index 56092e5b1ac..eec69ddbcaf 100644
#define CPU_FLAG(cpu) (1 << (cpu))
--
2.28.0
2.20.1

View File

@ -1,4 +1,4 @@
From 3ff6192702c06e77ef2e6790215ec3a40216052f Mon Sep 17 00:00:00 2001
From bc87843880d2a1ef6f092793c09439c729fe7dbb Mon Sep 17 00:00:00 2001
From: Zebediah Figura <z.figura12@gmail.com>
Date: Fri, 8 Jun 2018 21:01:24 -0500
Subject: [PATCH] server: Create eventfd file descriptors for event objects.
@ -13,7 +13,7 @@ This lets system processes shut down.
3 files changed, 36 insertions(+), 2 deletions(-)
diff --git a/server/esync.c b/server/esync.c
index 5f6e60ab24c..cb9bfba4463 100644
index 2b9307267f9..975e5d2ddd6 100644
--- a/server/esync.c
+++ b/server/esync.c
@@ -331,6 +331,14 @@ void esync_wake_up( struct object *obj )
@ -41,7 +41,7 @@ index 1e12560ddd6..fcbfd0989bb 100644
void esync_wake_up( struct object *obj );
+void esync_clear( int fd );
diff --git a/server/event.c b/server/event.c
index 06655fc7dd6..a416d214912 100644
index 7c57ce54d13..78d90dac5d6 100644
--- a/server/event.c
+++ b/server/event.c
@@ -35,6 +35,7 @@
@ -50,9 +50,9 @@ index 06655fc7dd6..a416d214912 100644
#include "security.h"
+#include "esync.h"
struct event
{
@@ -42,15 +43,18 @@ struct event
static const WCHAR event_name[] = {'E','v','e','n','t'};
@@ -49,14 +50,17 @@ struct event
struct list kernel_object; /* list of kernel object pointers */
int manual_reset; /* is it a manual reset event? */
int signaled; /* event has been signaled */
@ -60,7 +60,6 @@ index 06655fc7dd6..a416d214912 100644
};
static void event_dump( struct object *obj, int verbose );
static struct object_type *event_get_type( struct object *obj );
static int event_signaled( struct object *obj, struct wait_queue_entry *entry );
static void event_satisfied( struct object *obj, struct wait_queue_entry *entry );
+static int event_get_esync_fd( struct object *obj, enum esync_type *type );
@ -71,7 +70,7 @@ index 06655fc7dd6..a416d214912 100644
static const struct object_ops event_ops =
{
@@ -60,7 +64,7 @@ static const struct object_ops event_ops =
@@ -66,7 +70,7 @@ static const struct object_ops event_ops =
add_queue, /* add_queue */
remove_queue, /* remove_queue */
event_signaled, /* signaled */
@ -80,7 +79,7 @@ index 06655fc7dd6..a416d214912 100644
event_satisfied, /* satisfied */
event_signal, /* signal */
no_get_fd, /* get_fd */
@@ -74,7 +78,7 @@ static const struct object_ops event_ops =
@@ -80,7 +84,7 @@ static const struct object_ops event_ops =
no_open_file, /* open_file */
event_get_kernel_obj_list, /* get_kernel_obj_list */
no_close_handle, /* close_handle */
@ -89,7 +88,7 @@ index 06655fc7dd6..a416d214912 100644
};
@@ -128,6 +132,9 @@ struct event *create_event( struct object *root, const struct unicode_str *name,
@@ -140,6 +144,9 @@ struct event *create_event( struct object *root, const struct unicode_str *name,
list_init( &event->kernel_object );
event->manual_reset = manual_reset;
event->signaled = initial_state;
@ -99,7 +98,7 @@ index 06655fc7dd6..a416d214912 100644
}
}
return event;
@@ -156,6 +163,9 @@ void set_event( struct event *event )
@@ -168,6 +175,9 @@ void set_event( struct event *event )
void reset_event( struct event *event )
{
event->signaled = 0;
@ -109,7 +108,7 @@ index 06655fc7dd6..a416d214912 100644
}
static void event_dump( struct object *obj, int verbose )
@@ -180,6 +190,13 @@ static int event_signaled( struct object *obj, struct wait_queue_entry *entry )
@@ -185,6 +195,13 @@ static int event_signaled( struct object *obj, struct wait_queue_entry *entry )
return event->signaled;
}
@ -123,7 +122,7 @@ index 06655fc7dd6..a416d214912 100644
static void event_satisfied( struct object *obj, struct wait_queue_entry *entry )
{
struct event *event = (struct event *)obj;
@@ -217,6 +234,14 @@ static struct list *event_get_kernel_obj_list( struct object *obj )
@@ -222,6 +239,14 @@ static struct list *event_get_kernel_obj_list( struct object *obj )
return &event->kernel_object;
}
@ -139,5 +138,5 @@ index 06655fc7dd6..a416d214912 100644
unsigned int attr, const struct security_descriptor *sd )
{
--
2.28.0
2.20.1

View File

@ -1,4 +1,4 @@
From 21ef43501fbef2d5ded6890932294b1160ccc810 Mon Sep 17 00:00:00 2001
From 949b61856a56c339cbe6f8ec88a34902e200ae8e Mon Sep 17 00:00:00 2001
From: Zebediah Figura <z.figura12@gmail.com>
Date: Fri, 8 Jun 2018 21:43:37 -0500
Subject: [PATCH] server: Allow (re)setting esync events on the server side.
@ -17,7 +17,7 @@ so this is how we do it.
3 files changed, 42 insertions(+), 1 deletion(-)
diff --git a/server/esync.c b/server/esync.c
index cb9bfba4463..ddee22432e5 100644
index 975e5d2ddd6..ac59779a454 100644
--- a/server/esync.c
+++ b/server/esync.c
@@ -116,7 +116,7 @@ struct esync
@ -28,7 +28,7 @@ index cb9bfba4463..ddee22432e5 100644
+const struct object_ops esync_ops =
{
sizeof(struct esync), /* size */
esync_dump, /* dump */
&no_type, /* type */
@@ -339,6 +339,26 @@ void esync_clear( int fd )
read( fd, &value, sizeof(value) );
}
@ -71,10 +71,10 @@ index fcbfd0989bb..aeb58c5469c 100644
+void esync_set_event( struct esync *esync );
+void esync_reset_event( struct esync *esync );
diff --git a/server/event.c b/server/event.c
index a416d214912..b6f989d4d6a 100644
index 78d90dac5d6..bc2948c30aa 100644
--- a/server/event.c
+++ b/server/event.c
@@ -142,6 +142,10 @@ struct event *create_event( struct object *root, const struct unicode_str *name,
@@ -154,6 +154,10 @@ struct event *create_event( struct object *root, const struct unicode_str *name,
struct event *get_event_obj( struct process *process, obj_handle_t handle, unsigned int access )
{
@ -85,7 +85,7 @@ index a416d214912..b6f989d4d6a 100644
return (struct event *)get_handle_obj( process, handle, access, &event_ops );
}
@@ -155,6 +159,12 @@ void pulse_event( struct event *event )
@@ -167,6 +171,12 @@ void pulse_event( struct event *event )
void set_event( struct event *event )
{
@ -98,7 +98,7 @@ index a416d214912..b6f989d4d6a 100644
event->signaled = 1;
/* wake up all waiters if manual reset, a single one otherwise */
wake_up( &event->obj, !event->manual_reset );
@@ -162,6 +172,11 @@ void set_event( struct event *event )
@@ -174,6 +184,11 @@ void set_event( struct event *event )
void reset_event( struct event *event )
{
@ -111,5 +111,5 @@ index a416d214912..b6f989d4d6a 100644
if (do_esync())
--
2.28.0
2.20.1

View File

@ -1,4 +1,4 @@
From 88819d39a698afb9024eb37d233cdddf490a0930 Mon Sep 17 00:00:00 2001
From 183ec6174f0d6d02b9f94aaf0f0b35874e8b4b09 Mon Sep 17 00:00:00 2001
From: Zebediah Figura <z.figura12@gmail.com>
Date: Fri, 8 Jun 2018 22:04:29 -0500
Subject: [PATCH] server: Create eventfd file descriptors for thread objects.
@ -9,18 +9,18 @@ Subject: [PATCH] server: Create eventfd file descriptors for thread objects.
2 files changed, 17 insertions(+), 1 deletion(-)
diff --git a/server/thread.c b/server/thread.c
index 0fddc37856a..48c3eae7413 100644
index d3021d3d771..26cbeee68fd 100644
--- a/server/thread.c
+++ b/server/thread.c
@@ -172,6 +172,7 @@ static const struct object_ops context_ops =
@@ -178,6 +178,7 @@ struct type_descr thread_type =
static void dump_thread( struct object *obj, int verbose );
static struct object_type *thread_get_type( struct object *obj );
static int thread_signaled( struct object *obj, struct wait_queue_entry *entry );
+static int thread_get_esync_fd( struct object *obj, enum esync_type *type );
static unsigned int thread_map_access( struct object *obj, unsigned int access );
static void thread_poll_event( struct fd *fd, int event );
static struct list *thread_get_kernel_obj_list( struct object *obj );
@@ -185,7 +186,7 @@ static const struct object_ops thread_ops =
@@ -191,7 +192,7 @@ static const struct object_ops thread_ops =
add_queue, /* add_queue */
remove_queue, /* remove_queue */
thread_signaled, /* signaled */
@ -29,7 +29,7 @@ index 0fddc37856a..48c3eae7413 100644
no_satisfied, /* satisfied */
no_signal, /* signal */
no_get_fd, /* get_fd */
@@ -225,6 +226,7 @@ static inline void init_thread_structure( struct thread *thread )
@@ -231,6 +232,7 @@ static inline void init_thread_structure( struct thread *thread )
thread->context = NULL;
thread->teb = 0;
thread->entry_point = 0;
@ -37,7 +37,7 @@ index 0fddc37856a..48c3eae7413 100644
thread->system_regs = 0;
thread->queue = NULL;
thread->wait = NULL;
@@ -360,6 +362,9 @@ struct thread *create_thread( int fd, struct process *process, const struct secu
@@ -366,6 +368,9 @@ struct thread *create_thread( int fd, struct process *process, const struct secu
return NULL;
}
@ -47,7 +47,7 @@ index 0fddc37856a..48c3eae7413 100644
set_fd_events( thread->request_fd, POLLIN ); /* start listening to events */
add_process_thread( thread->process, thread );
return thread;
@@ -439,6 +444,9 @@ static void destroy_thread( struct object *obj )
@@ -445,6 +450,9 @@ static void destroy_thread( struct object *obj )
if (thread->exit_poll) remove_timeout_user( thread->exit_poll );
if (thread->id) free_ptid( thread->id );
if (thread->token) release_object( thread->token );
@ -57,7 +57,7 @@ index 0fddc37856a..48c3eae7413 100644
}
/* dump a thread on stdout for debugging purposes */
@@ -464,6 +472,13 @@ static int thread_signaled( struct object *obj, struct wait_queue_entry *entry )
@@ -463,6 +471,13 @@ static int thread_signaled( struct object *obj, struct wait_queue_entry *entry )
return mythread->state == TERMINATED && !mythread->exit_poll;
}
@ -84,5 +84,5 @@ index 077ab0929ba..99904557d44 100644
struct msg_queue *queue; /* message queue */
struct thread_wait *wait; /* current wait condition if sleeping */
--
2.29.2
2.20.1

View File

@ -1,4 +1,4 @@
From 9e3d043ea15a1814f2003b7c6ebe6968b51b7740 Mon Sep 17 00:00:00 2001
From 8a5b98f58a86731874f7d8c0e387aeab22e15fea Mon Sep 17 00:00:00 2001
From: Zebediah Figura <z.figura12@gmail.com>
Date: Fri, 15 Jun 2018 11:01:44 -0500
Subject: [PATCH] server: Create eventfd descriptors for timers.
@ -8,7 +8,7 @@ Subject: [PATCH] server: Create eventfd descriptors for timers.
1 file changed, 18 insertions(+), 1 deletion(-)
diff --git a/server/timer.c b/server/timer.c
index 319b9d142db..11fcdf3bae7 100644
index be4d5943a41..f1abca3de90 100644
--- a/server/timer.c
+++ b/server/timer.c
@@ -36,6 +36,7 @@
@ -17,9 +17,9 @@ index 319b9d142db..11fcdf3bae7 100644
#include "request.h"
+#include "esync.h"
struct timer
{
@@ -48,11 +49,13 @@ struct timer
static const WCHAR timer_name[] = {'T','i','m','e','r'};
@@ -55,10 +56,12 @@ struct timer
struct thread *thread; /* thread that set the APC function */
client_ptr_t callback; /* callback APC function */
client_ptr_t arg; /* callback argument */
@ -27,13 +27,12 @@ index 319b9d142db..11fcdf3bae7 100644
};
static void timer_dump( struct object *obj, int verbose );
static struct object_type *timer_get_type( struct object *obj );
static int timer_signaled( struct object *obj, struct wait_queue_entry *entry );
+static int timer_get_esync_fd( struct object *obj, enum esync_type *type );
static void timer_satisfied( struct object *obj, struct wait_queue_entry *entry );
static unsigned int timer_map_access( struct object *obj, unsigned int access );
static void timer_destroy( struct object *obj );
@@ -65,7 +68,7 @@ static const struct object_ops timer_ops =
@@ -71,7 +74,7 @@ static const struct object_ops timer_ops =
add_queue, /* add_queue */
remove_queue, /* remove_queue */
timer_signaled, /* signaled */
@ -42,7 +41,7 @@ index 319b9d142db..11fcdf3bae7 100644
timer_satisfied, /* satisfied */
no_signal, /* signal */
no_get_fd, /* get_fd */
@@ -100,6 +103,10 @@ static struct timer *create_timer( struct object *root, const struct unicode_str
@@ -106,6 +109,10 @@ static struct timer *create_timer( struct object *root, const struct unicode_str
timer->period = 0;
timer->timeout = NULL;
timer->thread = NULL;
@ -53,7 +52,7 @@ index 319b9d142db..11fcdf3bae7 100644
}
}
return timer;
@@ -173,6 +180,9 @@ static int set_timer( struct timer *timer, timeout_t expire, unsigned int period
@@ -179,6 +186,9 @@ static int set_timer( struct timer *timer, timeout_t expire, unsigned int period
{
period = 0; /* period doesn't make any sense for a manual timer */
timer->signaled = 0;
@ -63,7 +62,7 @@ index 319b9d142db..11fcdf3bae7 100644
}
timer->when = (expire <= 0) ? expire - monotonic_time : max( expire, current_time );
timer->period = period;
@@ -207,6 +217,13 @@ static int timer_signaled( struct object *obj, struct wait_queue_entry *entry )
@@ -206,6 +216,13 @@ static int timer_signaled( struct object *obj, struct wait_queue_entry *entry )
return timer->signaled;
}
@ -78,5 +77,5 @@ index 319b9d142db..11fcdf3bae7 100644
{
struct timer *timer = (struct timer *)obj;
--
2.28.0
2.20.1