Esempio n. 1
0
static int px_tp_d_release(struct inode *inode, struct file *fp)
{
	g_client_count--;

	if (g_client_count == 0)
	{
		/* stop profiling in case it is still running */
		stop_profiling();

		/* free buffers in case they are not freed */
		free_event_buffer();

		free_module_buffer();
	}

	return 0;
}
Esempio n. 2
0
/*
 * allocate module buffer
 */
static int allocate_module_buffer(unsigned int *size)
{
	int ret;
	unsigned int buffer_size;
	void * address;

	if (copy_from_user(&buffer_size, size, sizeof(unsigned int)) != 0)
	{
		return -EFAULT;
	}

	buffer_size = PAGE_ALIGN(buffer_size);

	/* free kernel buffers if it is already allocated */
	free_module_buffer();

	//address = __vmalloc(buffer_size, GFP_KERNEL, pgprot_noncached(PAGE_KERNEL));
	address = vmalloc(buffer_size);

	if (address == NULL)
	{
		ret = -ENOMEM;
		goto error;
	}
	

	g_module_buffer_hs.buffer.address = address;
	g_module_buffer_hs.buffer.size           = buffer_size;
	g_module_buffer_hs.buffer.read_offset    = 0;
	g_module_buffer_hs.buffer.write_offset   = 0;
//	g_module_buffer_hs.buffer.is_data_lost   = false;
	g_module_buffer_hs.is_full_event_set     = false;

	if (copy_to_user(size, &buffer_size, sizeof(unsigned int)) != 0)
	{
		ret = -EFAULT;
		goto error;
	}

	return 0;
error:
	if (address != NULL)
		vfree(address);
		
	return ret;
}
Esempio n. 3
0
static int px_hotspot_d_release(struct inode *inode, struct file *fp)
{
	if ((fp->f_flags & O_ACCMODE) == O_RDONLY)
		return 0;

	g_client_count--;

	if (g_client_count == 0)
	{
		/* stop profiling in case it is still running */
		stop_profiling();

		/* free buffers in case they are not freed */
		free_all_sample_buffers();

		free_module_buffer();
		
		g_sample_count_hs = 0;
	}

	return 0;
}
Esempio n. 4
0
static long px_tp_d_ioctl( struct file *fp,
                               unsigned int cmd,
                               unsigned long arg)
#endif
{
	switch (cmd)
	{
	case PX_TP_CMD_START_MODULE_TRACKING:
		return start_module_tracking();

	case PX_TP_CMD_START_SAMPLING:
		return start_sampling((bool *)arg);

	case PX_TP_CMD_STOP_PROFILING:
		return stop_profiling();

	case PX_TP_CMD_PAUSE_PROFILING:
		return pause_profiling();

	case PX_TP_CMD_RESUME_PROFILING:
		return resume_profiling();

	case PX_TP_CMD_ALLOC_EVENT_BUFFER:
		return allocate_event_buffer((unsigned int *)arg);

	case PX_TP_CMD_ALLOC_MODULE_BUFFER:
		return allocate_module_buffer((unsigned int *)arg);

	case PX_TP_CMD_FREE_EVENT_BUFFER:
		return free_event_buffer();

	case PX_TP_CMD_FREE_MODULE_BUFFER:
		return free_module_buffer();

	case PX_TP_CMD_SET_AUTO_LAUNCH_APP_PID:
		return set_auto_launch_app_pid((pid_t *)arg);

	case PX_TP_CMD_SET_WAIT_IMAGE_LOAD_NAME:
		return set_wait_image_load_name((char *)arg);

	case PX_TP_CMD_QUERY_REQUEST:
		return query_request((struct query_request_data *)arg);

	case PX_TP_CMD_GET_CPU_ID:
		return get_cpu_id((unsigned long *)arg);

	case PX_TP_CMD_GET_TARGET_RAW_DATA_LENGTH:
		return get_target_raw_data_length((unsigned long *)arg);

	case PX_TP_CMD_GET_TARGET_INFO:
		return get_target_info((unsigned long *)arg);

	case PX_TP_CMD_GET_CPU_FREQ:
		return get_cpu_freq((unsigned int *)arg);

	case PX_TP_CMD_GET_TIMESTAMP_FREQ:
		return get_timestamp_frequency((unsigned long *)arg);

	case PX_TP_CMD_GET_TIMESTAMP:
		return get_time_stamp((unsigned long long *)arg);

	case PX_TP_CMD_ADD_MODULE_RECORD:
		return add_module_record((struct add_module_data *)arg);
#if 0
	case PX_TP_CMD_RESET_EVENT_BUFFER_FULL:
		return reset_event_buffer_full((bool *)arg);

	case PX_TP_CMD_RESET_MODULE_BUFFER_FULL:
		return reset_module_buffer_full((bool *)arg);
#endif
//	case PX_TP_CMD_SET_KERNEL_FUNC_ADDR:
//		return set_kernel_func_addr((struct tp_kernel_func_addr *)arg);

//	case PX_TP_CMD_HOOK_ADDRESS:
//		return hook_address((struct tp_hook_address *)arg);

	case PX_TP_CMD_READ_EVENT_BUFFER:
		return read_event_buffer((struct read_buffer_data *)arg);

	case PX_TP_CMD_READ_MODULE_BUFFER:
		return read_module_buffer((struct read_buffer_data *)arg);

	case PX_TP_CMD_GET_POSSIBLE_CPU_NUM:
		return get_possible_cpu_number((unsigned int *)arg);

	case PX_TP_CMD_GET_ONLINE_CPU_NUM:
		return get_online_cpu_number((unsigned int *)arg);

	default:
		return -EINVAL;
	}
}
Esempio n. 5
0
static long px_hotspot_d_ioctl(struct file *fp,
                               unsigned int cmd,
                               unsigned long arg)
