Patchwork [RFC,for-1.4] qemu-thread-posix: Fix build for OpenBSD

login
register
mail settings
Submitter Andreas Färber
Date Jan. 18, 2013, 3:58 p.m.
Message ID <1358524722-24542-1-git-send-email-andreas.faerber@web.de>
Download mbox | patch
Permalink /patch/213651/
State New
Headers show

Comments

Andreas Färber - Jan. 18, 2013, 3:58 p.m.
Avoid an undefined reference to sem_timedwait.

Signed-off-by: Andreas Färber <andreas.faerber@web.de>
---
 include/qemu/thread-posix.h |    2 +-
 util/qemu-thread-posix.c    |   10 +++++-----
 2 Dateien geändert, 6 Zeilen hinzugefügt(+), 6 Zeilen entfernt(-)
Paolo Bonzini - Jan. 18, 2013, 4:05 p.m.
Il 18/01/2013 16:58, Andreas Färber ha scritto:
> Avoid an undefined reference to sem_timedwait.
> 
> Signed-off-by: Andreas Färber <andreas.faerber@web.de>
> ---
>  include/qemu/thread-posix.h |    2 +-
>  util/qemu-thread-posix.c    |   10 +++++-----
>  2 Dateien geändert, 6 Zeilen hinzugefügt(+), 6 Zeilen entfernt(-)
> 
> diff --git a/include/qemu/thread-posix.h b/include/qemu/thread-posix.h
> index 0f30dcc..772d925 100644
> --- a/include/qemu/thread-posix.h
> +++ b/include/qemu/thread-posix.h
> @@ -12,7 +12,7 @@ struct QemuCond {
>  };
>  
>  struct QemuSemaphore {
> -#if defined(__APPLE__) || defined(__NetBSD__)
> +#if defined(__APPLE__) || defined(__NetBSD__) || defined(__OpenBSD__)
>      pthread_mutex_t lock;
>      pthread_cond_t cond;
>      int count;
> diff --git a/util/qemu-thread-posix.c b/util/qemu-thread-posix.c
> index 4489abf..fa8a3d8 100644
> --- a/util/qemu-thread-posix.c
> +++ b/util/qemu-thread-posix.c
> @@ -122,7 +122,7 @@ void qemu_sem_init(QemuSemaphore *sem, int init)
>  {
>      int rc;
>  
> -#if defined(__APPLE__) || defined(__NetBSD__)
> +#if defined(__APPLE__) || defined(__NetBSD__) || defined(__OpenBSD__)
>      rc = pthread_mutex_init(&sem->lock, NULL);
>      if (rc != 0) {
>          error_exit(rc, __func__);
> @@ -147,7 +147,7 @@ void qemu_sem_destroy(QemuSemaphore *sem)
>  {
>      int rc;
>  
> -#if defined(__APPLE__) || defined(__NetBSD__)
> +#if defined(__APPLE__) || defined(__NetBSD__) || defined(__OpenBSD__)
>      rc = pthread_cond_destroy(&sem->cond);
>      if (rc < 0) {
>          error_exit(rc, __func__);
> @@ -168,7 +168,7 @@ void qemu_sem_post(QemuSemaphore *sem)
>  {
>      int rc;
>  
> -#if defined(__APPLE__) || defined(__NetBSD__)
> +#if defined(__APPLE__) || defined(__NetBSD__) || defined(__OpenBSD__)
>      pthread_mutex_lock(&sem->lock);
>      if (sem->count == INT_MAX) {
>          rc = EINVAL;
> @@ -206,7 +206,7 @@ int qemu_sem_timedwait(QemuSemaphore *sem, int ms)
>      int rc;
>      struct timespec ts;
>  
> -#if defined(__APPLE__) || defined(__NetBSD__)
> +#if defined(__APPLE__) || defined(__NetBSD__) || defined(__OpenBSD__)
>      compute_abs_deadline(&ts, ms);
>      pthread_mutex_lock(&sem->lock);
>      --sem->count;
> @@ -249,7 +249,7 @@ int qemu_sem_timedwait(QemuSemaphore *sem, int ms)
>  
>  void qemu_sem_wait(QemuSemaphore *sem)
>  {
> -#if defined(__APPLE__) || defined(__NetBSD__)
> +#if defined(__APPLE__) || defined(__NetBSD__) || defined(__OpenBSD__)
>      pthread_mutex_lock(&sem->lock);
>      --sem->count;
>      while (sem->count < 0) {
> 

This was reverted recently.  Apparently your OpenBSD is too old compared
to what Brad wants to support...

Paolo
Andreas Färber - Jan. 18, 2013, 4:07 p.m.
Am 18.01.2013 17:05, schrieb Paolo Bonzini:
> Il 18/01/2013 16:58, Andreas Färber ha scritto:
>> Avoid an undefined reference to sem_timedwait.
>>
>> Signed-off-by: Andreas Färber <andreas.faerber@web.de>
>> ---
>>  include/qemu/thread-posix.h |    2 +-
>>  util/qemu-thread-posix.c    |   10 +++++-----
>>  2 Dateien geändert, 6 Zeilen hinzugefügt(+), 6 Zeilen entfernt(-)
>>
>> diff --git a/include/qemu/thread-posix.h b/include/qemu/thread-posix.h
>> index 0f30dcc..772d925 100644
>> --- a/include/qemu/thread-posix.h
>> +++ b/include/qemu/thread-posix.h
>> @@ -12,7 +12,7 @@ struct QemuCond {
>>  };
>>  
>>  struct QemuSemaphore {
>> -#if defined(__APPLE__) || defined(__NetBSD__)
>> +#if defined(__APPLE__) || defined(__NetBSD__) || defined(__OpenBSD__)
>>      pthread_mutex_t lock;
>>      pthread_cond_t cond;
>>      int count;
>> diff --git a/util/qemu-thread-posix.c b/util/qemu-thread-posix.c
>> index 4489abf..fa8a3d8 100644
>> --- a/util/qemu-thread-posix.c
>> +++ b/util/qemu-thread-posix.c
>> @@ -122,7 +122,7 @@ void qemu_sem_init(QemuSemaphore *sem, int init)
>>  {
>>      int rc;
>>  
>> -#if defined(__APPLE__) || defined(__NetBSD__)
>> +#if defined(__APPLE__) || defined(__NetBSD__) || defined(__OpenBSD__)
>>      rc = pthread_mutex_init(&sem->lock, NULL);
>>      if (rc != 0) {
>>          error_exit(rc, __func__);
>> @@ -147,7 +147,7 @@ void qemu_sem_destroy(QemuSemaphore *sem)
>>  {
>>      int rc;
>>  
>> -#if defined(__APPLE__) || defined(__NetBSD__)
>> +#if defined(__APPLE__) || defined(__NetBSD__) || defined(__OpenBSD__)
>>      rc = pthread_cond_destroy(&sem->cond);
>>      if (rc < 0) {
>>          error_exit(rc, __func__);
>> @@ -168,7 +168,7 @@ void qemu_sem_post(QemuSemaphore *sem)
>>  {
>>      int rc;
>>  
>> -#if defined(__APPLE__) || defined(__NetBSD__)
>> +#if defined(__APPLE__) || defined(__NetBSD__) || defined(__OpenBSD__)
>>      pthread_mutex_lock(&sem->lock);
>>      if (sem->count == INT_MAX) {
>>          rc = EINVAL;
>> @@ -206,7 +206,7 @@ int qemu_sem_timedwait(QemuSemaphore *sem, int ms)
>>      int rc;
>>      struct timespec ts;
>>  
>> -#if defined(__APPLE__) || defined(__NetBSD__)
>> +#if defined(__APPLE__) || defined(__NetBSD__) || defined(__OpenBSD__)
>>      compute_abs_deadline(&ts, ms);
>>      pthread_mutex_lock(&sem->lock);
>>      --sem->count;
>> @@ -249,7 +249,7 @@ int qemu_sem_timedwait(QemuSemaphore *sem, int ms)
>>  
>>  void qemu_sem_wait(QemuSemaphore *sem)
>>  {
>> -#if defined(__APPLE__) || defined(__NetBSD__)
>> +#if defined(__APPLE__) || defined(__NetBSD__) || defined(__OpenBSD__)
>>      pthread_mutex_lock(&sem->lock);
>>      --sem->count;
>>      while (sem->count < 0) {
>>
> 
> This was reverted recently.  Apparently your OpenBSD is too old compared
> to what Brad wants to support...

This is 5.1 from 2012.

Andreas
Paolo Bonzini - Jan. 18, 2013, 4:16 p.m.
Il 18/01/2013 17:07, Andreas Färber ha scritto:
> Am 18.01.2013 17:05, schrieb Paolo Bonzini:
>> Il 18/01/2013 16:58, Andreas Färber ha scritto:
>>> Avoid an undefined reference to sem_timedwait.
>>>
>>> Signed-off-by: Andreas Färber <andreas.faerber@web.de>
>>> ---
>>>  include/qemu/thread-posix.h |    2 +-
>>>  util/qemu-thread-posix.c    |   10 +++++-----
>>>  2 Dateien geändert, 6 Zeilen hinzugefügt(+), 6 Zeilen entfernt(-)
>>>
>>> diff --git a/include/qemu/thread-posix.h b/include/qemu/thread-posix.h
>>> index 0f30dcc..772d925 100644
>>> --- a/include/qemu/thread-posix.h
>>> +++ b/include/qemu/thread-posix.h
>>> @@ -12,7 +12,7 @@ struct QemuCond {
>>>  };
>>>  
>>>  struct QemuSemaphore {
>>> -#if defined(__APPLE__) || defined(__NetBSD__)
>>> +#if defined(__APPLE__) || defined(__NetBSD__) || defined(__OpenBSD__)
>>>      pthread_mutex_t lock;
>>>      pthread_cond_t cond;
>>>      int count;
>>> diff --git a/util/qemu-thread-posix.c b/util/qemu-thread-posix.c
>>> index 4489abf..fa8a3d8 100644
>>> --- a/util/qemu-thread-posix.c
>>> +++ b/util/qemu-thread-posix.c
>>> @@ -122,7 +122,7 @@ void qemu_sem_init(QemuSemaphore *sem, int init)
>>>  {
>>>      int rc;
>>>  
>>> -#if defined(__APPLE__) || defined(__NetBSD__)
>>> +#if defined(__APPLE__) || defined(__NetBSD__) || defined(__OpenBSD__)
>>>      rc = pthread_mutex_init(&sem->lock, NULL);
>>>      if (rc != 0) {
>>>          error_exit(rc, __func__);
>>> @@ -147,7 +147,7 @@ void qemu_sem_destroy(QemuSemaphore *sem)
>>>  {
>>>      int rc;
>>>  
>>> -#if defined(__APPLE__) || defined(__NetBSD__)
>>> +#if defined(__APPLE__) || defined(__NetBSD__) || defined(__OpenBSD__)
>>>      rc = pthread_cond_destroy(&sem->cond);
>>>      if (rc < 0) {
>>>          error_exit(rc, __func__);
>>> @@ -168,7 +168,7 @@ void qemu_sem_post(QemuSemaphore *sem)
>>>  {
>>>      int rc;
>>>  
>>> -#if defined(__APPLE__) || defined(__NetBSD__)
>>> +#if defined(__APPLE__) || defined(__NetBSD__) || defined(__OpenBSD__)
>>>      pthread_mutex_lock(&sem->lock);
>>>      if (sem->count == INT_MAX) {
>>>          rc = EINVAL;
>>> @@ -206,7 +206,7 @@ int qemu_sem_timedwait(QemuSemaphore *sem, int ms)
>>>      int rc;
>>>      struct timespec ts;
>>>  
>>> -#if defined(__APPLE__) || defined(__NetBSD__)
>>> +#if defined(__APPLE__) || defined(__NetBSD__) || defined(__OpenBSD__)
>>>      compute_abs_deadline(&ts, ms);
>>>      pthread_mutex_lock(&sem->lock);
>>>      --sem->count;
>>> @@ -249,7 +249,7 @@ int qemu_sem_timedwait(QemuSemaphore *sem, int ms)
>>>  
>>>  void qemu_sem_wait(QemuSemaphore *sem)
>>>  {
>>> -#if defined(__APPLE__) || defined(__NetBSD__)
>>> +#if defined(__APPLE__) || defined(__NetBSD__) || defined(__OpenBSD__)
>>>      pthread_mutex_lock(&sem->lock);
>>>      --sem->count;
>>>      while (sem->count < 0) {
>>>
>>
>> This was reverted recently.  Apparently your OpenBSD is too old compared
>> to what Brad wants to support...
> 
> This is 5.1 from 2012.

2012 does sound a bit too recent, but then maybe not considering OpenBSD
is only now getting a decent threading library.  I suggest this
approach: http://lwn.net/Articles/527216/

Paolo

Paolo
Blue Swirl - Jan. 19, 2013, 9:44 a.m.
On Fri, Jan 18, 2013 at 4:16 PM, Paolo Bonzini <pbonzini@redhat.com> wrote:
> Il 18/01/2013 17:07, Andreas Färber ha scritto:
>> Am 18.01.2013 17:05, schrieb Paolo Bonzini:
>>> Il 18/01/2013 16:58, Andreas Färber ha scritto:
>>>> Avoid an undefined reference to sem_timedwait.
>>>>
>>>> Signed-off-by: Andreas Färber <andreas.faerber@web.de>
>>>> ---
>>>>  include/qemu/thread-posix.h |    2 +-
>>>>  util/qemu-thread-posix.c    |   10 +++++-----
>>>>  2 Dateien geändert, 6 Zeilen hinzugefügt(+), 6 Zeilen entfernt(-)
>>>>
>>>> diff --git a/include/qemu/thread-posix.h b/include/qemu/thread-posix.h
>>>> index 0f30dcc..772d925 100644
>>>> --- a/include/qemu/thread-posix.h
>>>> +++ b/include/qemu/thread-posix.h
>>>> @@ -12,7 +12,7 @@ struct QemuCond {
>>>>  };
>>>>
>>>>  struct QemuSemaphore {
>>>> -#if defined(__APPLE__) || defined(__NetBSD__)
>>>> +#if defined(__APPLE__) || defined(__NetBSD__) || defined(__OpenBSD__)
>>>>      pthread_mutex_t lock;
>>>>      pthread_cond_t cond;
>>>>      int count;
>>>> diff --git a/util/qemu-thread-posix.c b/util/qemu-thread-posix.c
>>>> index 4489abf..fa8a3d8 100644
>>>> --- a/util/qemu-thread-posix.c
>>>> +++ b/util/qemu-thread-posix.c
>>>> @@ -122,7 +122,7 @@ void qemu_sem_init(QemuSemaphore *sem, int init)
>>>>  {
>>>>      int rc;
>>>>
>>>> -#if defined(__APPLE__) || defined(__NetBSD__)
>>>> +#if defined(__APPLE__) || defined(__NetBSD__) || defined(__OpenBSD__)
>>>>      rc = pthread_mutex_init(&sem->lock, NULL);
>>>>      if (rc != 0) {
>>>>          error_exit(rc, __func__);
>>>> @@ -147,7 +147,7 @@ void qemu_sem_destroy(QemuSemaphore *sem)
>>>>  {
>>>>      int rc;
>>>>
>>>> -#if defined(__APPLE__) || defined(__NetBSD__)
>>>> +#if defined(__APPLE__) || defined(__NetBSD__) || defined(__OpenBSD__)
>>>>      rc = pthread_cond_destroy(&sem->cond);
>>>>      if (rc < 0) {
>>>>          error_exit(rc, __func__);
>>>> @@ -168,7 +168,7 @@ void qemu_sem_post(QemuSemaphore *sem)
>>>>  {
>>>>      int rc;
>>>>
>>>> -#if defined(__APPLE__) || defined(__NetBSD__)
>>>> +#if defined(__APPLE__) || defined(__NetBSD__) || defined(__OpenBSD__)
>>>>      pthread_mutex_lock(&sem->lock);
>>>>      if (sem->count == INT_MAX) {
>>>>          rc = EINVAL;
>>>> @@ -206,7 +206,7 @@ int qemu_sem_timedwait(QemuSemaphore *sem, int ms)
>>>>      int rc;
>>>>      struct timespec ts;
>>>>
>>>> -#if defined(__APPLE__) || defined(__NetBSD__)
>>>> +#if defined(__APPLE__) || defined(__NetBSD__) || defined(__OpenBSD__)
>>>>      compute_abs_deadline(&ts, ms);
>>>>      pthread_mutex_lock(&sem->lock);
>>>>      --sem->count;
>>>> @@ -249,7 +249,7 @@ int qemu_sem_timedwait(QemuSemaphore *sem, int ms)
>>>>
>>>>  void qemu_sem_wait(QemuSemaphore *sem)
>>>>  {
>>>> -#if defined(__APPLE__) || defined(__NetBSD__)
>>>> +#if defined(__APPLE__) || defined(__NetBSD__) || defined(__OpenBSD__)
>>>>      pthread_mutex_lock(&sem->lock);
>>>>      --sem->count;
>>>>      while (sem->count < 0) {
>>>>
>>>
>>> This was reverted recently.  Apparently your OpenBSD is too old compared
>>> to what Brad wants to support...
>>
>> This is 5.1 from 2012.
>
> 2012 does sound a bit too recent, but then maybe not considering OpenBSD
> is only now getting a decent threading library.  I suggest this
> approach: http://lwn.net/Articles/527216/

Brad, please correct me if I'm wrong, but I don't think OpenBSD
supports the previous releases, only the last release (5.2 was
released in November, 2012), -stable and -current:
http://www.openbsd.org/stable.html
http://www.openbsd.org/errata52.html

This is a different approach to for example Ubuntu LTS, Debian stable or RHEL.

>
> Paolo
>
> Paolo
>
>
Peter Maydell - Jan. 19, 2013, 10:13 a.m.
On 18 January 2013 16:05, Paolo Bonzini <pbonzini@redhat.com> wrote:
> Il 18/01/2013 16:58, Andreas Färber ha scritto:
>> Avoid an undefined reference to sem_timedwait.

> This was reverted recently.  Apparently your OpenBSD is too old compared
> to what Brad wants to support...

I suggest getting rid of all the os ifdefs and writing a configure
check for sem_timedwait(). Then we use the fallback code on
exactly the systems where we need to and we don't have to
start wondering about which versions of which BSDs introduced
the feature.

-- PMM
Andreas Färber - Jan. 19, 2013, 6:07 p.m.
Am 19.01.2013 10:44, schrieb Blue Swirl:
> On Fri, Jan 18, 2013 at 4:16 PM, Paolo Bonzini <pbonzini@redhat.com> wrote:
>> Il 18/01/2013 17:07, Andreas Färber ha scritto:
>>> Am 18.01.2013 17:05, schrieb Paolo Bonzini:
>>>> Il 18/01/2013 16:58, Andreas Färber ha scritto:
>>>>> Avoid an undefined reference to sem_timedwait.
>>>>>
>>>>> Signed-off-by: Andreas Färber <andreas.faerber@web.de>
>>>>> ---
>>>>>  include/qemu/thread-posix.h |    2 +-
>>>>>  util/qemu-thread-posix.c    |   10 +++++-----
>>>>>  2 Dateien geändert, 6 Zeilen hinzugefügt(+), 6 Zeilen entfernt(-)
>>>>>
>>>>> diff --git a/include/qemu/thread-posix.h b/include/qemu/thread-posix.h
>>>>> index 0f30dcc..772d925 100644
>>>>> --- a/include/qemu/thread-posix.h
>>>>> +++ b/include/qemu/thread-posix.h
>>>>> @@ -12,7 +12,7 @@ struct QemuCond {
>>>>>  };
>>>>>
>>>>>  struct QemuSemaphore {
>>>>> -#if defined(__APPLE__) || defined(__NetBSD__)
>>>>> +#if defined(__APPLE__) || defined(__NetBSD__) || defined(__OpenBSD__)
>>>>>      pthread_mutex_t lock;
>>>>>      pthread_cond_t cond;
>>>>>      int count;
[...]
>>>> This was reverted recently.  Apparently your OpenBSD is too old compared
>>>> to what Brad wants to support...
>>>
>>> This is 5.1 from 2012.
>>
>> 2012 does sound a bit too recent, but then maybe not considering OpenBSD
>> is only now getting a decent threading library.  I suggest this
>> approach: http://lwn.net/Articles/527216/
> 
> Brad, please correct me if I'm wrong, but I don't think OpenBSD
> supports the previous releases, only the last release (5.2 was
> released in November, 2012), -stable and -current:
> http://www.openbsd.org/stable.html
> http://www.openbsd.org/errata52.html

Forgot to reply: I upgraded to 5.2 yesterday and that did fix this issue
for me! Please drop this patch. I just need *some* working BSD system to
test bsd-user with my upcoming CPU changes.

Andreas

> 
> This is a different approach to for example Ubuntu LTS, Debian stable or RHEL.
> 
>>
>> Paolo
>>
>> Paolo
>>
>>

Patch

diff --git a/include/qemu/thread-posix.h b/include/qemu/thread-posix.h
index 0f30dcc..772d925 100644
--- a/include/qemu/thread-posix.h
+++ b/include/qemu/thread-posix.h
@@ -12,7 +12,7 @@  struct QemuCond {
 };
 
 struct QemuSemaphore {
-#if defined(__APPLE__) || defined(__NetBSD__)
+#if defined(__APPLE__) || defined(__NetBSD__) || defined(__OpenBSD__)
     pthread_mutex_t lock;
     pthread_cond_t cond;
     int count;
diff --git a/util/qemu-thread-posix.c b/util/qemu-thread-posix.c
index 4489abf..fa8a3d8 100644
--- a/util/qemu-thread-posix.c
+++ b/util/qemu-thread-posix.c
@@ -122,7 +122,7 @@  void qemu_sem_init(QemuSemaphore *sem, int init)
 {
     int rc;
 
-#if defined(__APPLE__) || defined(__NetBSD__)
+#if defined(__APPLE__) || defined(__NetBSD__) || defined(__OpenBSD__)
     rc = pthread_mutex_init(&sem->lock, NULL);
     if (rc != 0) {
         error_exit(rc, __func__);
@@ -147,7 +147,7 @@  void qemu_sem_destroy(QemuSemaphore *sem)
 {
     int rc;
 
-#if defined(__APPLE__) || defined(__NetBSD__)
+#if defined(__APPLE__) || defined(__NetBSD__) || defined(__OpenBSD__)
     rc = pthread_cond_destroy(&sem->cond);
     if (rc < 0) {
         error_exit(rc, __func__);
@@ -168,7 +168,7 @@  void qemu_sem_post(QemuSemaphore *sem)
 {
     int rc;
 
-#if defined(__APPLE__) || defined(__NetBSD__)
+#if defined(__APPLE__) || defined(__NetBSD__) || defined(__OpenBSD__)
     pthread_mutex_lock(&sem->lock);
     if (sem->count == INT_MAX) {
         rc = EINVAL;
@@ -206,7 +206,7 @@  int qemu_sem_timedwait(QemuSemaphore *sem, int ms)
     int rc;
     struct timespec ts;
 
-#if defined(__APPLE__) || defined(__NetBSD__)
+#if defined(__APPLE__) || defined(__NetBSD__) || defined(__OpenBSD__)
     compute_abs_deadline(&ts, ms);
     pthread_mutex_lock(&sem->lock);
     --sem->count;
@@ -249,7 +249,7 @@  int qemu_sem_timedwait(QemuSemaphore *sem, int ms)
 
 void qemu_sem_wait(QemuSemaphore *sem)
 {
-#if defined(__APPLE__) || defined(__NetBSD__)
+#if defined(__APPLE__) || defined(__NetBSD__) || defined(__OpenBSD__)
     pthread_mutex_lock(&sem->lock);
     --sem->count;
     while (sem->count < 0) {