On Tue, Feb 26, 2019 at 01:59:42PM +0100, Rhialto wrote: > On Mon 25 Feb 2019 at 18:10:20 +0000, Eduardo Horvath wrote: > > I'd do something like: > > > > uint64_t ufetch_64(const uint64_t *uaddr, int *errp); > > > > where *errp needs to be initialized to zero and is set on fault so you can > > do: > > > > int err = 0; > > long hisflags = ufetch_64(flag1p, &err) | ufetch_64(flag2p, &err); > > > > if (err) return EFAULT; > > > > do_something(hisflags); > > I like this, because it swaps the cost of the value that is always > needed (which was expensive) versus the one that isn't expected often > (the error case, was cheap).
Huh? The code always has to access err to work correctly. You don't save anything. Joerg