+ module = string.strip(line)
+ if module in blacklist :
+ log.write("Skipping unload of kernel module '{}'.\n".format(module))
+ elif module != "":
+ log.write("Unloading {}\n".format(module))
+ utils.sysexec_noerr("modprobe -r {}".format(module), log)
+ if "e1000" in module:
+ log.write("Unloading e1000 driver; sleeping 4 seconds...\n")
+ time.sleep(4)
+
+ modules.close()
+ except IOError:
+ log.write("Couldn't read /tmp/loadedmodules, continuing.\n")
+
+ try:
+ modules = file("/proc/modules", "r")
+
+ # Get usage count for USB
+ usb_usage = 0
+ for line in modules:
+ try:
+ # Module Size UsageCount UsedBy State LoadAddress
+ parts = string.split(line)
+
+ if parts[0] == "usb_storage":
+ usb_usage += int(parts[2])
+ except IndexError as e:
+ log.write("Couldn't parse /proc/modules, continuing.\n")
+
+ modules.seek(0)
+
+ for line in modules:
+ try:
+ # Module Size UsageCount UsedBy State LoadAddress
+ parts = string.split(line)
+
+ # While we would like to remove all "unused" modules,
+ # you can't trust usage count, especially for things
+ # like network drivers or RAID array drivers. Just try
+ # and unload a few specific modules that we know cause
+ # problems during chain boot, such as USB host
+ # controller drivers (HCDs) (PL6577).
+ # if int(parts[2]) == 0:
+ if False and re.search('_hcd$', parts[0]):
+ if usb_usage > 0:
+ log.write("NOT unloading {} since USB may be in use\n".format(parts[0]))
+ else:
+ log.write("Unloading {}\n".format(parts[0]))
+ utils.sysexec_noerr("modprobe -r {}".format(parts[0]), log)
+ except IndexError as e:
+ log.write("Couldn't parse /proc/modules, continuing.\n")
+ except IOError:
+ log.write("Couldn't read /proc/modules, continuing.\n")
+
+
+ kargs = "root={} ramdisk_size=8192".format(PARTITIONS["mapper-root"])
+ if NODE_MODEL_OPTIONS & ModelOptions.SMP:
+ kargs = kargs + " " + "acpi=off"
+ try:
+ kargsfb = open("/kargs.txt","r")
+ moreargs = kargsfb.readline()
+ kargsfb.close()
+ moreargs = moreargs.strip()
+ log.write('Parsed in "{}" kexec args from /kargs.txt\n'.format(moreargs))
+ kargs = kargs + " " + moreargs