xref: /openbmc/qemu/include/system/iothread.h (revision 65cb7129f4160c7e07a0da107f888ec73ae96776)
1*32cad1ffSPhilippe Mathieu-Daudé /*
2*32cad1ffSPhilippe Mathieu-Daudé  * Event loop thread
3*32cad1ffSPhilippe Mathieu-Daudé  *
4*32cad1ffSPhilippe Mathieu-Daudé  * Copyright Red Hat Inc., 2013
5*32cad1ffSPhilippe Mathieu-Daudé  *
6*32cad1ffSPhilippe Mathieu-Daudé  * Authors:
7*32cad1ffSPhilippe Mathieu-Daudé  *  Stefan Hajnoczi   <stefanha@redhat.com>
8*32cad1ffSPhilippe Mathieu-Daudé  *
9*32cad1ffSPhilippe Mathieu-Daudé  * This work is licensed under the terms of the GNU GPL, version 2 or later.
10*32cad1ffSPhilippe Mathieu-Daudé  * See the COPYING file in the top-level directory.
11*32cad1ffSPhilippe Mathieu-Daudé  *
12*32cad1ffSPhilippe Mathieu-Daudé  */
13*32cad1ffSPhilippe Mathieu-Daudé 
14*32cad1ffSPhilippe Mathieu-Daudé #ifndef IOTHREAD_H
15*32cad1ffSPhilippe Mathieu-Daudé #define IOTHREAD_H
16*32cad1ffSPhilippe Mathieu-Daudé 
17*32cad1ffSPhilippe Mathieu-Daudé #include "block/aio.h"
18*32cad1ffSPhilippe Mathieu-Daudé #include "qemu/thread.h"
19*32cad1ffSPhilippe Mathieu-Daudé #include "qom/object.h"
20*32cad1ffSPhilippe Mathieu-Daudé #include "system/event-loop-base.h"
21*32cad1ffSPhilippe Mathieu-Daudé 
22*32cad1ffSPhilippe Mathieu-Daudé #define TYPE_IOTHREAD "iothread"
23*32cad1ffSPhilippe Mathieu-Daudé 
24*32cad1ffSPhilippe Mathieu-Daudé struct IOThread {
25*32cad1ffSPhilippe Mathieu-Daudé     EventLoopBase parent_obj;
26*32cad1ffSPhilippe Mathieu-Daudé 
27*32cad1ffSPhilippe Mathieu-Daudé     QemuThread thread;
28*32cad1ffSPhilippe Mathieu-Daudé     AioContext *ctx;
29*32cad1ffSPhilippe Mathieu-Daudé     bool run_gcontext;          /* whether we should run gcontext */
30*32cad1ffSPhilippe Mathieu-Daudé     GMainContext *worker_context;
31*32cad1ffSPhilippe Mathieu-Daudé     GMainLoop *main_loop;
32*32cad1ffSPhilippe Mathieu-Daudé     QemuSemaphore init_done_sem; /* is thread init done? */
33*32cad1ffSPhilippe Mathieu-Daudé     bool stopping;              /* has iothread_stop() been called? */
34*32cad1ffSPhilippe Mathieu-Daudé     bool running;               /* should iothread_run() continue? */
35*32cad1ffSPhilippe Mathieu-Daudé     int thread_id;
36*32cad1ffSPhilippe Mathieu-Daudé 
37*32cad1ffSPhilippe Mathieu-Daudé     /* AioContext poll parameters */
38*32cad1ffSPhilippe Mathieu-Daudé     int64_t poll_max_ns;
39*32cad1ffSPhilippe Mathieu-Daudé     int64_t poll_grow;
40*32cad1ffSPhilippe Mathieu-Daudé     int64_t poll_shrink;
41*32cad1ffSPhilippe Mathieu-Daudé };
42*32cad1ffSPhilippe Mathieu-Daudé typedef struct IOThread IOThread;
43*32cad1ffSPhilippe Mathieu-Daudé 
44*32cad1ffSPhilippe Mathieu-Daudé DECLARE_INSTANCE_CHECKER(IOThread, IOTHREAD,
45*32cad1ffSPhilippe Mathieu-Daudé                          TYPE_IOTHREAD)
46*32cad1ffSPhilippe Mathieu-Daudé 
47*32cad1ffSPhilippe Mathieu-Daudé char *iothread_get_id(IOThread *iothread);
48*32cad1ffSPhilippe Mathieu-Daudé IOThread *iothread_by_id(const char *id);
49*32cad1ffSPhilippe Mathieu-Daudé AioContext *iothread_get_aio_context(IOThread *iothread);
50*32cad1ffSPhilippe Mathieu-Daudé GMainContext *iothread_get_g_main_context(IOThread *iothread);
51*32cad1ffSPhilippe Mathieu-Daudé 
52*32cad1ffSPhilippe Mathieu-Daudé /*
53*32cad1ffSPhilippe Mathieu-Daudé  * Helpers used to allocate iothreads for internal use.  These
54*32cad1ffSPhilippe Mathieu-Daudé  * iothreads will not be seen by monitor clients when query using
55*32cad1ffSPhilippe Mathieu-Daudé  * "query-iothreads".
56*32cad1ffSPhilippe Mathieu-Daudé  */
57*32cad1ffSPhilippe Mathieu-Daudé IOThread *iothread_create(const char *id, Error **errp);
58*32cad1ffSPhilippe Mathieu-Daudé void iothread_stop(IOThread *iothread);
59*32cad1ffSPhilippe Mathieu-Daudé void iothread_destroy(IOThread *iothread);
60*32cad1ffSPhilippe Mathieu-Daudé 
61*32cad1ffSPhilippe Mathieu-Daudé /*
62*32cad1ffSPhilippe Mathieu-Daudé  * Returns true if executing within IOThread context,
63*32cad1ffSPhilippe Mathieu-Daudé  * false otherwise.
64*32cad1ffSPhilippe Mathieu-Daudé  */
65*32cad1ffSPhilippe Mathieu-Daudé bool qemu_in_iothread(void);
66*32cad1ffSPhilippe Mathieu-Daudé 
67*32cad1ffSPhilippe Mathieu-Daudé #endif /* IOTHREAD_H */
68