lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening linux-cve-announce PHC | |
Open Source and information security mailing list archives
| ||
|
Date: Sun, 17 Apr 2011 23:21:35 -0400 From: dykmanj@...ux.vnet.ibm.com To: netdev@...r.kernel.org Cc: Jim Dykman <dykmanj@...ux.vnet.ibm.com>, Piyush Chaudhary <piyushc@...ux.vnet.ibm.com>, Fu-Chung Chang <fcchang@...ux.vnet.ibm.com>, " William S. Cadden" <wscadden@...ux.vnet.ibm.com>, " Wen C. Chen" <winstonc@...ux.vnet.ibm.com>, Scot Sakolish <sakolish@...ux.vnet.ibm.com>, Jian Xiao <jian@...ux.vnet.ibm.com>, " Carol L. Soto" <clsoto@...ux.vnet.ibm.com>, " Sarah J. Sheppard" <sjsheppa@...ux.vnet.ibm.com> Subject: [PATCH v2 03/27] HFI: Add device_create/device_destroy calls for HFI devices. From: Jim Dykman <dykmanj@...ux.vnet.ibm.com> Signed-off-by: Piyush Chaudhary <piyushc@...ux.vnet.ibm.com> Signed-off-by: Jim Dykman <dykmanj@...ux.vnet.ibm.com> Signed-off-by: Fu-Chung Chang <fcchang@...ux.vnet.ibm.com> Signed-off-by: William S. Cadden <wscadden@...ux.vnet.ibm.com> Signed-off-by: Wen C. Chen <winstonc@...ux.vnet.ibm.com> Signed-off-by: Scot Sakolish <sakolish@...ux.vnet.ibm.com> Signed-off-by: Jian Xiao <jian@...ux.vnet.ibm.com> Signed-off-by: Carol L. Soto <clsoto@...ux.vnet.ibm.com> Signed-off-by: Sarah J. Sheppard <sjsheppa@...ux.vnet.ibm.com> --- drivers/net/hfi/core/hfidd_init.c | 52 ++++++++++++++++++++++++++++++++++++ include/linux/hfi/hfidd_internal.h | 1 + 2 files changed, 53 insertions(+), 0 deletions(-) diff --git a/drivers/net/hfi/core/hfidd_init.c b/drivers/net/hfi/core/hfidd_init.c index 114b772..1e4898b 100644 --- a/drivers/net/hfi/core/hfidd_init.c +++ b/drivers/net/hfi/core/hfidd_init.c @@ -47,6 +47,7 @@ MODULE_LICENSE("GPL v2"); struct hfidd_global hfidd_global; EXPORT_SYMBOL_GPL(hfidd_global); +struct device *hfidd_class_dev[MAX_HFIS + 1]; static dev_t hfidd_dev; #define MAX_HFI_DEVS (MAX_HFIS + 1) @@ -71,6 +72,38 @@ static const struct file_operations hfidd_fops = { .write = hfidd_cmd_write, }; +/* Create the hfi device */ +static int hfidd_mkdev(int ai, struct hfidd_acs *p_acs) +{ + char dname[128]; + int rc = 0; + + sprintf(dname, "%s%d", HFIDD_DEV_NAME, ai); + + hfidd_class_dev[ai] = device_create(hfidd_global.class, + NULL, MKDEV(MAJOR(hfidd_dev), ai), + (void *)p_acs, (char *)dname); + + if (IS_ERR(hfidd_class_dev[ai])) { + rc = PTR_ERR(hfidd_class_dev[ai]); + printk(KERN_ERR "%s: hfidd_mkdev: device_create for ai=%d fail" + " rc = %d\n", dname, ai, rc); + return rc; + } + + if (ai == MAX_HFIS) + return 0; + + p_acs->hfidd_dev = hfidd_class_dev[ai]; + return rc; +} + +/* delete the hfi device, /dev/hfi* files and sysclass files */ +static void hfidd_rmdev(int ai) +{ + device_destroy(hfidd_global.class, MKDEV(MAJOR(hfidd_dev), ai)); +} + /* Destroy the HFI class */ static inline void hfidd_destroy_class(void) { @@ -129,6 +162,8 @@ static void hfidd_destroy_devices(void) hfidd_global.p_acs[i] = NULL; hfidd_global.acs_cnt--; } + for (i = 0; i <= MAX_HFIS; i++) + hfidd_rmdev(i); } /* @@ -156,6 +191,23 @@ static int hfidd_create_devices(void) } hfidd_global.acs_cnt++; } + + for (i = 0; i <= MAX_HFIS; i++) { + rc = hfidd_mkdev(i, hfidd_global.p_acs[i]); + if (rc) { + for (j = 0; j < i; j++) + hfidd_rmdev(j); + goto hfidd_create_devices_error0; + } + } + return 0; + +hfidd_create_devices_error0: + for (i = 0; i < MAX_HFIS; i++) { + hfidd_free_adapter(hfidd_global.p_acs[i]); + hfidd_global.p_acs[i] = NULL; + hfidd_global.acs_cnt--; + } return rc; } diff --git a/include/linux/hfi/hfidd_internal.h b/include/linux/hfi/hfidd_internal.h index 2c58b56..695d7f4 100644 --- a/include/linux/hfi/hfidd_internal.h +++ b/include/linux/hfi/hfidd_internal.h @@ -54,6 +54,7 @@ struct hfidd_acs { unsigned int index; unsigned int acs_cnt; unsigned int state; + struct device *hfidd_dev; }; /* DD global */ -- 1.7.3.5 -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@...r.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Powered by blists - more mailing lists