2020-02-24 16:45:07 +03: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 21:23:40 +03: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 21:52:31 +03: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 21:55:35 +03: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 17:42:52 +03: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 18:05:08 +03: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);
|
|
|
|
|
|
|
|
|
- memory_region_init_ram_shared_nomigrate(E1, NULL, E2, E3, E4, E5);
|
|
|
|
+ memory_region_init_ram_shared_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_shared_nomigrate(E1, NULL, E2, E3, E4, E5);
|
|
|
|
+ memory_region_init_ram_shared_nomigrate(E1, OBJECT(dev), E2, E3, E4, E5);
|
|
|
|
)
|
|
|
|
...+>
|
|
|
|
}
|