diff mbox series

[v7,2/6] Wrapper function to wait on condition for the main loop mutex

Message ID 155323642914.18748.10882970739268674736.stgit@aravinda (mailing list archive)
State New, archived
Headers show
Series target-ppc/spapr: Add FWNMI support in QEMU for PowerKVM guests | expand

Commit Message

Aravinda Prasad March 22, 2019, 6:33 a.m. UTC
Introduce a wrapper function to wait on condition for
the main loop mutex. This function atomically releases
the main loop mutex and causes the calling thread to
block on the condition.

Signed-off-by: Aravinda Prasad <aravinda@linux.vnet.ibm.com>
---
 cpus.c                   |    5 +++++
 include/qemu/main-loop.h |    8 ++++++++
 2 files changed, 13 insertions(+)

Comments

David Gibson March 25, 2019, 6:17 a.m. UTC | #1
On Fri, Mar 22, 2019 at 12:03:49PM +0530, Aravinda Prasad wrote:
> Introduce a wrapper function to wait on condition for
> the main loop mutex. This function atomically releases
> the main loop mutex and causes the calling thread to
> block on the condition.
> 
> Signed-off-by: Aravinda Prasad <aravinda@linux.vnet.ibm.com>

I don't see much value to this.  It's not really more expressive, and
is barely shorted than just open coding
	qemu_cond_wait(cond, &qemu_global_mutex)
wherever you need it.


