47 lines
1.2 KiB
Text
47 lines
1.2 KiB
Text
// Convert targets using the old CPUState reset to DeviceState reset
|
|
//
|
|
// Copyright Linaro Ltd 2020
|
|
// This work is licensed under the terms of the GNU GPLv2 or later.
|
|
//
|
|
// spatch --macro-file scripts/cocci-macro-file.h \
|
|
// --sp-file scripts/coccinelle/cpu-reset.cocci \
|
|
// --keep-comments --smpl-spacing --in-place --include-headers --dir target
|
|
//
|
|
// For simplicity we assume some things about the code we're modifying
|
|
// that happen to be true for all our targets:
|
|
// * all cpu_class_set_parent_reset() callsites have a 'DeviceClass *dc' local
|
|
// * the parent reset field in the target CPU class is 'parent_reset'
|
|
// * no reset function already has a 'dev' local
|
|
|
|
@@
|
|
identifier cpu, x;
|
|
typedef CPUState;
|
|
@@
|
|
struct x {
|
|
...
|
|
- void (*parent_reset)(CPUState *cpu);
|
|
+ DeviceReset parent_reset;
|
|
...
|
|
};
|
|
@ rule1 @
|
|
identifier resetfn;
|
|
expression resetfield;
|
|
identifier cc;
|
|
@@
|
|
- cpu_class_set_parent_reset(cc, resetfn, resetfield)
|
|
+ device_class_set_parent_reset(dc, resetfn, resetfield)
|
|
@@
|
|
identifier rule1.resetfn;
|
|
identifier cpu, cc;
|
|
typedef CPUState, DeviceState;
|
|
@@
|
|
-resetfn(CPUState *cpu)
|
|
-{
|
|
+resetfn(DeviceState *dev)
|
|
+{
|
|
+ CPUState *cpu = CPU(dev);
|
|
<...
|
|
- cc->parent_reset(cpu);
|
|
+ cc->parent_reset(dev);
|
|
...>
|
|
}
|