From ce42a7d3f2bbecea320f094f23103c96a018cff7 Mon Sep 17 00:00:00 2001 From: Mark Hounschell Date: Tue, 25 Mar 2014 16:38:14 -0400 Subject: [PATCH] staging: dgap: Only read config file dgap.conf once The config file is currently read for each board found. It only needs to be read one time. The buffer it is read into can now be freed immediately after it is parsed instead of at driver unload time. Signed-off-by: Mark Hounschell Signed-off-by: Greg Kroah-Hartman --- drivers/staging/dgap/dgap.c | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/drivers/staging/dgap/dgap.c b/drivers/staging/dgap/dgap.c index ea920e41dc0a7..07fcb8df6a60f 100644 --- a/drivers/staging/dgap/dgap.c +++ b/drivers/staging/dgap/dgap.c @@ -620,8 +620,6 @@ static void dgap_cleanup_module(void) class_destroy(dgap_class); unregister_chrdev(DIGI_DGAP_MAJOR, "dgap"); - kfree(dgap_config_buf); - for (i = 0; i < dgap_NumBoards; ++i) { dgap_remove_ports_sysfiles(dgap_Board[i]); dgap_tty_uninit(dgap_Board[i]); @@ -828,7 +826,7 @@ static int dgap_firmware_load(struct pci_dev *pdev, int card_type) dgap_get_vpd(brd); dgap_do_reset_board(brd); - if (fw_info[card_type].conf_name) { + if ((fw_info[card_type].conf_name) && !dgap_config_buf) { ret = request_firmware(&fw, fw_info[card_type].conf_name, &pdev->dev); if (ret) { @@ -836,20 +834,22 @@ static int dgap_firmware_load(struct pci_dev *pdev, int card_type) fw_info[card_type].conf_name); return ret; } + + dgap_config_buf = kmalloc(fw->size + 1, GFP_KERNEL); if (!dgap_config_buf) { - dgap_config_buf = kmalloc(fw->size + 1, GFP_ATOMIC); - if (!dgap_config_buf) { - release_firmware(fw); - return -ENOMEM; - } + release_firmware(fw); + return -ENOMEM; } memcpy(dgap_config_buf, fw->data, fw->size); release_firmware(fw); dgap_config_buf[fw->size + 1] = '\0'; - if (dgap_parsefile(&dgap_config_buf, TRUE) != 0) + if (dgap_parsefile(&dgap_config_buf, TRUE) != 0) { + kfree(dgap_config_buf); return -EINVAL; + } + kfree(dgap_config_buf); } ret = dgap_after_config_loaded(brd->boardnum); -- 2.39.5