Example #1
0
static int hang_detect_thread(void *arg)
{

	/* unsigned long flags; */
	struct sched_param param = {.sched_priority = RTPM_PRIO_WDT };

	LOGE("[Hang_Detect] hang_detect thread starts.\n");

	sched_setscheduler(current, SCHED_FIFO, &param);

	while (1) {
		if ((1 == hd_detect_enabled) && (FindTaskByName("system_server") != -1)) {
			LOGE("[Hang_Detect] hang_detect thread counts down %d:%d.\n",
			     hang_detect_counter, hd_timeout);


			if (hang_detect_counter <= 0) {
				ShowStatus();
			}

		
			if (hang_detect_counter == 0)
			{
				LOGE("[Hang_Detect] we should triger	HWT	...\n");
				if(aee_mode!=AEE_MODE_CUSTOMER_USER) 
				{
					aee_kernel_warning_api(__FILE__, __LINE__, DB_OPT_NE_JBT_TRACES|DB_OPT_DISPLAY_HANG_DUMP, "\nCRDISPATCH_KEY:SS Hang\n","we triger HWT ");
					msleep(30 * 1000);
				}
				else //only Customer user load  trigger HWT
				{
					aee_kernel_exception_api(__FILE__, __LINE__, DB_OPT_NE_JBT_TRACES|DB_OPT_DISPLAY_HANG_DUMP, "\nCRDISPATCH_KEY:SS Hang\n","we triger HWT ");
					msleep(30 * 1000);
					local_irq_disable();
					while (1);
					BUG();
				}	
			}

			hang_detect_counter--;
		} else {
			/* incase of system_server restart, we give 2 mins more.(4*HD_INTER) */
			if (1 == hd_detect_enabled) {
				hang_detect_counter = hd_timeout + 4;
				hd_detect_enabled = 0;
			}
			LOGE("[Hang_Detect] hang_detect disabled.\n");
		}

		msleep((HD_INTER) * 1000);
	}
	return 0;
}
Example #2
0
static int hang_detect_thread(void *arg)
{

	/* unsigned long flags; */
	struct sched_param param = { .sched_priority = RTPM_PRIO_WDT};

	LOGE("[Hang_Detect] hang_detect thread starts.\n");

	sched_setscheduler(current, SCHED_FIFO, &param);

	while (1) {
		if ((1==hd_detect_enabled) && (FindTaskByName("system_server")!=-1)) {
			LOGE("[Hang_Detect] hang_detect thread counts down %d:%d.\n",
			     hang_detect_counter, hd_timeout);


			if (hang_detect_counter<=0)	{
				ShowStatus () ;
			}
			if (hang_detect_counter==0)	{
				LOGE("[Hang_Detect] we should triger	HWT	...	\n") ;

#ifdef CONFIG_MT_ENG_BUILD
				aee_kernel_warning("\nCRDISPATCH_KEY:SS Hang\n",
						   "we triger	HWT");
				msleep (10*1000) ;
#else
				aee_kernel_warning("\nCRDISPATCH_KEY:SS Hang\n",
						   "we triger	HWT");
				msleep (10*1000) ;
				local_irq_disable () ;
			
				while (1);

				BUG	() ;
#endif
			}

			hang_detect_counter -- ;
		} else {
			/* incase of system_server restart, we give 2 mins more.(4*HD_INTER) */
			if (1==hd_detect_enabled) {
				hang_detect_counter = hd_timeout + 4 ;
				hd_detect_enabled = 0 ;
			}
			LOGE("[Hang_Detect] hang_detect disabled.\n") ;
		}
		
		msleep((HD_INTER) * 1000);
	}
	return 0 ;
}
int aee_kernel_wdt_kick_api(int kinterval)
{
	int ret = 0;
#ifdef CONFIG_MTK_AEE_POWERKEY_HANG_DETECT
	if (pwk_start_monitor && (get_boot_mode() == NORMAL_BOOT)
	    && (FindTaskByName("system_server") != -1)) {
		/* Only in normal_boot! */
		LOGE("Press powerkey!!	g_boot_mode=%d,wdt_kick_status=0x%x,tickTimes=0x%x,g_kinterval=%d,RT[%lld]\n", get_boot_mode(), wdt_kick_status, hwt_kick_times, kinterval, sched_clock());
		hwt_kick_times++;
		if ((kinterval * hwt_kick_times > 180))	/* only monitor 3 min */
		{
			pwk_start_monitor = 0;
			/* check all modules is ok~~~ */
			if ((wdt_kick_status & (WDT_SETBY_Display | WDT_SETBY_SF)) !=
			    (WDT_SETBY_Display | WDT_SETBY_SF)) 
				{

					if(aee_mode!=AEE_MODE_CUSTOMER_USER) //disable for display not ready
					{
						//ShowStatus();	/* catch task kernel bt */
						//LOGE("[WDK] Powerkey Tick fail,kick_status 0x%08x,RT[%lld]\n ",
					    // wdt_kick_status, sched_clock());
						//aee_kernel_warning_api(__FILE__, __LINE__, DB_OPT_NE_JBT_TRACES|DB_OPT_DISPLAY_HANG_DUMP, "\nCRDISPATCH_KEY:UI Hang(Powerkey)\n",
						//	   "Powerkey Monitor");
						//msleep(30 * 1000);
					}
					else
					{
						//ShowStatus();	/* catch task kernel bt */
						//LOGE("[WDK] Powerkey Tick fail,kick_status 0x%08x,RT[%lld]\n ",
					    // wdt_kick_status, sched_clock());
						//aee_kernel_exception_api(__FILE__, __LINE__, DB_OPT_NE_JBT_TRACES|DB_OPT_DISPLAY_HANG_DUMP, "\nCRDISPATCH_KEY:UI Hang(Powerkey)\n",
						//	   "Powerkey Monitor");
						//msleep(30 * 1000);
						//ret = WDT_PWK_HANG_FORCE_HWT;	/* trigger HWT */
					}
				}
			}
			if ((wdt_kick_status & (WDT_SETBY_Display | WDT_SETBY_SF)) ==
		    (WDT_SETBY_Display | WDT_SETBY_SF)) 
		    {
				pwk_start_monitor = 0;
				LOGE("[WDK] Powerkey Tick ok,kick_status 0x%08x,RT[%lld]\n ",
			     wdt_kick_status, sched_clock());
			}
		}
#endif
	return ret;
}
Example #4
0
int aee_kernel_wdt_kick_api(int kinterval)
{
	int ret=0;		
#ifdef CONFIG_MTK_AEE_POWERKEY_HANG_DETECT
	if (pwk_start_monitor && (get_boot_mode() == NORMAL_BOOT)
	    && (FindTaskByName("system_server") != -1)) {
		/* Only in normal_boot! */
		LOGE("Press powerkey!!	g_boot_mode=%d,wdt_kick_status=0x%x,tickTimes=0x%x,g_kinterval=%d,RT[%lld]\n",get_boot_mode(),wdt_kick_status,hwt_kick_times,kinterval,sched_clock());
		hwt_kick_times++;	
		if ((kinterval * hwt_kick_times > 180))	/* only monitor 3 min */
		{
			pwk_start_monitor=0;
			/* check all modules is ok~~~ */
			if ((wdt_kick_status & (WDT_SETBY_Display | WDT_SETBY_SF)) !=
			    (WDT_SETBY_Display | WDT_SETBY_SF)) {
				#ifdef CONFIG_MT_ENG_BUILD
				ShowStatus();	/* catch task kernel bt */
				LOGE("[WDK] Powerkey Tick fail,kick_status 0x%08x,RT[%lld]\n ",
				     wdt_kick_status, sched_clock());
				aee_kernel_warning("\nCRDISPATCH_KEY:UI Hang(Powerkey)\n",
						   "Powerkey Monitor");
				#else
				ShowStatus();	/* catch task kernel bt */
				LOGE("[WDK] Powerkey Tick fail,kick_status 0x%08x,RT[%lld]\n ",
				     wdt_kick_status, sched_clock());
				ret = WDT_PWK_HANG_FORCE_HWT;	/* trigger HWT */
				#endif
			}			
		}
		if ((wdt_kick_status & (WDT_SETBY_Display | WDT_SETBY_SF)) ==
		    (WDT_SETBY_Display | WDT_SETBY_SF)) {
			pwk_start_monitor=0;
			LOGE("[WDK] Powerkey Tick ok,kick_status 0x%08x,RT[%lld]\n ",
			     wdt_kick_status, sched_clock());
		}
			
	}
#endif
	return ret;
}