#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/delay.h>

MODULE_LICENSE("GPL");
DEFINE_PER_CPU(int, counter);
static int test_percpu_init(void)
{
	int num_cpus = num_online_cpus();
	int i = 0;
	int val;

	pr_info("Number of cpus available:%d\n", num_cpus);
	for (i = 0; i < num_cpus; i++) {
		int value = per_cpu(counter, i);
		pr_info("Value of counter is %d at Processor:%d\n", value, i);
	}

	val = get_cpu_var(counter);
	get_cpu_var(counter) = 10;
	put_cpu_var(counter);
	
	pr_info("Printing counter value of all processor after updating current processor:%d\n",
			smp_processor_id());

	for (i = 0; i < num_cpus; i++) {
		int value = per_cpu(counter, i);
		pr_info("Value of counter is %d at Processor:%d\n", value, i);
	}


    return 0;
}

static void test_percpu_exit(void)
{
}

module_init(test_percpu_init);
module_exit(test_percpu_exit);