| 
									
										
										
										
											2020-02-24 14:45:07 +01:00
										 |  |  | /* | 
					
						
							|  |  |  |   Usage: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     spatch \ | 
					
						
							|  |  |  |         --macro-file scripts/cocci-macro-file.h \ | 
					
						
							|  |  |  |         --sp-file scripts/coccinelle/memory-region-housekeeping.cocci \ | 
					
						
							|  |  |  |         --keep-comments \ | 
					
						
							|  |  |  |         --in-place \ | 
					
						
							|  |  |  |         --dir . | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-02-24 19:23:40 +01:00
										 |  |  | // Replace memory_region_init_ram(readonly) by memory_region_init_rom() | 
					
						
							|  |  |  | @@ | 
					
						
							|  |  |  | expression E1, E2, E3, E4, E5; | 
					
						
							|  |  |  | symbol true; | 
					
						
							|  |  |  | @@ | 
					
						
							|  |  |  | ( | 
					
						
							|  |  |  | - memory_region_init_ram(E1, E2, E3, E4, E5); | 
					
						
							|  |  |  | + memory_region_init_rom(E1, E2, E3, E4, E5); | 
					
						
							|  |  |  |   ... WHEN != E1 | 
					
						
							|  |  |  | - memory_region_set_readonly(E1, true); | 
					
						
							|  |  |  | | | 
					
						
							|  |  |  | - memory_region_init_ram_nomigrate(E1, E2, E3, E4, E5); | 
					
						
							|  |  |  | + memory_region_init_rom_nomigrate(E1, E2, E3, E4, E5); | 
					
						
							|  |  |  |   ... WHEN != E1 | 
					
						
							|  |  |  | - memory_region_set_readonly(E1, true); | 
					
						
							|  |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-02-24 19:52:31 +01:00
										 |  |  | @possible_memory_region_init_rom@ | 
					
						
							|  |  |  | expression E1, E2, E3, E4, E5; | 
					
						
							|  |  |  | position p; | 
					
						
							|  |  |  | @@ | 
					
						
							|  |  |  | ( | 
					
						
							|  |  |  |   memory_region_init_ram@p(E1, E2, E3, E4, E5); | 
					
						
							|  |  |  |   ... | 
					
						
							|  |  |  |   memory_region_set_readonly(E1, true); | 
					
						
							|  |  |  | | | 
					
						
							|  |  |  |   memory_region_init_ram_nomigrate@p(E1, E2, E3, E4, E5); | 
					
						
							|  |  |  |   ... | 
					
						
							|  |  |  |   memory_region_set_readonly(E1, true); | 
					
						
							|  |  |  | ) | 
					
						
							|  |  |  | @script:python@ | 
					
						
							|  |  |  | p << possible_memory_region_init_rom.p; | 
					
						
							|  |  |  | @@ | 
					
						
							|  |  |  | cocci.print_main("potential use of memory_region_init_rom*() in ", p) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-02-24 19:55:35 +01:00
										 |  |  | // Do not call memory_region_set_readonly() on ROM alias | 
					
						
							|  |  |  | @@ | 
					
						
							|  |  |  | expression ROM, E1, E2, E3, E4; | 
					
						
							|  |  |  | expression ALIAS, E5, E6, E7, E8; | 
					
						
							|  |  |  | @@ | 
					
						
							|  |  |  | ( | 
					
						
							|  |  |  |   memory_region_init_rom(ROM, E1, E2, E3, E4); | 
					
						
							|  |  |  | | | 
					
						
							|  |  |  |   memory_region_init_rom_nomigrate(ROM, E1, E2, E3, E4); | 
					
						
							|  |  |  | ) | 
					
						
							|  |  |  |   ... | 
					
						
							|  |  |  |    memory_region_init_alias(ALIAS, E5, E6, ROM, E7, E8); | 
					
						
							|  |  |  | -  memory_region_set_readonly(ALIAS, true); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-07-07 15:42:52 +01:00
										 |  |  | // Replace by-hand memory_region_init_ram_nomigrate/vmstate_register_ram | 
					
						
							|  |  |  | // code sequences with use of the new memory_region_init_ram function. | 
					
						
							|  |  |  | // Similarly for the _rom and _rom_device functions. | 
					
						
							|  |  |  | // We don't try to replace sequences with a non-NULL owner, because | 
					
						
							|  |  |  | // there are none in the tree that can be automatically converted | 
					
						
							|  |  |  | // (and only a handful that can be manually converted). | 
					
						
							|  |  |  | @@ | 
					
						
							|  |  |  | expression MR; | 
					
						
							|  |  |  | expression NAME; | 
					
						
							|  |  |  | expression SIZE; | 
					
						
							|  |  |  | expression ERRP; | 
					
						
							|  |  |  | @@ | 
					
						
							|  |  |  | -memory_region_init_ram_nomigrate(MR, NULL, NAME, SIZE, ERRP); | 
					
						
							|  |  |  | +memory_region_init_ram(MR, NULL, NAME, SIZE, ERRP); | 
					
						
							|  |  |  |  ... | 
					
						
							|  |  |  | -vmstate_register_ram_global(MR); | 
					
						
							|  |  |  | @@ | 
					
						
							|  |  |  | expression MR; | 
					
						
							|  |  |  | expression NAME; | 
					
						
							|  |  |  | expression SIZE; | 
					
						
							|  |  |  | expression ERRP; | 
					
						
							|  |  |  | @@ | 
					
						
							|  |  |  | -memory_region_init_rom_nomigrate(MR, NULL, NAME, SIZE, ERRP); | 
					
						
							|  |  |  | +memory_region_init_rom(MR, NULL, NAME, SIZE, ERRP); | 
					
						
							|  |  |  |  ... | 
					
						
							|  |  |  | -vmstate_register_ram_global(MR); | 
					
						
							|  |  |  | @@ | 
					
						
							|  |  |  | expression MR; | 
					
						
							|  |  |  | expression OPS; | 
					
						
							|  |  |  | expression OPAQUE; | 
					
						
							|  |  |  | expression NAME; | 
					
						
							|  |  |  | expression SIZE; | 
					
						
							|  |  |  | expression ERRP; | 
					
						
							|  |  |  | @@ | 
					
						
							|  |  |  | -memory_region_init_rom_device_nomigrate(MR, NULL, OPS, OPAQUE, NAME, SIZE, ERRP); | 
					
						
							|  |  |  | +memory_region_init_rom_device(MR, NULL, OPS, OPAQUE, NAME, SIZE, ERRP); | 
					
						
							|  |  |  |  ... | 
					
						
							|  |  |  | -vmstate_register_ram_global(MR); | 
					
						
							| 
									
										
										
										
											2020-02-21 16:05:08 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Device is owner | 
					
						
							|  |  |  | @@ | 
					
						
							|  |  |  | typedef DeviceState; | 
					
						
							|  |  |  | identifier device_fn, dev, obj; | 
					
						
							|  |  |  | expression E1, E2, E3, E4, E5; | 
					
						
							|  |  |  | @@ | 
					
						
							|  |  |  | static void device_fn(DeviceState *dev, ...) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |   ... | 
					
						
							|  |  |  |   Object *obj = OBJECT(dev); | 
					
						
							|  |  |  |   <+... | 
					
						
							|  |  |  | ( | 
					
						
							|  |  |  | - memory_region_init(E1, NULL, E2, E3); | 
					
						
							|  |  |  | + memory_region_init(E1, obj, E2, E3); | 
					
						
							|  |  |  | | | 
					
						
							|  |  |  | - memory_region_init_io(E1, NULL, E2, E3, E4, E5); | 
					
						
							|  |  |  | + memory_region_init_io(E1, obj, E2, E3, E4, E5); | 
					
						
							|  |  |  | | | 
					
						
							|  |  |  | - memory_region_init_alias(E1, NULL, E2, E3, E4, E5); | 
					
						
							|  |  |  | + memory_region_init_alias(E1, obj, E2, E3, E4, E5); | 
					
						
							|  |  |  | | | 
					
						
							|  |  |  | - memory_region_init_rom(E1, NULL, E2, E3, E4); | 
					
						
							|  |  |  | + memory_region_init_rom(E1, obj, E2, E3, E4); | 
					
						
							|  |  |  | | | 
					
						
							| 
									
										
										
										
											2021-05-10 13:43:18 +02:00
										 |  |  | - memory_region_init_ram_flags_nomigrate(E1, NULL, E2, E3, E4, E5); | 
					
						
							|  |  |  | + memory_region_init_ram_flags_nomigrate(E1, obj, E2, E3, E4, E5); | 
					
						
							| 
									
										
										
										
											2020-02-21 16:05:08 +01:00
										 |  |  | ) | 
					
						
							|  |  |  |   ...+> | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | @@ | 
					
						
							|  |  |  | identifier device_fn, dev; | 
					
						
							|  |  |  | expression E1, E2, E3, E4, E5; | 
					
						
							|  |  |  | @@ | 
					
						
							|  |  |  | static void device_fn(DeviceState *dev, ...) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |   <+... | 
					
						
							|  |  |  | ( | 
					
						
							|  |  |  | - memory_region_init(E1, NULL, E2, E3); | 
					
						
							|  |  |  | + memory_region_init(E1, OBJECT(dev), E2, E3); | 
					
						
							|  |  |  | | | 
					
						
							|  |  |  | - memory_region_init_io(E1, NULL, E2, E3, E4, E5); | 
					
						
							|  |  |  | + memory_region_init_io(E1, OBJECT(dev), E2, E3, E4, E5); | 
					
						
							|  |  |  | | | 
					
						
							|  |  |  | - memory_region_init_alias(E1, NULL, E2, E3, E4, E5); | 
					
						
							|  |  |  | + memory_region_init_alias(E1, OBJECT(dev), E2, E3, E4, E5); | 
					
						
							|  |  |  | | | 
					
						
							|  |  |  | - memory_region_init_rom(E1, NULL, E2, E3, E4); | 
					
						
							|  |  |  | + memory_region_init_rom(E1, OBJECT(dev), E2, E3, E4); | 
					
						
							|  |  |  | | | 
					
						
							| 
									
										
										
										
											2021-05-10 13:43:18 +02:00
										 |  |  | - memory_region_init_ram_flags_nomigrate(E1, NULL, E2, E3, E4, E5); | 
					
						
							|  |  |  | + memory_region_init_ram_flags_nomigrate(E1, OBJECT(dev), E2, E3, E4, E5); | 
					
						
							| 
									
										
										
										
											2020-02-21 16:05:08 +01:00
										 |  |  | ) | 
					
						
							|  |  |  |   ...+> | 
					
						
							|  |  |  | } |