#ifndef _ASM_IA64_UACCESS_H #define _ASM_IA64_UACCESS_H /* * This file defines various macros to transfer memory areas across * the user/kernel boundary. This needs to be done carefully because * this code is executed in kernel mode and uses user-specified * addresses. Thus, we need to be careful not to let the user to * trick us into accessing kernel memory that would normally be * inaccessible. This code is also fairly performance sensitive, * so we want to spend as little time doing safety checks as * possible. * * To make matters a bit more interesting, these macros sometimes also * called from within the kernel itself, in which case the address * validity check must be skipped. The get_fs() macro tells us what * to do: if get_fs()==USER_DS, checking is performed, if * get_fs()==KERNEL_DS, checking is bypassed. * * Note that even if the memory area specified by the user is in a * valid address range, it is still possible that we'll get a page * fault while accessing it. This is handled by filling out an * exception handler fixup entry for each instruction that has the * potential to fault. When such a fault occurs, the page fault * handler checks to see whether the faulting instruction has a fixup * associated and, if so, sets r8 to -EFAULT and clears r9 to 0 and * then resumes execution at the continuation point. * * Based on . * * Copyright (C) 1998, 1999, 2001-2004 Hewlett-Packard Co * David Mosberger-Tang */ #include #include #include #include #include #include #include #include /* * For historical reasons, the following macros are grossly misnamed: */