+static void helloc_free(void)
+{
+ int i;
+ for (i = 0; i < DEVICE_NUMBER; i++) {
+ if (hello_message[i])
+ kfree(hello_message[i]->text);
+ kfree(hello_message[i]);
+ }
+}
+
+static int __init helloc_alloc(void)
+{
+ int i;
+ for (i = 0; i < DEVICE_NUMBER; i++) {
+ hello_message[i] = kzalloc(sizeof(struct message), GFP_KERNEL);
+ if (!hello_message[i])
+ goto out;
+ hello_message[i]->text = kzalloc(BUFFER_SIZE, GFP_KERNEL);
+ if (!hello_message[i]->text)
+ goto out;
+ }
+ return 0;
+out:
+ for (; i >= 0; i--) {
+ if (hello_message[i])
+ kfree(hello_message[i]->text);
+ kfree(hello_message[i]);
+ }
+ return -ENOMEM;
+}
+