+Cris +Stanley Loop in DSP guys in case they would have something to add. > -----Original Message----- > From: Felipe Contreras [mailto:felipe.contreras@xxxxxxxxx] > Sent: Sunday, May 16, 2010 10:46 AM > To: linux-omap > Cc: Ramirez Luna, Omar; Guzman Lugo, Fernando; Felipe Contreras > Subject: [PATCH 08/14] dspbridge: deh: refactor in mmu_fault_print_stack() > > All this code is just to print the stack, so make it clearer. > > Signed-off-by: Felipe Contreras <felipe.contreras@xxxxxxxxx> > --- > drivers/dsp/bridge/core/ue_deh.c | 58 +++++++++++++++++++++------------ > ----- > 1 files changed, 32 insertions(+), 26 deletions(-) > > diff --git a/drivers/dsp/bridge/core/ue_deh.c > b/drivers/dsp/bridge/core/ue_deh.c > index f661aaf..1d1b87b 100644 > --- a/drivers/dsp/bridge/core/ue_deh.c > +++ b/drivers/dsp/bridge/core/ue_deh.c > @@ -189,9 +189,8 @@ static void wait_for_timer(void) > omap_dm_timer_disable(timer); > } > > -void bridge_deh_notify(struct deh_mgr *deh_mgr, u32 ulEventMask, u32 > dwErrInfo) > +static void mmu_fault_print_stack(struct bridge_dev_context *dev_context) > { > - struct bridge_dev_context *dev_context; > struct cfg_hostres *resources; > struct hw_mmu_map_attrs_t map_attrs = { > .endianism = HW_LITTLE_ENDIAN, > @@ -200,12 +199,41 @@ void bridge_deh_notify(struct deh_mgr *deh_mgr, u32 > ulEventMask, u32 dwErrInfo) > }; > void *dummy_va_addr; > > + resources = dev_context->resources; > + dummy_va_addr = (void*)__get_free_page(GFP_ATOMIC); > + > + /* > + * Before acking the MMU fault, let's make sure MMU can only > + * access entry #0. Then add a new entry so that the DSP OS > + * can continue in order to dump the stack. > + */ > + hw_mmu_twl_disable(resources->dw_dmmu_base); > + hw_mmu_tlb_flush_all(resources->dw_dmmu_base); > + > + hw_mmu_tlb_add(resources->dw_dmmu_base, > + virt_to_phys(dummy_va_addr), fault_addr, > + HW_PAGE_SIZE4KB, 1, > + &map_attrs, HW_SET, HW_SET); > + > + wait_for_timer(); > + /* Clear MMU interrupt */ > + hw_mmu_event_ack(resources->dw_dmmu_base, > + HW_MMU_TRANSLATION_FAULT); > + dump_dsp_stack(dev_context); > + > + hw_mmu_disable(resources->dw_dmmu_base); > + free_page((unsigned long)dummy_va_addr); > +} > + > +void bridge_deh_notify(struct deh_mgr *deh_mgr, u32 ulEventMask, u32 > dwErrInfo) > +{ > + struct bridge_dev_context *dev_context; > + > if (!deh_mgr) > return; > > dev_info(bridge, "%s: device exception\n", __func__); > dev_context = deh_mgr->hbridge_context; > - resources = dev_context->resources; > > switch (ulEventMask) { > case DSP_SYSERROR: > @@ -230,32 +258,10 @@ void bridge_deh_notify(struct deh_mgr *deh_mgr, u32 > ulEventMask, u32 dwErrInfo) > (unsigned int) deh_mgr->err_info.dw_val1, > (unsigned int) deh_mgr->err_info.dw_val2, > (unsigned int) fault_addr); > - dummy_va_addr = (void*)__get_free_page(GFP_ATOMIC); > > print_dsp_trace_buffer(dev_context); > dump_dl_modules(dev_context); > - > - /* > - * Before acking the MMU fault, let's make sure MMU can only > - * access entry #0. Then add a new entry so that the DSP OS > - * can continue in order to dump the stack. > - */ > - hw_mmu_twl_disable(resources->dw_dmmu_base); > - hw_mmu_tlb_flush_all(resources->dw_dmmu_base); > - > - hw_mmu_tlb_add(resources->dw_dmmu_base, > - virt_to_phys(dummy_va_addr), fault_addr, > - HW_PAGE_SIZE4KB, 1, > - &map_attrs, HW_SET, HW_SET); > - > - wait_for_timer(); > - /* Clear MMU interrupt */ > - hw_mmu_event_ack(resources->dw_dmmu_base, > - HW_MMU_TRANSLATION_FAULT); > - dump_dsp_stack(dev_context); > - > - hw_mmu_disable(resources->dw_dmmu_base); > - free_page((unsigned long)dummy_va_addr); > + mmu_fault_print_stack(dev_context); > break; > #ifdef CONFIG_BRIDGE_NTFY_PWRERR > case DSP_PWRERROR: > -- > 1.7.1 -- To unsubscribe from this list: send the line "unsubscribe linux-omap" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html