>> +static inline __attribute__((always_inline)) >> +bool rseq_finish(struct rseq_lock *rlock, >> + intptr_t *p, intptr_t to_write, >> + struct rseq_state start_value) >> This ABI looks like it will work fine for our use case. I don't think it >> has been mentioned yet, but we may still need multiple asm blocks >> for differing numbers of writes. For example, an array-based freelist push: >> void push(void *obj) { >> if (index < maxlen) { >> freelist[index++] = obj; >> } >> } >> would be more efficiently implemented with a two-write rseq_finish: >> rseq_finish2(&freelist[index], obj, // first write >> &index, index + 1, // second write >> ...); > Would pairing one rseq_start with two rseq_finish do the trick > there ? Yes, two rseq_finish works, as long as the extra rseq management overhead is not substantial. -- To unsubscribe from this list: send the line "unsubscribe linux-api" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html