| /* |
| Usage: |
| |
| spatch \ |
| --macro-file scripts/cocci-macro-file.h \ |
| --sp-file scripts/coccinelle/memory-region-housekeeping.cocci \ |
| --keep-comments \ |
| --in-place \ |
| --dir . |
| |
| */ |
| |
| |
| // 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); |
| ) |
| |
| |
| @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) |
| |
| |
| // 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); |
| |
| |
| // 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); |
| |
| |
| // 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); |
| | |
| - memory_region_init_ram_flags_nomigrate(E1, NULL, E2, E3, E4, E5); |
| + memory_region_init_ram_flags_nomigrate(E1, obj, E2, E3, E4, E5); |
| ) |
| ...+> |
| } |
| @@ |
| 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); |
| | |
| - 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); |
| ) |
| ...+> |
| } |