3.10.0-123.el7.x86 64 - System hangs during rmmod
SYSTEM: Linux version 3.10.0-123.el7.x86_64.debug-PC
Overview: Our driver supports configuration, management, and user level access to/from up to 6 32bit pci-comunications cards. We have made the necessary changes to our originally 2.6.X based kernel module to allow it to be loaded(insmod) and perform properly under 3.10.0-123.el7.
Problem: The 3.10.0-123.el7 system hangs when we attempt to remove the driver(rmmod).
I've included our "module_exit" (included below) with embedded printk's. When "rmmod iphwae" is executed the following output is seen, then the system hangs:
Mar 19 14:16:19 lab-247 kernel:
iphwae: Entering iph_module_cleanup...
Mar 19 14:16:19 lab-247 kernel:
iphwae: Entering pci_unregister_driver()...
Mar 19 14:16:19 lab-247 kernel:
iphwae: Exiting pci_unregister_driver()...
Mar 19 14:16:19 lab-247 kernel:
iphwae: Entering unregister_chrdev()...
Mar 19 14:16:19 lab-247 kernel:
iphwae: Exiting unregister_chrdev()...
Mar 19 14:16:19 lab-247 kernel:
iphwae: Entering remove_proc_entry()...
Mar 19 14:16:19 lab-247 kernel:
iphwae: Exiting remove_proc_entry()...
Mar 19 14:16:19 lab-247 kernel:
iphwae: Entering cleanup trace buffer and MUTEX...
Mar 19 14:16:19 lab-247 kernel:
iphwae: Exiting cleanup trace buffer and MUTEX...
Mar 19 14:16:19 lab-247 kernel:
iphwae: Exiting iph_module_cleanup()...
The printk's show that the kernal modules exit routine is completed successfully...
Any help with this problem would be GREATLY APPRECIATED
static void iph_module_cleanup(void)
{
int iError = 0;
void *pTraceHead;
printk("\niphwae: Entering iph_module_cleanup...\n");//(DAW)
msleep(5);//(DAW)
printk("\niphwae: Entering pci_unregister_driver()...\n");//(DAW)
msleep(5);//(DAW)
/* Deregister the driver from the pci module list */
pci_unregister_driver(&gIphwanDriver);
printk("\niphwae: Exiting pci_unregister_driver()...\n");//(DAW)
msleep(5);//(DAW)
/* Remove entry points and characteristics from the char module list */
#if LINUX_VERSION_CODE <= KERNEL_VERSION(2,6,18)<br />
iError = unregister_chrdev(giMajor, DRIVER_NAME);
#else
printk("\niphwae: Entering unregister_chrdev()...\n");//(DAW)
msleep(5);//(DAW)
unregister_chrdev(giMajor, DRIVER_NAME);
printk("\niphwae: Exiting unregister_chrdev()...\n");//(DAW)
msleep(5);//(DAW)
#endif
printk("\niphwae: Entering remove_proc_entry()...\n");//(DAW)
msleep(5);//(DAW)
/* remove the /proc/iphxxx file */
remove_proc_entry(DRIVER_NAME, 0);
printk("\niphwae: Exiting remove_proc_entry()...\n");//(DAW)
msleep(5);//(DAW)
if (iError == 0)
{
printk("\niphwae: Entering cleanup trace buffer and MUTEX...\n");//(DAW)
msleep(5);//(DAW)
/* if the trace are active, we must destroy the mutex and release */
/* the trace buffer */
if (iph_gpucTrace != (byte *)0)
{
MUTEX_DESTROY(&iph_gTraceMutex);
pTraceHead = (void *)iph_gpucTrace;
iph_gpucTrace = NULL;
TMP_FREE(pTraceHead);
}
printk("\niphwae: Exiting cleanup trace buffer and MUTEX...\n");//(DAW)
msleep(5);//(DAW)
}
else
{
printk("\niphwae: failed to unregister the char device...\n");//(DAW)
msleep(5);//(DAW)
iph_TRACEK(TRCLVL_0, "[cleanup_module]: failed to unregister the char device");
}
printk("\niphwae: Exiting iph_module_cleanup()...\n");//(DAW)
msleep(5);//(DAW)
}
/*
* These two macros below are used to declare the two entry point of
* the driver. All loadable module must use theirs.
*/
module_init(iph_module_init);
module_exit(iph_module_cleanup);
Categories
- 10.1K All Categories
- 35 LFX Mentorship
- 88 LFX Mentorship: Linux Kernel
- 504 Linux Foundation Boot Camps
- 279 Cloud Engineer Boot Camp
- 103 Advanced Cloud Engineer Boot Camp
- 48 DevOps Engineer Boot Camp
- 41 Cloud Native Developer Boot Camp
- 2 Express Training Courses
- 2 Express Courses - Discussion Forum
- 1.8K Training Courses
- 17 LFC110 Class Forum
- 5 LFC131 Class Forum
- 19 LFD102 Class Forum
- 148 LFD103 Class Forum
- 13 LFD121 Class Forum
- 61 LFD201 Class Forum
- LFD210 Class Forum
- 1 LFD213 Class Forum - Discontinued
- 128 LFD232 Class Forum
- 23 LFD254 Class Forum
- 569 LFD259 Class Forum
- 100 LFD272 Class Forum
- 1 LFD272-JP クラス フォーラム
- 1 LFS145 Class Forum
- 23 LFS200 Class Forum
- 739 LFS201 Class Forum
- 1 LFS201-JP クラス フォーラム
- 1 LFS203 Class Forum
- 45 LFS207 Class Forum
- 298 LFS211 Class Forum
- 53 LFS216 Class Forum
- 46 LFS241 Class Forum
- 41 LFS242 Class Forum
- 37 LFS243 Class Forum
- 10 LFS244 Class Forum
- 27 LFS250 Class Forum
- 1 LFS250-JP クラス フォーラム
- 131 LFS253 Class Forum
- 997 LFS258 Class Forum
- 10 LFS258-JP クラス フォーラム
- 87 LFS260 Class Forum
- 126 LFS261 Class Forum
- 31 LFS262 Class Forum
- 79 LFS263 Class Forum
- 15 LFS264 Class Forum
- 10 LFS266 Class Forum
- 17 LFS267 Class Forum
- 17 LFS268 Class Forum
- 21 LFS269 Class Forum
- 200 LFS272 Class Forum
- 1 LFS272-JP クラス フォーラム
- 212 LFW211 Class Forum
- 154 LFW212 Class Forum
- 899 Hardware
- 217 Drivers
- 74 I/O Devices
- 44 Monitors
- 115 Multimedia
- 208 Networking
- 101 Printers & Scanners
- 85 Storage
- 749 Linux Distributions
- 88 Debian
- 64 Fedora
- 14 Linux Mint
- 13 Mageia
- 24 openSUSE
- 133 Red Hat Enterprise
- 33 Slackware
- 13 SUSE Enterprise
- 355 Ubuntu
- 473 Linux System Administration
- 38 Cloud Computing
- 69 Command Line/Scripting
- Github systems admin projects
- 94 Linux Security
- 77 Network Management
- 108 System Management
- 49 Web Management
- 63 Mobile Computing
- 22 Android
- 27 Development
- 1.2K New to Linux
- 1.1K Getting Started with Linux
- 528 Off Topic
- 127 Introductions
- 213 Small Talk
- 20 Study Material
- 794 Programming and Development
- 262 Kernel Development
- 498 Software Development
- 923 Software
- 258 Applications
- 182 Command Line
- 2 Compiling/Installing
- 76 Games
- 316 Installation
- 53 All In Program
- 53 All In Forum
Upcoming Training
-
August 20, 2018
Kubernetes Administration (LFS458)
-
August 20, 2018
Linux System Administration (LFS301)
-
August 27, 2018
Open Source Virtualization (LFS462)
-
August 27, 2018
Linux Kernel Debugging and Security (LFD440)