mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-12-28 11:18:45 +07:00
ece74f63b1
This file was only including module.h for exception table related functions. We've now separated that content out into its own file "extable.h" so now move over to that and avoid all the extra header content in module.h that we don't really need to compile this file. Reported-by: kbuild test robot <lkp@intel.com> Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
50 lines
1.5 KiB
C
50 lines
1.5 KiB
C
/*
|
|
* linux/arch/frv/mm/extable.c
|
|
*/
|
|
|
|
#include <linux/extable.h>
|
|
#include <linux/spinlock.h>
|
|
#include <linux/uaccess.h>
|
|
|
|
extern const void __memset_end, __memset_user_error_lr, __memset_user_error_handler;
|
|
extern const void __memcpy_end, __memcpy_user_error_lr, __memcpy_user_error_handler;
|
|
extern spinlock_t modlist_lock;
|
|
|
|
|
|
/*****************************************************************************/
|
|
/*
|
|
* see if there's a fixup handler available to deal with a kernel fault
|
|
*/
|
|
unsigned long search_exception_table(unsigned long pc)
|
|
{
|
|
const struct exception_table_entry *extab;
|
|
|
|
/* determine if the fault lay during a memcpy_user or a memset_user */
|
|
if (__frame->lr == (unsigned long) &__memset_user_error_lr &&
|
|
(unsigned long) &memset <= pc && pc < (unsigned long) &__memset_end
|
|
) {
|
|
/* the fault occurred in a protected memset
|
|
* - we search for the return address (in LR) instead of the program counter
|
|
* - it was probably during a clear_user()
|
|
*/
|
|
return (unsigned long) &__memset_user_error_handler;
|
|
}
|
|
|
|
if (__frame->lr == (unsigned long) &__memcpy_user_error_lr &&
|
|
(unsigned long) &memcpy <= pc && pc < (unsigned long) &__memcpy_end
|
|
) {
|
|
/* the fault occurred in a protected memset
|
|
* - we search for the return address (in LR) instead of the program counter
|
|
* - it was probably during a copy_to/from_user()
|
|
*/
|
|
return (unsigned long) &__memcpy_user_error_handler;
|
|
}
|
|
|
|
extab = search_exception_tables(pc);
|
|
if (extab)
|
|
return extab->fixup;
|
|
|
|
return 0;
|
|
|
|
} /* end search_exception_table() */
|