# The backing store supporting the memories in the system has changed # in that it is now stored globally per address range. As a result the # actual storage is separate from the memory controllers themselves. def upgrader(cpt): for sec in cpt.sections(): import re # Search for a physical memory if re.search('.*sys.*\.physmem$', sec): # Add the number of stores attribute to the global physmem cpt.set(sec, 'nbr_of_stores', '1') # Get the filename and size as this is moving to the # specific backing store mem_filename = cpt.get(sec, 'filename') mem_size = cpt.get(sec, '_size') cpt.remove_option(sec, 'filename') cpt.remove_option(sec, '_size') # Get the name so that we can create the new section system_name = str(sec).split('.')[0] section_name = system_name + '.physmem.store0' cpt.add_section(section_name) cpt.set(section_name, 'store_id', '0') cpt.set(section_name, 'range_size', mem_size) cpt.set(section_name, 'filename', mem_filename) elif re.search('.*sys.*\.\w*mem$', sec): # Due to the lack of information about a start address, # this migration only works if there is a single memory in # the system, thus starting at 0 raise ValueError("more than one memory detected (" + sec + ")") legacy_version = 2