Rebase against b479382737f9ee110bc61b1dd765c5b81d56c900.

This commit is contained in:
Zebediah Figura
2019-05-03 23:09:43 -05:00
parent dc2e2153f3
commit 8cbbf850d1
9 changed files with 43 additions and 635 deletions

View File

@ -1,7 +1,7 @@
From 2887a75d89ec2552abb472603f8db70a6e70c1f8 Mon Sep 17 00:00:00 2001
From 5eddf968dfe301274c53a11f1f4d28e8b77fdb87 Mon Sep 17 00:00:00 2001
From: Zebediah Figura <z.figura12@gmail.com>
Date: Sat, 9 Jun 2018 15:39:37 -0500
Subject: [PATCH 25/83] server: Create eventfd descriptors for device manager
Subject: [PATCH] server: Create eventfd descriptors for device manager
objects.
We don't have to worry about synchronization here because
@ -15,7 +15,7 @@ Drives tab.
1 file changed, 23 insertions(+), 1 deletion(-)
diff --git a/server/device.c b/server/device.c
index 67505d99c..aaec23495 100644
index a6bfa06eb..5f82daa73 100644
--- a/server/device.c
+++ b/server/device.c
@@ -39,6 +39,7 @@
@ -26,9 +26,9 @@ index 67505d99c..aaec23495 100644
/* IRP object */
@@ -91,10 +92,12 @@ struct device_manager
struct list devices; /* list of devices */
@@ -92,10 +93,12 @@ struct device_manager
struct list requests; /* list of pending irps across all devices */
struct irp_call *current_call; /* call currently executed on client side */
struct wine_rb_tree kernel_objects; /* map of objects that have client side pointer associated */
+ int esync_fd; /* esync file descriptor */
};
@ -39,7 +39,7 @@ index 67505d99c..aaec23495 100644
static void device_manager_destroy( struct object *obj );
static const struct object_ops device_manager_ops =
@@ -105,7 +108,7 @@ static const struct object_ops device_manager_ops =
@@ -106,7 +109,7 @@ static const struct object_ops device_manager_ops =
add_queue, /* add_queue */
remove_queue, /* remove_queue */
device_manager_signaled, /* signaled */
@ -48,7 +48,7 @@ index 67505d99c..aaec23495 100644
no_satisfied, /* satisfied */
no_signal, /* signal */
no_get_fd, /* get_fd */
@@ -659,6 +662,9 @@ static void delete_file( struct device_file *file )
@@ -694,6 +697,9 @@ static void delete_file( struct device_file *file )
/* terminate all pending requests */
LIST_FOR_EACH_ENTRY_SAFE( irp, next, &file->requests, struct irp_call, dev_entry )
{
@ -58,7 +58,7 @@ index 67505d99c..aaec23495 100644
list_remove( &irp->mgr_entry );
set_irp_result( irp, STATUS_FILE_DELETED, NULL, 0, 0 );
}
@@ -695,6 +701,13 @@ static int device_manager_signaled( struct object *obj, struct wait_queue_entry
@@ -726,6 +732,13 @@ static int device_manager_signaled( struct object *obj, struct wait_queue_entry
return !list_empty( &manager->requests );
}
@ -72,7 +72,7 @@ index 67505d99c..aaec23495 100644
static void device_manager_destroy( struct object *obj )
{
struct device_manager *manager = (struct device_manager *)obj;
@@ -725,6 +738,9 @@ static void device_manager_destroy( struct object *obj )
@@ -760,6 +773,9 @@ static void device_manager_destroy( struct object *obj )
assert( !irp->file && !irp->async );
release_object( irp );
}
@ -82,7 +82,7 @@ index 67505d99c..aaec23495 100644
}
static struct device_manager *create_device_manager(void)
@@ -736,6 +752,9 @@ static struct device_manager *create_device_manager(void)
@@ -772,6 +788,9 @@ static struct device_manager *create_device_manager(void)
list_init( &manager->devices );
list_init( &manager->requests );
wine_rb_init( &manager->kernel_objects, compare_kernel_object );
@ -92,16 +92,16 @@ index 67505d99c..aaec23495 100644
}
return manager;
}
@@ -874,6 +893,9 @@ DECL_HANDLER(get_next_device_request)
list_remove( &irp->mgr_entry );
list_init( &irp->mgr_entry );
if (!irp->file) release_object( irp ); /* no longer on manager queue */
@@ -930,6 +949,9 @@ DECL_HANDLER(get_next_device_request)
/* we already own the object if it's only on manager queue */
if (irp->file) grab_object( irp );
manager->current_call = irp;
+
+ if (do_esync() && list_empty( &manager->requests ))
+ esync_clear( manager->esync_fd );
+ if (do_esync() && list_empty( &manager->requests ))
+ esync_clear( manager->esync_fd );
}
else close_handle( current->process, reply->next );
}
}
else set_error( STATUS_PENDING );
--
2.20.1
2.21.0