blob: c768d8140abdc450574fe060c926d0c279404987 [file] [log] [blame]
Philippe Mathieu-Daudé044e2af2020-02-24 14:45:07 +01001/*
2 Usage:
3
4 spatch \
5 --macro-file scripts/cocci-macro-file.h \
6 --sp-file scripts/coccinelle/memory-region-housekeeping.cocci \
7 --keep-comments \
8 --in-place \
9 --dir .
10
11*/
12
13
Philippe Mathieu-Daudéd3ec6842020-02-24 19:23:40 +010014// Replace memory_region_init_ram(readonly) by memory_region_init_rom()
15@@
16expression E1, E2, E3, E4, E5;
17symbol true;
18@@
19(
20- memory_region_init_ram(E1, E2, E3, E4, E5);
21+ memory_region_init_rom(E1, E2, E3, E4, E5);
22 ... WHEN != E1
23- memory_region_set_readonly(E1, true);
24|
25- memory_region_init_ram_nomigrate(E1, E2, E3, E4, E5);
26+ memory_region_init_rom_nomigrate(E1, E2, E3, E4, E5);
27 ... WHEN != E1
28- memory_region_set_readonly(E1, true);
29)
30
31
Philippe Mathieu-Daudécf949cb2020-02-24 19:52:31 +010032@possible_memory_region_init_rom@
33expression E1, E2, E3, E4, E5;
34position p;
35@@
36(
37 memory_region_init_ram@p(E1, E2, E3, E4, E5);
38 ...
39 memory_region_set_readonly(E1, true);
40|
41 memory_region_init_ram_nomigrate@p(E1, E2, E3, E4, E5);
42 ...
43 memory_region_set_readonly(E1, true);
44)
45@script:python@
46p << possible_memory_region_init_rom.p;
47@@
48cocci.print_main("potential use of memory_region_init_rom*() in ", p)
49
50
Philippe Mathieu-Daudébb2f4e82020-02-24 19:55:35 +010051// Do not call memory_region_set_readonly() on ROM alias
52@@
53expression ROM, E1, E2, E3, E4;
54expression ALIAS, E5, E6, E7, E8;
55@@
56(
57 memory_region_init_rom(ROM, E1, E2, E3, E4);
58|
59 memory_region_init_rom_nomigrate(ROM, E1, E2, E3, E4);
60)
61 ...
62 memory_region_init_alias(ALIAS, E5, E6, ROM, E7, E8);
63- memory_region_set_readonly(ALIAS, true);
64
65
Peter Maydell96d851a2017-07-07 15:42:52 +010066// Replace by-hand memory_region_init_ram_nomigrate/vmstate_register_ram
67// code sequences with use of the new memory_region_init_ram function.
68// Similarly for the _rom and _rom_device functions.
69// We don't try to replace sequences with a non-NULL owner, because
70// there are none in the tree that can be automatically converted
71// (and only a handful that can be manually converted).
72@@
73expression MR;
74expression NAME;
75expression SIZE;
76expression ERRP;
77@@
78-memory_region_init_ram_nomigrate(MR, NULL, NAME, SIZE, ERRP);
79+memory_region_init_ram(MR, NULL, NAME, SIZE, ERRP);
80 ...
81-vmstate_register_ram_global(MR);
82@@
83expression MR;
84expression NAME;
85expression SIZE;
86expression ERRP;
87@@
88-memory_region_init_rom_nomigrate(MR, NULL, NAME, SIZE, ERRP);
89+memory_region_init_rom(MR, NULL, NAME, SIZE, ERRP);
90 ...
91-vmstate_register_ram_global(MR);
92@@
93expression MR;
94expression OPS;
95expression OPAQUE;
96expression NAME;
97expression SIZE;
98expression ERRP;
99@@
100-memory_region_init_rom_device_nomigrate(MR, NULL, OPS, OPAQUE, NAME, SIZE, ERRP);
101+memory_region_init_rom_device(MR, NULL, OPS, OPAQUE, NAME, SIZE, ERRP);
102 ...
103-vmstate_register_ram_global(MR);
Philippe Mathieu-Daudé84969112020-02-21 16:05:08 +0100104
105
106// Device is owner
107@@
108typedef DeviceState;
109identifier device_fn, dev, obj;
110expression E1, E2, E3, E4, E5;
111@@
112static void device_fn(DeviceState *dev, ...)
113{
114 ...
115 Object *obj = OBJECT(dev);
116 <+...
117(
118- memory_region_init(E1, NULL, E2, E3);
119+ memory_region_init(E1, obj, E2, E3);
120|
121- memory_region_init_io(E1, NULL, E2, E3, E4, E5);
122+ memory_region_init_io(E1, obj, E2, E3, E4, E5);
123|
124- memory_region_init_alias(E1, NULL, E2, E3, E4, E5);
125+ memory_region_init_alias(E1, obj, E2, E3, E4, E5);
126|
127- memory_region_init_rom(E1, NULL, E2, E3, E4);
128+ memory_region_init_rom(E1, obj, E2, E3, E4);
129|
130- memory_region_init_ram_shared_nomigrate(E1, NULL, E2, E3, E4, E5);
131+ memory_region_init_ram_shared_nomigrate(E1, obj, E2, E3, E4, E5);
132)
133 ...+>
134}
135@@
136identifier device_fn, dev;
137expression E1, E2, E3, E4, E5;
138@@
139static void device_fn(DeviceState *dev, ...)
140{
141 <+...
142(
143- memory_region_init(E1, NULL, E2, E3);
144+ memory_region_init(E1, OBJECT(dev), E2, E3);
145|
146- memory_region_init_io(E1, NULL, E2, E3, E4, E5);
147+ memory_region_init_io(E1, OBJECT(dev), E2, E3, E4, E5);
148|
149- memory_region_init_alias(E1, NULL, E2, E3, E4, E5);
150+ memory_region_init_alias(E1, OBJECT(dev), E2, E3, E4, E5);
151|
152- memory_region_init_rom(E1, NULL, E2, E3, E4);
153+ memory_region_init_rom(E1, OBJECT(dev), E2, E3, E4);
154|
155- memory_region_init_ram_shared_nomigrate(E1, NULL, E2, E3, E4, E5);
156+ memory_region_init_ram_shared_nomigrate(E1, OBJECT(dev), E2, E3, E4, E5);
157)
158 ...+>
159}