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_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 @@ 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_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 } 160