qemu

FORK: QEMU emulator
git clone https://git.neptards.moe/neptards/qemu.git
Log | Files | Refs | Submodules | LICENSE

memory-region-housekeeping.cocci (4009B)


      1 /*
      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 
     14 // Replace memory_region_init_ram(readonly) by memory_region_init_rom()
     15 @@
     16 expression E1, E2, E3, E4, E5;
     17 symbol 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 
     32 @possible_memory_region_init_rom@
     33 expression E1, E2, E3, E4, E5;
     34 position 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@
     46 p << possible_memory_region_init_rom.p;
     47 @@
     48 cocci.print_main("potential use of memory_region_init_rom*() in ", p)
     49 
     50 
     51 // Do not call memory_region_set_readonly() on ROM alias
     52 @@
     53 expression ROM, E1, E2, E3, E4;
     54 expression 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 
     66 // 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 @@
     73 expression MR;
     74 expression NAME;
     75 expression SIZE;
     76 expression 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 @@
     83 expression MR;
     84 expression NAME;
     85 expression SIZE;
     86 expression 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 @@
     93 expression MR;
     94 expression OPS;
     95 expression OPAQUE;
     96 expression NAME;
     97 expression SIZE;
     98 expression 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);
    104 
    105 
    106 // Device is owner
    107 @@
    108 typedef DeviceState;
    109 identifier device_fn, dev, obj;
    110 expression E1, E2, E3, E4, E5;
    111 @@
    112 static 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_flags_nomigrate(E1, NULL, E2, E3, E4, E5);
    131 + memory_region_init_ram_flags_nomigrate(E1, obj, E2, E3, E4, E5);
    132 )
    133   ...+>
    134 }
    135 @@
    136 identifier device_fn, dev;
    137 expression E1, E2, E3, E4, E5;
    138 @@
    139 static 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_flags_nomigrate(E1, NULL, E2, E3, E4, E5);
    156 + memory_region_init_ram_flags_nomigrate(E1, OBJECT(dev), E2, E3, E4, E5);
    157 )
    158   ...+>
    159 }