Re: [PATCH] MIPS Fixups for LTTng (Update)

Mathieu Desnoyers <[email protected]>
Newsgroups gmane.linux.kernel.tracing
Message-ID <20061013130512.GA28232@Krystal>
Hi Manish, see annotations below,

* Manish Lachwani ([email protected]) wrote:
> Hi Mathieu,
> 
> I looked at the i386 stuff and made the necessary changes for MIPS (32-bit). Let me know your thoughts on this attached patch. 
> 
> Thanks,
> Manish Lachwani

> Source: MontaVista Software, Inc.
> Type: Defect Fix 
> Signed-off-by: Manish Lachwani <[email protected]>
> Description:
> 
> MIPS Fixups for LTTng:
> 
>  arch/mips/kernel/process.c     |    4 ----
>  arch/mips/kernel/scall32-o32.S |    9 ---------
>  arch/mips/kernel/traps.c       |   13 ++++++-------
>  arch/mips/mm/fault.c           |   12 ++++++------
>  4 files changed, 12 insertions(+), 26 deletions(-)
> 
> 
> Index: linux-2.6.18/arch/mips/kernel/process.c
> ===================================================================
> --- linux-2.6.18.orig/arch/mips/kernel/process.c
> +++ linux-2.6.18/arch/mips/kernel/process.c
> @@ -276,10 +276,6 @@ long kernel_thread(int (*fn)(void *), vo
>  	pid = do_fork(flags | CLONE_VM | CLONE_UNTRACED,
>  			0, &regs, 0, NULL, NULL);
>  	MARK(kernel_thread_create, "%ld %p", pid, fn);
> -#ifdef CONFIG_LTT
> -	if(pid >= 0)
> -		trace_process_kernel_thread(pid, fn);
> -#endif //CONFIG_LTT
>  	return pid;
>  }
>  

Missing MARKer for thread creation.

