]> git.baikalelectronics.ru Git - kernel.git/commit
arch/tile: extend syscall ABI to set r1 on return as well.
authorChris Metcalf <cmetcalf@tilera.com>
Fri, 13 Aug 2010 20:37:00 +0000 (16:37 -0400)
committerChris Metcalf <cmetcalf@tilera.com>
Fri, 13 Aug 2010 20:37:00 +0000 (16:37 -0400)
commit952de33b09663e31bb6ed5d41ac1349db1b7e140
tree9f74c7d7933d969484859365f055b5a77cfc4fd1
parentcc4a50b18c49b61b9a8c910eba51d03afd7db7cc
arch/tile: extend syscall ABI to set r1 on return as well.

Until now, the tile architecture ABI for syscall return has just been
that r0 holds the return value, and an error is only signalled like it is
for kernel code, with a negative small number.

However, this means that in multiple places in userspace we end up writing
the same three-cycle idiom that tests for a small negative number for
error.  It seems cleaner to instead move that code into the kernel, and
set r1 to hold zero on success or errno on failure; previously, r1 was
just zeroed on return from the kernel (to avoid leaking kernel state).
This way a single conditional branch after the syscall is sufficient
to test for the failure case.  The number of cycles taken is the same,
but the error-checking code is in just one place, so total code size is
smaller, and random userspace syscall code is easier to understand.

Signed-off-by: Chris Metcalf <cmetcalf@tilera.com>
arch/tile/kernel/intvec_32.S