#endif
{
	int ret;
	
	if ((ret = check_ioctl(fp, cmd, arg)) != 0)
		return ret;

	switch (cmd)
	{
	case PX_HS_CMD_START_MODULE_TRACKING:
		return start_module_tracking_hs();

	case PX_HS_CMD_START_SAMPLING:
		return start_sampling((bool *)arg);

	case PX_HS_CMD_STOP_PROFILING:
		return stop_profiling();

	case PX_HS_CMD_PAUSE_PROFILING:
		return pause_profiling();

	case PX_HS_CMD_RESUME_PROFILING:
		return resume_profiling();

	case PX_HS_CMD_ALLOC_SAMPLE_BUFFER:
		return allocate_all_sample_buffers((unsigned int *)arg);

	case PX_HS_CMD_ALLOC_MODULE_BUFFER:
		return allocate_module_buffer((unsigned int *)arg);

	case PX_HS_CMD_FREE_SAMPLE_BUFFER:
		return free_all_sample_buffers();

	case PX_HS_CMD_FREE_MODULE_BUFFER:
		return free_module_buffer();

	case PX_HS_CMD_SET_AUTO_LAUNCH_APP_PID:
		return set_auto_launch_app_pid((pid_t *)arg);

	case PX_HS_CMD_SET_WAIT_IMAGE_LOAD_NAME:
		return set_wait_image_load_name((char *)arg);

	case PX_HS_CMD_SET_TBS_SETTINGS:
		return set_tbs_settings((struct HSTimerSettings *)arg);

	case PX_HS_CMD_SET_EBS_SETTINGS:
		return set_ebs_settings((struct HSEventSettings *)arg);

	case PX_HS_CMD_SET_CALIBRATION_MODE:
		return set_calibration_mode((bool *)arg);

	case PX_HS_CMD_QUERY_REQUEST:
		return query_request((struct query_request_data *)arg);

	case PX_HS_CMD_GET_CALIBRATION_RESULT:
		return get_calibration_result((struct calibration_result *)arg);

	case PX_HS_CMD_GET_CPU_ID:
		return get_cpu_id((unsigned long *)arg);

	case PX_HS_CMD_GET_TARGET_RAW_DATA_LENGTH:
		return get_target_raw_data_length((unsigned long *)arg);

	case PX_HS_CMD_GET_TARGET_INFO:
		return get_target_info((unsigned long *)arg);

	case PX_HS_CMD_GET_CPU_FREQ:
		return get_cpu_freq((unsigned int *)arg);

	case PX_HS_CMD_GET_TIMESTAMP_FREQ:
		return get_timestamp_frequency((unsigned long *)arg);

	case PX_HS_CMD_GET_TIMESTAMP:
		return get_time_stamp((unsigned long long *)arg);

	case PX_HS_CMD_ADD_MODULE_RECORD:
		return add_module_record_hs((struct add_module_data *)arg);

	case PX_HS_CMD_READ_SAMPLE_BUFFER:
		return read_sample_buffer((struct read_buffer_data *)arg);

	case PX_HS_CMD_READ_MODULE_BUFFER:
		return read_module_buffer((struct read_buffer_data *)arg);

	case PX_HS_CMD_READ_TOTAL_SAMPLE_COUNT:
		return read_total_sample_count((unsigned long long *)arg);

	case PX_HS_CMD_GET_POSSIBLE_CPU_NUM:
		return get_possible_cpu_number((unsigned int *)arg);

	case PX_HS_CMD_GET_ONLINE_CPU_NUM:
		return get_online_cpu_number((unsigned int *)arg);

	default:
		return -EINVAL;
	}
}