[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Minios-devel] [UNIKRAFT PATCH] lib/ukmpi: Provide blocking uk_mbox_recv()
Hi Simon, This patch looks good. Reviewed-by: Costin Lupu <costin.lupu@xxxxxxxxx> On 5/8/19 1:27 AM, Simon Kuenzer wrote: > Commit a48d634 ("lib/uklock: Use timeout equal to 0 for trying down a > semaphore") implicitly changed the behavior of `uk_mbox_recv_to()`. When > passing timeout `0`, the function is not blocking until a message > arrives but trying to receive a message and returning immediately. > > This patch introduces `uk_mbox_recv()` which brings back this blocking > behavior. I chose introducing this new function in order to keep the > mailbox API inline with the semaphore ones. > > Signed-off-by: Simon Kuenzer <simon.kuenzer@xxxxxxxxx> > --- > lib/ukmpi/exportsyms.uk | 1 + > lib/ukmpi/include/uk/mbox.h | 1 + > lib/ukmpi/mbox.c | 17 +++++++++++++++++ > 3 files changed, 19 insertions(+) > > diff --git a/lib/ukmpi/exportsyms.uk b/lib/ukmpi/exportsyms.uk > index 4c4c8874..b0d661a0 100644 > --- a/lib/ukmpi/exportsyms.uk > +++ b/lib/ukmpi/exportsyms.uk > @@ -3,5 +3,6 @@ uk_mbox_free > uk_mbox_post > uk_mbox_post_try > uk_mbox_post_to > +uk_mbox_recv > uk_mbox_recv_try > uk_mbox_recv_to > diff --git a/lib/ukmpi/include/uk/mbox.h b/lib/ukmpi/include/uk/mbox.h > index d2c48e53..19b1ecc0 100644 > --- a/lib/ukmpi/include/uk/mbox.h > +++ b/lib/ukmpi/include/uk/mbox.h > @@ -56,6 +56,7 @@ void uk_mbox_post(struct uk_mbox *m, void *msg); > int uk_mbox_post_try(struct uk_mbox *m, void *msg); > __nsec uk_mbox_post_to(struct uk_mbox *m, void *msg, __nsec timeout); > > +void uk_mbox_recv(struct uk_mbox *m, void **msg); > int uk_mbox_recv_try(struct uk_mbox *m, void **msg); > __nsec uk_mbox_recv_to(struct uk_mbox *m, void **msg, __nsec timeout); > > diff --git a/lib/ukmpi/mbox.c b/lib/ukmpi/mbox.c > index 3a0354dd..149a667d 100644 > --- a/lib/ukmpi/mbox.c > +++ b/lib/ukmpi/mbox.c > @@ -127,6 +127,23 @@ static inline void *_do_mbox_recv(struct uk_mbox *m) > return ret; > } > > +/* Blocks the thread until a message arrives in the mailbox. > + * The `*msg` argument will point to the received message. > + * If the `msg` parameter was set to NULL, the received message is dropped. > + */ > +void uk_mbox_recv(struct uk_mbox *m, void **msg) > +{ > + void *rmsg; > + > + UK_ASSERT(m); > + > + uk_semaphore_down(&m->readsem); > + rmsg = _do_mbox_recv(m); > + if (msg) > + *msg = rmsg; > +} > + > + > /* This is similar to uk_mbox_fetch, however if a message is not > * present in the mailbox, it immediately returns with the code > * SYS_MBOX_EMPTY. On success 0 is returned. > _______________________________________________ Minios-devel mailing list Minios-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/minios-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |