[Intel-gfx] [PATCH 12/37] drm/i915: Add fetch_and_zero() macro
Chris Wilson
chris at chris-wilson.co.uk
Fri Aug 12 06:54:02 UTC 2016
A simple little macro to clear a pointer and return the old value. This
is useful for writing
value = *ptr;
if (!value)
return;
*ptr = 0;
...
free(value);
in a slightly more concise form:
value = fetch_and_zero(ptr);
if (!value)
return;
...
free(value);
with the idea that this establishes a pattern that may be extended for
atomic use (using xchg or cmpxchg) i.e. atomic_fetch_and_zero() and
similar to llist.
Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
Cc: Joonas Lahtinen <joonas.lahtinen at linux.intel.com>
Cc: Daniel Vetter <daniel.vetter at ffwll.ch>
---
drivers/gpu/drm/i915/i915_drv.h | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
index a4203ff0cf7f..731c67fc9796 100644
--- a/drivers/gpu/drm/i915/i915_drv.h
+++ b/drivers/gpu/drm/i915/i915_drv.h
@@ -3903,4 +3903,10 @@ static inline bool __i915_request_irq_complete(struct drm_i915_gem_request *req)
return false;
}
+#define fetch_and_zero(ptr) ({ \
+ typeof(*ptr) T__ = *(ptr); \
+ *(ptr) = (typeof(*ptr))0; \
+ T__; \
+})
+
#endif
--
2.8.1
More information about the Intel-gfx
mailing list