[PATCH] irqbalance: optimize the check platform device func.

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Abstract a platform device irq info struct include dir name, irq type
and irq class. This can simplify the compare logic avoid unnecessary error
just like the spell error as follow:

	else if (!strncmp(ent->d_name, "usb", strlen("net")))

Signed-off-by: wanghaibin <wanghaibin.wang at huawei.com>
---
 procinterrupts.c | 34 ++++++++++++++++++----------------
 1 file changed, 18 insertions(+), 16 deletions(-)

diff --git a/procinterrupts.c b/procinterrupts.c
index c5c034c..57051c8 100644
--- a/procinterrupts.c
+++ b/procinterrupts.c
@@ -57,7 +57,17 @@ static int check_platform_device(char *name, struct irq_info *info)
 	DIR *dirfd;
 	char path[512];
 	struct dirent *ent;
-	int rc = -ENOENT;
+	int rc = -ENOENT, i;
+	static struct pdev_irq_info{
+		char *d_name;
+		int type;
+		int class;
+	} pdev_irq_info[] = {
+		{"ata", IRQ_TYPE_LEGACY, IRQ_SCSI},
+		{"net", IRQ_TYPE_LEGACY, IRQ_ETH},
+		{"usb", IRQ_TYPE_LEGACY, IRQ_OTHER},
+		{NULL},
+	};
 
 	memset(path, 0, 512);
 
@@ -74,21 +84,13 @@ static int check_platform_device(char *name, struct irq_info *info)
 	while ((ent = readdir(dirfd)) != NULL) {
 
 		log(TO_ALL, LOG_DEBUG, "Checking entry %s\n", ent->d_name);
-		if (!strncmp(ent->d_name, "ata", strlen("ata"))) {
-			info->type = IRQ_TYPE_LEGACY;
-			info->class = IRQ_SCSI;
-			rc = 0;
-			goto out;
-		} else if (!strncmp(ent->d_name, "net", strlen("net"))) {
-			info->type = IRQ_TYPE_LEGACY;
-			info->class = IRQ_ETH;
-			rc = 0;
-			goto out;
-		} else if (!strncmp(ent->d_name, "usb", strlen("net"))) {
-			info->type = IRQ_TYPE_LEGACY;
-			info->class = IRQ_OTHER;
-			rc = 0;
-			goto out;
+		for (i = 0; pdev_irq_info[i].d_name != NULL; i++) {
+			if (!strncmp(ent->d_name, pdev_irq_info[i].d_name, strlen(pdev_irq_info[i].d_name))) {
+				info->type = pdev_irq_info[i].type;
+				info->class = pdev_irq_info[i].class;
+				rc = 0;
+				goto out;
+			}
 		}
 	}
 
-- 
1.8.3.1





[Index of Archives]     [Linux Samsung SoC]     [Linux Rockchip SoC]     [Linux Actions SoC]     [Linux for Synopsys ARC Processors]     [Linux NFS]     [Linux NILFS]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]


  Powered by Linux