On Thu, Sep 13, 2018 at 7:03 AM Kevin Easton <kevin@xxxxxxxxxxx> wrote: > Yes. It's also how most get/put APIs already work in the kernel, eg > kref_get/put (mostly because they tend to be 'getting/putting' an > already-initialized object, though). Right; in this case the object wouldn't be initialized yet, which might defeat the purpose, since one advantage of the & way you mentioned is _put modifies the context. Andy - any opinions on this? The tl;dr is: 1) what we have now: simd_context_t simd_context = simd_get(); for (item in items) { do_something(item); simd_context = simd_relax(simd_context); } simd_put(); 2) what kevin is proposing: simd_context_t simd_context; simd_get(&simd_context); for (item in items) { do_something(item); simd_relax(&simd_context); } simd_put(&simd_context); I can see pros and cons of each approach.