Module Name: src Committed By: riastradh Date: Sun Dec 19 01:20:30 UTC 2021
Modified Files: src/sys/external/bsd/drm2/include/linux: reservation.h src/sys/external/bsd/drm2/linux: linux_reservation.c Log Message: reservation_object_lock/lock_interruptible/trylock/unlock To generate a diff of this commit: cvs rdiff -u -r1.10 -r1.11 \ src/sys/external/bsd/drm2/include/linux/reservation.h cvs rdiff -u -r1.16 -r1.17 \ src/sys/external/bsd/drm2/linux/linux_reservation.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/external/bsd/drm2/include/linux/reservation.h diff -u src/sys/external/bsd/drm2/include/linux/reservation.h:1.10 src/sys/external/bsd/drm2/include/linux/reservation.h:1.11 --- src/sys/external/bsd/drm2/include/linux/reservation.h:1.10 Sun Dec 19 01:20:22 2021 +++ src/sys/external/bsd/drm2/include/linux/reservation.h Sun Dec 19 01:20:30 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: reservation.h,v 1.10 2021/12/19 01:20:22 riastradh Exp $ */ +/* $NetBSD: reservation.h,v 1.11 2021/12/19 01:20:30 riastradh Exp $ */ /*- * Copyright (c) 2018 The NetBSD Foundation, Inc. @@ -71,9 +71,13 @@ struct reservation_poll { #define reservation_object_held linux_reservation_object_held #define reservation_object_init linux_reservation_object_init #define reservation_object_kqfilter linux_reservation_object_kqfilter +#define reservation_object_lock linux_reservation_object_lock +#define reservation_object_lock_interruptible linux_reservation_object_lock_interruptible #define reservation_object_poll linux_reservation_object_poll #define reservation_object_reserve_shared linux_reservation_object_reserve_shared #define reservation_object_test_signaled_rcu linux_reservation_object_test_signaled_rcu +#define reservation_object_trylock linux_reservation_object_trylock +#define reservation_object_unlock linux_reservation_object_unlock #define reservation_object_wait_timeout_rcu linux_reservation_object_wait_timeout_rcu #define reservation_poll_fini linux_reservation_poll_fini #define reservation_poll_init linux_reservation_poll_init @@ -83,6 +87,12 @@ extern struct ww_class reservation_ww_cl void reservation_object_init(struct reservation_object *); void reservation_object_fini(struct reservation_object *); +int reservation_object_lock(struct reservation_object *, + struct ww_acquire_ctx *); +int reservation_object_lock_interruptible(struct reservation_object *, + struct ww_acquire_ctx *); +bool reservation_object_trylock(struct reservation_object *) __must_check; +void reservation_object_unlock(struct reservation_object *); bool reservation_object_held(struct reservation_object *); struct dma_fence * reservation_object_get_excl(struct reservation_object *); Index: src/sys/external/bsd/drm2/linux/linux_reservation.c diff -u src/sys/external/bsd/drm2/linux/linux_reservation.c:1.16 src/sys/external/bsd/drm2/linux/linux_reservation.c:1.17 --- src/sys/external/bsd/drm2/linux/linux_reservation.c:1.16 Sun Dec 19 01:20:22 2021 +++ src/sys/external/bsd/drm2/linux/linux_reservation.c Sun Dec 19 01:20:30 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: linux_reservation.c,v 1.16 2021/12/19 01:20:22 riastradh Exp $ */ +/* $NetBSD: linux_reservation.c,v 1.17 2021/12/19 01:20:30 riastradh Exp $ */ /*- * Copyright (c) 2018 The NetBSD Foundation, Inc. @@ -30,7 +30,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: linux_reservation.c,v 1.16 2021/12/19 01:20:22 riastradh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: linux_reservation.c,v 1.17 2021/12/19 01:20:30 riastradh Exp $"); #include <sys/param.h> #include <sys/poll.h> @@ -120,7 +120,64 @@ reservation_object_fini(struct reservati } /* - * reservation_object_held(roj) + * reservation_object_lock(robj, ctx) + * + * Acquire a reservation object's lock. Return 0 on success, + * -EALREADY if caller already holds it, -EDEADLK if a + * higher-priority owner holds it and the caller must back out and + * retry. + */ +int +reservation_object_lock(struct reservation_object *robj, + struct ww_acquire_ctx *ctx) +{ + + return ww_mutex_lock(&robj->lock, ctx); +} + +/* + * reservation_object_lock_interruptible(robj, ctx) + * + * Acquire a reservation object's lock. Return 0 on success, + * -EALREADY if caller already holds it, -EDEADLK if a + * higher-priority owner holds it and the caller must back out and + * retry, -ERESTART/-EINTR if interrupted. + */ +int +reservation_object_lock_interruptible(struct reservation_object *robj, + struct ww_acquire_ctx *ctx) +{ + + return ww_mutex_lock_interruptible(&robj->lock, ctx); +} + +/* + * reservation_object_trylock(robj) + * + * Try to acquire a reservation object's lock without blocking. + * Return true on success, false on failure. + */ +bool +reservation_object_trylock(struct reservation_object *robj) +{ + + return ww_mutex_trylock(&robj->lock); +} + +/* + * reservation_object_unlock(robj) + * + * Release a reservation object's lock. + */ +void +reservation_object_unlock(struct reservation_object *robj) +{ + + return ww_mutex_unlock(&robj->lock); +} + +/* + * reservation_object_held(robj) * * True if robj is locked. */