RE: [Fault-injection-developer] [PATCH] fi_pf patch against 2.5.4 5 kernel
Status: Alpha
Brought to you by:
rustyl
From: Lynch, R. <rus...@in...> - 2002-11-14 05:44:07
|
Actually, I like the idea of following lkml practices to get the fault injection code ready for submission. That helps shed some light on what we need to do for our kernel code. We should really start working directly on the latest development kernel (currently 2.5.47), with the code available as patch files on the sourceforge site. Please submit the kernel side fault injection code as a patch to 2.5.47 as if we were submitting to LKML. That means follow patching and coding guidelines documented in linux/Documentation/SubmittingPatches,SubmittingDrivers -rusty -----Original Message----- From: Zhuang, Louis [mailto:lou...@in...] Sent: Wednesday, November 13, 2002 9:05 PM To: Gao, Kevin; Wang, Frank; Wang, Stanley; Zhuang, Louis Cc: 'fau...@li...' Subject: [Fault-injection-developer] [PATCH] fi_pf patch against 2.5.45 kernel Any comments? Index: src/fi_intcpt/fi_pf/Makefile.am =================================================================== RCS file: /cvsroot/fault-injection/fith_core/src/fi_intcpt/fi_pf/Makefile.am,v retrieving revision 1.1.1.1 diff -u -r1.1.1.1 Makefile.am --- src/fi_intcpt/fi_pf/Makefile.am 12 Nov 2002 05:56:32 -0000 1.1. 1.1 +++ src/fi_intcpt/fi_pf/Makefile.am 14 Nov 2002 04:21:15 -0000 @@ -5,7 +5,7 @@ include $(top_srcdir)/rules.mk -INCLUDES = -I$(top_srcdir)/src/include -I$(top_srcdir)/include -I$(KERNEL)/include +INCLUDES = -I$(top_srcdir)/src/include -I$(top_srcdir)/include -I$(KERNEL)/include -I$(KERNEL)/arch/i386/mach-generic if DEBUG DEBUG= -DFI_DEBUG else @@ -16,7 +16,7 @@ -mpreferred-stack-boundary=2 -march=i686 -DMODULE -DMODVERSIONS \ -c -include $(KERNEL)/include/linux/modversions.h \ $(INCLUDE) $(DEBUG) -fi_pf_o_SOURCES = pf.c pf_hooks.c pf_interface.c pf_region.c pf_in.c +fi_pf_o_SOURCES = pf.c pf_interface.c pf_region.c pf_in.c fi_pf.o$(EXEEXT): $(fi_pf_o_OBJECTS) $(LD) -r -o $@ $^ Index: src/fi_intcpt/fi_pf/fi_pf.h =================================================================== RCS file: /cvsroot/fault-injection/fith_core/src/fi_intcpt/fi_pf/fi_pf.h,v retrieving revision 1.1.1.1 diff -u -r1.1.1.1 fi_pf.h --- src/fi_intcpt/fi_pf/fi_pf.h 12 Nov 2002 05:56:32 -0000 1.1.1.1 +++ src/fi_intcpt/fi_pf/fi_pf.h 14 Nov 2002 04:21:15 -0000 @@ -41,17 +41,6 @@ }; /* - * Declare functions in pf_hooks.h - */ -int initialize_pf_hooks(void); -int terminate_pf_hooks(void); -int register_pf_hooks(void); -int deregister_pf_hooks(void); -int arm_pf_hooks(void); -int disarm_pf_hooks(void); - - -/* * Declare functions in pf_interface.c */ void register_pf_interface(void); @@ -85,8 +74,6 @@ /* * Declare functions in pf.c */ -int pf_do_debug(struct pt_regs * regs, unsigned long condition); -int pf_do_page_fault(struct pt_regs * regs); int pf_register(struct watchpoint wp, int id, struct iInterceptHook *hook, char *modname); int pf_unregister(int id, char *modname); int pf_corrupt(int id, __u32 dirty, void *data); Index: src/fi_intcpt/fi_pf/pf.c =================================================================== RCS file: /cvsroot/fault-injection/fith_core/src/fi_intcpt/fi_pf/pf.c,v retrieving revision 1.1.1.1 diff -u -r1.1.1.1 pf.c --- src/fi_intcpt/fi_pf/pf.c 12 Nov 2002 05:56:31 -0000 1.1.1.1 +++ src/fi_intcpt/fi_pf/pf.c 14 Nov 2002 04:21:15 -0000 @@ -50,8 +50,9 @@ #include <linux/slab.h> #include <asm/pgalloc.h> #include <asm/io.h> +#include <asm/tlbflush.h> -#include <linux/dprobes.h> +#include <asm/fi.h> #define PREFIX_NAME "FI_PF" #include <linux/fi/fi.h> @@ -237,19 +238,12 @@ static unsigned long crpt_mask[] = { 0x000000FF, 0x0000FFFF, 0x00FFFFFF, 0xFFFFFFFF}; -int pf_do_page_fault(struct pt_regs * regs) { - unsigned long address; +int pf_do_page_fault(struct pt_regs * regs, unsigned long address) { unsigned long cpu = smp_processor_id(); struct fi_corrupt crpt; int i; int ins_len, crpt_len; - /* - * gets the address, does not need to disallow irq, because our hook - * is before do_page_fault allows irq - */ - __asm__("movl %%cr2,%0":"=r" (address)); - pf_lock_region(); //lock it! if (pf_find_region(address)<0) { if (pf_is_removed_regions(address)) { @@ -335,7 +329,7 @@ out: /* set TF */ - regs->eflags |= EF_TF; + regs->eflags |= X86_EFLAGS_TF; /* clean page fault and tlb ONLY on this cpu */ pf_set_pte_bits(pf_reason[cpu].addr, _PAGE_PRESENT); @@ -350,7 +344,7 @@ return 0; }; -int pf_do_debug(struct pt_regs * regs, unsigned long condition) { +int pf_do_debug(unsigned long condition, struct pt_regs * regs) { unsigned long cpu = smp_processor_id(); struct fi_corrupt crpt; int ins_len, crpt_len; @@ -412,7 +406,7 @@ exit: /* clear TF */ - regs->eflags &= ~EF_TF; + regs->eflags &= ~X86_EFLAGS_TF; /* clean page fault and tlb ONLY on this cpu */ pf_clr_pte_bits(pf_reason[cpu].addr, _PAGE_PRESENT); @@ -431,40 +425,25 @@ * Initialize/Uninitialize modules */ static int __init fi_pf_init(void) { - int rv=0; - - if ((rv = initialize_pf_hooks())) { - goto err1; - } - if ((rv = register_pf_hooks())) { - goto err2; - } - if ((rv = arm_pf_hooks())) { - goto err3; - } + int rv=0; - register_pf_interface(); - - PINFO("FI Pagefault interceptor v%d.%d.%d loaded.\n", PF_MAJOR, PF_MINOR, PF_PATCH); - EXPORT_NO_SYMBOLS; - return 0; - -err3: - deregister_pf_hooks(); -err2: - terminate_pf_hooks(); -err1: - return rv; + register_pf_interface(); + fi_post_page_fault=pf_do_debug; + fi_page_fault=pf_do_page_fault; + + PINFO("FI Pagefault interceptor v%d.%d.%d loaded.\n", PF_MAJOR, PF_MINOR, PF_PATCH); + EXPORT_NO_SYMBOLS; + return 0; }; static void __exit fi_pf_cleanup(void) { - unregister_pf_interface(); - disarm_pf_hooks(); - deregister_pf_hooks(); - terminate_pf_hooks(); + fi_page_fault=NULL; + fi_post_page_fault=NULL; + unregister_pf_interface(); }; module_init(fi_pf_init); module_exit(fi_pf_cleanup); MODULE_AUTHOR("Louis Zhuang"); MODULE_DESCRIPTION("Pagefault interceptor component for FI"); +MODULE_LICENSE("GPL"); Index: src/fi_intcpt/fi_pf/pf_region.c =================================================================== RCS file: /cvsroot/fault-injection/fith_core/src/fi_intcpt/fi_pf/pf_region.c,v retrieving revision 1.1.1.1 diff -u -r1.1.1.1 pf_region.c --- src/fi_intcpt/fi_pf/pf_region.c 12 Nov 2002 05:56:32 -0000 1.1. 1.1 +++ src/fi_intcpt/fi_pf/pf_region.c 14 Nov 2002 04:21:15 -0000 @@ -84,16 +84,12 @@ } }; -static pte_t *get_pte(unsigned long addr) { - pgd_t *pgd; - pmd_t *pmd; - pte_t *pte; - - /* we need to change page table */ - pgd = pgd_offset_k( addr ); - pmd = pmd_offset(pgd, addr ); - pte = pte_offset(pmd, addr ); - return pte; +static pte_t *get_pte(unsigned long address) { + pgd_t *pgd = pgd_offset_k(address); + pmd_t *pmd = pmd_offset(pgd, address); + if (pmd_large(*pmd)) + return (pte_t *)pmd; + return pte_offset_kernel(pmd, address); }; /** ------------------------------------------------------- This sf.net email is sponsored by: Are you worried about your web server security? Click here for a FREE Thawte Apache SSL Guide and answer your Apache SSL security needs: http://www.gothawte.com/rd523.html _______________________________________________ Fault-injection-developer mailing list Fau...@li... https://lists.sourceforge.net/lists/listinfo/fault-injection-developer |