> Index: linux-2.6.18/arch/mips/kernel/traps.c
> ===================================================================
> --- linux-2.6.18.orig/arch/mips/kernel/traps.c
> +++ linux-2.6.18/arch/mips/kernel/traps.c
> @@ -591,7 +591,7 @@ asmlinkage void do_fpe(struct pt_regs *r
>  {
>  	die_if_kernel("FP exception in kernel code", regs);
>  
> -	trace_kernel_trap_entry(CAUSE_EXCCODE(regs->cp0_cause), (void*)regs->cp0_epc);
> +	MARK(kernel_trap_entry, "%d struct pt_regs %p", CAUSE_EXCCODE(regs->cp0_cause), regs);
>  	if (fcr31 & FPU_CSR_UNI_X) {
>  		int sig;
>  
> @@ -748,20 +748,19 @@ asmlinkage void do_cpu(struct pt_regs *r
>  
>  	die_if_kernel("do_cpu invoked from kernel context!", regs);
>  
> -	trace_kernel_trap_entry(CAUSE_EXCCODE(regs->cp0_cause), (void*)regs->cp0_epc);
> -
> +	MARK(kernel_trap_entry, "%d struct pt_regs %p", CAUSE_EXCCODE(regs->cp0_cause), regs);
>  	cpid = (regs->cp0_cause >> CAUSEB_CE) & 3;
>  
>  	switch (cpid) {
>  	case 0:
>  		if (!cpu_has_llsc)
>  			if (!simulate_llsc(regs)) {
> -				trace_kernel_trap_exit();
> +				MARK(kernel_trap_exit, MARK_NOARGS);
>  				return;
>  			}
>  
>  		if (!simulate_rdhwr(regs)) {
> -			trace_kernel_trap_exit();
> +			MARK(kernel_trap_exit, MARK_NOARGS);
>  			return;
>  		}
>  
> @@ -818,7 +817,7 @@ asmlinkage void do_cpu(struct pt_regs *r
>  			}
>  #endif /* CONFIG_MIPS_MT_FPAFF */
>  		}
> -		trace_kernel_trap_exit();
> +		MARK(kernel_trap_exit, MARK_NOARGS);
>  		return;
>  
>  	case 2:
> @@ -828,7 +827,7 @@ asmlinkage void do_cpu(struct pt_regs *r
>  	}
>  
>  	force_sig(SIGILL, current);
> -	trace_kernel_trap_exit();
> +	MARK(kernel_trap_exit, MARK_NOARGS);
>  }
>  
>  asmlinkage void do_mdmx(struct pt_regs *regs)
> Index: linux-2.6.18/arch/mips/kernel/scall32-o32.S
> ===================================================================
> --- linux-2.6.18.orig/arch/mips/kernel/scall32-o32.S
> +++ linux-2.6.18/arch/mips/kernel/scall32-o32.S
> @@ -69,7 +69,6 @@ stack_done:
>  #ifdef CONFIG_LTT
>  	sw  t2, PT_R1(sp)
>  	move  a0, sp
> -	jal     trace_real_syscall_entry
>  	lw  t2, PT_R1(sp)
>  
>  	lw  a0, PT_R4(sp)		# Restore argument registers
> @@ -94,10 +93,6 @@ stack_done:
>  					# restarting
>  1:	sw	v0, PT_R2(sp)		# result
>  
> -#ifdef CONFIG_LTT
> -	jal trace_real_syscall_exit
> -#endif // CONFIG_LTT
> -
>  o32_syscall_exit:
>  	raw_local_irq_disable	# make sure need_resched and
>  					# signals dont change between
> @@ -139,10 +134,6 @@ syscall_trace_entry:
>  					# restarting
>  1:	sw	v0, PT_R2(sp)		# result
>  
> -#ifdef CONFIG_LTT
> - jal trace_real_syscall_exit
> -#endif //CONFIG_LTT)
> -
>  	j	syscall_exit
>  
>  /* ------------------------------------------------------------------------ */

For the following one, I changed the way page fauls are instrumented. Look
closely at the i386 implementation (I removed most of the markers from fault.c
to put an instrumentation in handle_mm_fault.

> Index: linux-2.6.18/arch/mips/mm/fault.c
> ===================================================================
> --- linux-2.6.18.orig/arch/mips/mm/fault.c
> +++ linux-2.6.18/arch/mips/mm/fault.c
> @@ -115,7 +115,7 @@ survive:
>  	}
>  
>  	up_read(&mm->mmap_sem);
> -	trace_kernel_trap_exit();
> +	MARK(kernel_trap_exit, MARK_NOARGS);
>  	return;
>  
>  /*
> @@ -144,7 +144,7 @@ bad_area_nosemaphore:
>  		/* info.si_code has been set above */
>  		info.si_addr = (void __user *) address;
>  		force_sig_info(SIGSEGV, &info, tsk);
> -		trace_kernel_trap_exit();
> +		MARK(kernel_trap_exit, MARK_NOARGS);
>  		return;
>  	}
>  
> @@ -210,7 +210,7 @@ do_sigbus:
>  	info.si_addr = (void __user *) address;
>  	force_sig_info(SIGBUS, &info, tsk);
>  
> -	trace_kernel_trap_exit();
> +	MARK(kernel_trap_exit, MARK_NOARGS);
>  	return;
>  vmalloc_fault:
>  	{
> @@ -248,9 +248,9 @@ vmalloc_fault:
>  		pte_k = pte_offset_kernel(pmd_k, address);
>  		if (!pte_present(*pte_k))
>  			goto no_context;
> -		trace_kernel_trap_entry(CAUSE_EXCCODE(regs->cp0_cause), (void*)regs->cp0_epc);
> -		trace_kernel_trap_exit();
> +		MARK(kernel_trap_entry, "%d struct pt_regs %p", CAUSE_EXCCODE(regs->cp0_cause), regs);
> +		MARK(kernel_trap_exit, MARK_NOARGS);
>  		return;
>  	}
> -	trace_kernel_trap_exit();
> +	MARK(kernel_trap_exit, MARK_NOARGS);
>  }

Mathieu

OpenPGP public key:              http://krystal.dyndns.org:8080/key/compudj.gpg
Key fingerprint:     8CD5 52C3 8E3C 4140 715F  BA06 3F25 A8FE 3BAE 9A68
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.