diff --git a/arch/um/drivers/ssl.c b/arch/um/drivers/ssl.c
index 95a3eaa..8564784 100644
--- a/arch/um/drivers/ssl.c
+++ b/arch/um/drivers/ssl.c
@@ -84,21 +84,18 @@
 
 static int ssl_config(char *str)
 {
-	return line_config(serial_lines,
-			   sizeof(serial_lines)/sizeof(serial_lines[0]), str);
+	return line_config(serial_lines, ARRAY_SIZE(serial_lines), str);
 }
 
 static int ssl_get_config(char *dev, char *str, int size, char **error_out)
 {
-	return line_get_config(dev, serial_lines,
-			       sizeof(serial_lines)/sizeof(serial_lines[0]),
-			       str, size, error_out);
+	return line_get_config(dev, serial_lines, ARRAY_SIZE(serial_lines), str,
+			       size, error_out);
 }
 
 static int ssl_remove(int n)
 {
-	return line_remove(serial_lines,
-			   sizeof(serial_lines)/sizeof(serial_lines[0]), n);
+	return line_remove(serial_lines, ARRAY_SIZE(serial_lines), n);
 }
 
 int ssl_open(struct tty_struct *tty, struct file *filp)
@@ -205,7 +202,7 @@
 					 serial_lines,
 					 ARRAY_SIZE(serial_lines));
 
-	lines_init(serial_lines, sizeof(serial_lines)/sizeof(serial_lines[0]));
+	lines_init(serial_lines, ARRAY_SIZE(serial_lines));
 
 	new_title = add_xterm_umid(opts.xterm_title);
 	if (new_title != NULL)
@@ -221,16 +218,13 @@
 {
 	if (!ssl_init_done)
 		return;
-	close_lines(serial_lines,
-		    sizeof(serial_lines)/sizeof(serial_lines[0]));
+	close_lines(serial_lines, ARRAY_SIZE(serial_lines));
 }
 __uml_exitcall(ssl_exit);
 
 static int ssl_chan_setup(char *str)
 {
-	return line_setup(serial_lines,
-			  sizeof(serial_lines)/sizeof(serial_lines[0]),
-			  str, 1);
+	return line_setup(serial_lines, ARRAY_SIZE(serial_lines), str, 1);
 }
 
 __setup("ssl", ssl_chan_setup);
diff --git a/arch/um/drivers/stdio_console.c b/arch/um/drivers/stdio_console.c
index 8f3b168..b77f7d2 100644
--- a/arch/um/drivers/stdio_console.c
+++ b/arch/um/drivers/stdio_console.c
@@ -91,18 +91,17 @@
 
 static int con_config(char *str)
 {
-	return line_config(vts, sizeof(vts)/sizeof(vts[0]), str);
+	return line_config(vts, ARRAY_SIZE(vts), str);
 }
 
 static int con_get_config(char *dev, char *str, int size, char **error_out)
 {
-	return line_get_config(dev, vts, sizeof(vts)/sizeof(vts[0]), str,
-			       size, error_out);
+	return line_get_config(dev, vts, ARRAY_SIZE(vts), str, size, error_out);
 }
 
 static int con_remove(int n)
 {
-	return line_remove(vts, sizeof(vts)/sizeof(vts[0]), n);
+	return line_remove(vts, ARRAY_SIZE(vts), n);
 }
 
 static int con_open(struct tty_struct *tty, struct file *filp)
@@ -170,7 +169,7 @@
 		return -1;
 	printk(KERN_INFO "Initialized stdio console driver\n");
 
-	lines_init(vts, sizeof(vts)/sizeof(vts[0]));
+	lines_init(vts, ARRAY_SIZE(vts));
 
 	new_title = add_xterm_umid(opts.xterm_title);
 	if(new_title != NULL)
@@ -186,13 +185,13 @@
 {
 	if (!con_init_done)
 		return;
-	close_lines(vts, sizeof(vts)/sizeof(vts[0]));
+	close_lines(vts, ARRAY_SIZE(vts));
 }
 __uml_exitcall(console_exit);
 
 static int console_chan_setup(char *str)
 {
-	return line_setup(vts, sizeof(vts)/sizeof(vts[0]), str, 1);
+	return line_setup(vts, ARRAY_SIZE(vts), str, 1);
 }
 __setup("con", console_chan_setup);
 __channel_help(console_chan_setup, "con");
