コード例 #1
0
static int __init ram_console_late_init(void)
{
	struct proc_dir_entry *entry;
	struct last_reboot_reason lrr;
	int i;

	printk(KERN_ERR"ram_console_late_init\r\n");
	
	if (ram_console_old_log == NULL)
		return 0;

	lrr.wdt_status = ram_console_old_header.hw_status;
	lrr.shutdown_mode = ram_console_old_header.shutdown_mode;
	lrr.in_idle = ram_console_old_header.in_idle;
	lrr.jiffies_current = ram_console_old_header.jiffies_current;
	lrr.jiffies_wdk_kick = ram_console_old_header.jiffies_wdk_kick;
	lrr.jiffies_idle = ram_console_old_header.jiffies_idle;

	for (i = 0; i < RR_CPU_COUNT; i++) {
		lrr.last_irq_enter[i] = ram_console_old_header.last_irq_enter[i];
		lrr.jiffies_last_irq_enter[i] = ram_console_old_header.jiffies_last_irq_enter[i];

		lrr.last_irq_exit[i] = ram_console_old_header.last_irq_exit[i];
		lrr.jiffies_last_irq_exit[i] = ram_console_old_header.jiffies_last_irq_exit[i];

		lrr.jiffies_last_sched[i] = ram_console_old_header.jiffies_last_sched[i];
		strlcpy(lrr.last_sched_comm[i], ram_console_old_header.last_sched_comm[i], TASK_COMM_LEN);
	}

	aee_rr_last(&lrr);

#ifdef CONFIG_ANDROID_RAM_CONSOLE_EARLY_INIT
	ram_console_old_log = kmalloc(ram_console_old_log_size, GFP_KERNEL);
	if (ram_console_old_log == NULL) {
		printk(KERN_ERR
		       "ram_console: failed to allocate buffer for old log\n");
		ram_console_old_log_size = 0;
		return 0;
	}
	memcpy(ram_console_old_log,
	       ram_console_old_log_init_buffer, ram_console_old_log_size);
#endif
	entry = create_proc_entry("last_kmsg", S_IFREG | S_IRUGO, NULL);
	if (!entry) {
		printk(KERN_ERR "ram_console: failed to create proc entry\n");
		kfree(ram_console_old_log);
		ram_console_old_log = NULL;
		return 0;
	}

	entry->proc_fops = &ram_console_file_ops;
	entry->size = ram_console_old_log_size;
	return 0;
}
コード例 #2
0
static int __init ram_console_late_init(void)
{
	struct proc_dir_entry *entry;
	struct last_reboot_reason lrr;
	char *ram_console_header_buffer;
	int str_real_len = 0;
	int i = 0;

	printk(KERN_ERR"ram_console_late_init\r\n");
	
	if (ram_console_old_log == NULL)
	{
		printk(KERN_ERR"ram console olg log is null!\n");
		return 0;
	}

	memset(&lrr, 0, sizeof(struct last_reboot_reason));
	lrr.wdt_status = ram_console_old_header.hw_status;
	lrr.fiq_step = ram_console_old_header.fiq_step;

	for(i = 0; i < NR_CPUS; i++)
	{
		lrr.last_irq_enter[i] = ram_console_old_header.last_irq_enter[i];
		lrr.jiffies_last_irq_enter[i] = ram_console_old_header.jiffies_last_irq_enter[i];

		lrr.last_irq_exit[i] = ram_console_old_header.last_irq_exit[i];
		lrr.jiffies_last_irq_exit[i] = ram_console_old_header.jiffies_last_irq_exit[i];

		lrr.jiffies_last_sched[i] = ram_console_old_header.jiffies_last_sched[i];
		strlcpy(lrr.last_sched_comm[i], ram_console_old_header.last_sched_comm[i], TASK_COMM_LEN);

		lrr.hotplug_data1[i] = ram_console_old_header.hotplug_data1[i];
		lrr.hotplug_data2[i] = ram_console_old_header.hotplug_data2[i];
	}

	aee_rr_last(&lrr);

	ram_console_header_buffer = kmalloc(RAM_CONSOLE_HEADER_STR_LEN, GFP_KERNEL);
	if(ram_console_header_buffer == NULL)
	{
		printk(KERN_ERR
		       "ram_console: failed to allocate buffer for header buffer.\n");
		return 0;
	}


	str_real_len = sprintf(ram_console_header_buffer,"ram console header, hw_status: %u, fiq step %u.\n",
	ram_console_old_header.hw_status, ram_console_old_header.fiq_step);

	str_real_len += sprintf(ram_console_header_buffer + str_real_len,"bin log %d.\n", ram_console_old_header.bin_log_count);
	
	ram_console_old_log = kmalloc(ram_console_old_log_size + str_real_len, GFP_KERNEL);
	if(ram_console_old_log == NULL)
	{
		printk(KERN_ERR
		       "ram_console: failed to allocate buffer for old log\n");
		ram_console_old_log_size = 0;
		kfree(ram_console_header_buffer);
		return 0;
	}
	memcpy(ram_console_old_log, ram_console_header_buffer, str_real_len);
	memcpy(ram_console_old_log + str_real_len,
	       ram_console_old_log_init_buffer, ram_console_old_log_size);

	kfree(ram_console_header_buffer);
	kfree(ram_console_old_log_init_buffer);
	entry = create_proc_entry("last_kmsg", S_IFREG | S_IRUGO, NULL);
	if(!entry)
	{
		printk(KERN_ERR "ram_console: failed to create proc entry\n");
		kfree(ram_console_old_log);
		ram_console_old_log = NULL;
		return 0;
	}

	ram_console_old_log_size += str_real_len;
	entry->proc_fops = &ram_console_file_ops;
	entry->size = ram_console_old_log_size;
	return 0;
}
コード例 #3
0
ファイル: mtk_ram_console.c プロジェクト: Scorpio92/mediatek
static int __init ram_console_late_init(void)
{
	struct proc_dir_entry *entry;
	struct last_reboot_reason lrr;
	char *ram_console_header_buffer;
	int str_real_len = 0;
	int i = 0;

#ifdef MTK_EMMC_SUPPORT
#ifdef CONFIG_MTK_AEE_IPANIC
#ifdef MTK_GPT_SCHEME_SUPPORT
	int err;
	static struct task_struct *thread;
	thread = kthread_run(emmc_read_last_kmsg, 0, "read_poweroff_log");
	if (IS_ERR(thread)) {
		err = PTR_ERR(thread);
		pr_err("failed to create kernel thread: %d\n", err);
	}
#else
	emmc_read_last_kmsg();
#endif
#endif
#endif
	if (ram_console_old_log == NULL) {
		pr_err("ram console old log is null!\n");
		return 0;
	}

	memset(&lrr, 0, sizeof(struct last_reboot_reason));
	lrr.wdt_status = ram_console_old_header.hw_status;
	lrr.fiq_step = ram_console_old_header.fiq_step;
	lrr.reboot_mode = ram_console_old_header.reboot_mode;

	for (i = 0; i < NR_CPUS; i++) {
		lrr.last_irq_enter[i] = ram_console_old_header.last_irq_enter[i];
		lrr.jiffies_last_irq_enter[i] = ram_console_old_header.jiffies_last_irq_enter[i];

		lrr.last_irq_exit[i] = ram_console_old_header.last_irq_exit[i];
		lrr.jiffies_last_irq_exit[i] = ram_console_old_header.jiffies_last_irq_exit[i];

		lrr.jiffies_last_sched[i] = ram_console_old_header.jiffies_last_sched[i];
		strlcpy(lrr.last_sched_comm[i], ram_console_old_header.last_sched_comm[i],
			TASK_COMM_LEN);

		lrr.hotplug_data1[i] = ram_console_old_header.hotplug_data1[i];
		lrr.hotplug_data2[i] = i ? 0 : ram_console_old_header.hotplug_data2;
		lrr.hotplug_data3[i] = i ? 0 : ram_console_old_header.hotplug_data3;
	}

	lrr.mcdi_wfi = ram_console_old_header.mcdi_wfi;
	for (i = 0; i < NR_CPUS; i++)
		lrr.cpu_dormant[i] = ram_console_old_header.cpu_dormant[i];

	aee_rr_last(&lrr);

	ram_console_header_buffer = kmalloc(RAM_CONSOLE_HEADER_STR_LEN, GFP_KERNEL);
	if (ram_console_header_buffer == NULL) {
		pr_err("ram_console: failed to allocate buffer for header buffer.\n");
		return 0;
	}


	str_real_len =
	    sprintf(ram_console_header_buffer, "ram console header, hw_status: %u, fiq step %u.\n",
		    ram_console_old_header.hw_status, ram_console_old_header.fiq_step);

	str_real_len +=
	    sprintf(ram_console_header_buffer + str_real_len, "bin log %d.\n",
		    ram_console_old_header.bin_log_count);

	ram_console_old_log = kmalloc(ram_console_old_log_size + str_real_len, GFP_KERNEL);
	if (ram_console_old_log == NULL) {
		pr_err("ram_console: failed to allocate buffer for old log\n");
		ram_console_old_log_size = 0;
		kfree(ram_console_header_buffer);
		return 0;
	}
	memcpy(ram_console_old_log, ram_console_header_buffer, str_real_len);
	memcpy(ram_console_old_log + str_real_len,
	       ram_console_old_log_init_buffer, ram_console_old_log_size);

	kfree(ram_console_header_buffer);
	kfree(ram_console_old_log_init_buffer);
	entry = proc_create("last_kmsg", 0444, NULL, &ram_console_file_ops);
	if (!entry) {
		pr_err("ram_console: failed to create proc entry\n");
		kfree(ram_console_old_log);
		ram_console_old_log = NULL;
		return 0;
	}

	ram_console_old_log_size += str_real_len;
	return 0;
}