> ---
>  cpus.c                   |    5 +++++
>  include/qemu/main-loop.h |    8 ++++++++
>  2 files changed, 13 insertions(+)
> 
> diff --git a/cpus.c b/cpus.c
> index e83f72b..d9379e7 100644
> --- a/cpus.c
> +++ b/cpus.c
> @@ -1858,6 +1858,11 @@ void qemu_mutex_unlock_iothread(void)
>      qemu_mutex_unlock(&qemu_global_mutex);
>  }
>  
> +void qemu_cond_wait_iothread(QemuCond *cond)
> +{
> +    qemu_cond_wait(cond, &qemu_global_mutex);
> +}
> +
>  static bool all_vcpus_paused(void)
>  {
>      CPUState *cpu;
> diff --git a/include/qemu/main-loop.h b/include/qemu/main-loop.h
> index f6ba78e..a6d20b0 100644
> --- a/include/qemu/main-loop.h
> +++ b/include/qemu/main-loop.h
> @@ -295,6 +295,14 @@ void qemu_mutex_lock_iothread_impl(const char *file, int line);
>   */
>  void qemu_mutex_unlock_iothread(void);
>  
> +/*
> + * qemu_cond_wait_iothread: Wait on condition for the main loop mutex
> + *
> + * This function atomically releases the main loop mutex and causes
> + * the calling thread to block on the condition.
> + */
> +void qemu_cond_wait_iothread(QemuCond *cond);
> +
>  /* internal interfaces */
>  
>  void qemu_fd_register(int fd);
>
Aravinda Prasad March 25, 2019, 7:36 a.m. UTC | #2
On Monday 25 March 2019 11:47 AM, David Gibson wrote:
> On Fri, Mar 22, 2019 at 12:03:49PM +0530, Aravinda Prasad wrote:
>> Introduce a wrapper function to wait on condition for
>> the main loop mutex. This function atomically releases
>> the main loop mutex and causes the calling thread to
>> block on the condition.
>>
>> Signed-off-by: Aravinda Prasad <aravinda@linux.vnet.ibm.com>
> 
> I don't see much value to this.  It's not really more expressive, and
> is barely shorted than just open coding
> 	qemu_cond_wait(cond, &qemu_global_mutex)
> wherever you need it.

I have done this way because qemu_global_mutex is static. Do you prefer
removing static instead of this wrapper?

Regards,
Aravinda

> 
> 
>> ---
>>  cpus.c                   |    5 +++++
>>  include/qemu/main-loop.h |    8 ++++++++
>>  2 files changed, 13 insertions(+)
>>
>> diff --git a/cpus.c b/cpus.c
>> index e83f72b..d9379e7 100644
>> --- a/cpus.c
>> +++ b/cpus.c
>> @@ -1858,6 +1858,11 @@ void qemu_mutex_unlock_iothread(void)
>>      qemu_mutex_unlock(&qemu_global_mutex);
>>  }
>>  
>> +void qemu_cond_wait_iothread(QemuCond *cond)
>> +{
>> +    qemu_cond_wait(cond, &qemu_global_mutex);
>> +}
>> +
>>  static bool all_vcpus_paused(void)
>>  {
>>      CPUState *cpu;
>> diff --git a/include/qemu/main-loop.h b/include/qemu/main-loop.h
>> index f6ba78e..a6d20b0 100644
>> --- a/include/qemu/main-loop.h
>> +++ b/include/qemu/main-loop.h
>> @@ -295,6 +295,14 @@ void qemu_mutex_lock_iothread_impl(const char *file, int line);
>>   */
>>  void qemu_mutex_unlock_iothread(void);
>>  
>> +/*
>> + * qemu_cond_wait_iothread: Wait on condition for the main loop mutex
>> + *
>> + * This function atomically releases the main loop mutex and causes
>> + * the calling thread to block on the condition.
>> + */
>> +void qemu_cond_wait_iothread(QemuCond *cond);
>> +
>>  /* internal interfaces */
>>  
>>  void qemu_fd_register(int fd);
>>
>
David Gibson March 26, 2019, 4:20 a.m. UTC | #3
On Mon, Mar 25, 2019 at 01:06:08PM +0530, Aravinda Prasad wrote:
> 
> 
> On Monday 25 March 2019 11:47 AM, David Gibson wrote:
> > On Fri, Mar 22, 2019 at 12:03:49PM +0530, Aravinda Prasad wrote:
> >> Introduce a wrapper function to wait on condition for
> >> the main loop mutex. This function atomically releases
> >> the main loop mutex and causes the calling thread to
> >> block on the condition.
> >>
> >> Signed-off-by: Aravinda Prasad <aravinda@linux.vnet.ibm.com>
> > 
> > I don't see much value to this.  It's not really more expressive, and
> > is barely shorted than just open coding
> > 	qemu_cond_wait(cond, &qemu_global_mutex)
> > wherever you need it.
> 
> I have done this way because qemu_global_mutex is static. Do you prefer
> removing static instead of this wrapper?

Ah, right.

I think keep the wrapper, then, but update the commit message to
include this rationale for it.
Aravinda Prasad March 26, 2019, 6:26 a.m. UTC | #4
On Tuesday 26 March 2019 09:50 AM, David Gibson wrote:
> On Mon, Mar 25, 2019 at 01:06:08PM +0530, Aravinda Prasad wrote:
>>
>>
>> On Monday 25 March 2019 11:47 AM, David Gibson wrote:
>>> On Fri, Mar 22, 2019 at 12:03:49PM +0530, Aravinda Prasad wrote:
>>>> Introduce a wrapper function to wait on condition for
>>>> the main loop mutex. This function atomically releases
>>>> the main loop mutex and causes the calling thread to
>>>> block on the condition.
>>>>
>>>> Signed-off-by: Aravinda Prasad <aravinda@linux.vnet.ibm.com>
>>>
>>> I don't see much value to this.  It's not really more expressive, and
>>> is barely shorted than just open coding
>>> 	qemu_cond_wait(cond, &qemu_global_mutex)
>>> wherever you need it.
>>
>> I have done this way because qemu_global_mutex is static. Do you prefer
>> removing static instead of this wrapper?
> 
> Ah, right.
> 
> I think keep the wrapper, then, but update the commit message to
> include this rationale for it.

Sure.

>
diff mbox series

Patch

diff --git a/cpus.c b/cpus.c
index e83f72b..d9379e7 100644
--- a/cpus.c
+++ b/cpus.c
@@ -1858,6 +1858,11 @@  void qemu_mutex_unlock_iothread(void)
     qemu_mutex_unlock(&qemu_global_mutex);
 }
 
+void qemu_cond_wait_iothread(QemuCond *cond)
+{
+    qemu_cond_wait(cond, &qemu_global_mutex);
+}
+
 static bool all_vcpus_paused(void)
 {
     CPUState *cpu;
diff --git a/include/qemu/main-loop.h b/include/qemu/main-loop.h
index f6ba78e..a6d20b0 100644
--- a/include/qemu/main-loop.h
+++ b/include/qemu/main-loop.h
@@ -295,6 +295,14 @@  void qemu_mutex_lock_iothread_impl(const char *file, int line);
  */
 void qemu_mutex_unlock_iothread(void);
 
+/*
+ * qemu_cond_wait_iothread: Wait on condition for the main loop mutex
+ *
+ * This function atomically releases the main loop mutex and causes
+ * the calling thread to block on the condition.
+ */
+void qemu_cond_wait_iothread(QemuCond *cond);
+
 /* internal interfaces */
 
 void qemu_fd_register(int fd);