summaryrefslogtreecommitdiff
path: root/patches/0079-netdev-destructor.cocci
blob: fab8af192aac7564b36b005527a974b36e03949e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
@r1@
struct net_device *NDEV;
identifier D, C;
identifier TRUE =~ "true";
@@
C(...)
{
	<...
-	NDEV->needs_free_netdev = TRUE;
-	NDEV->priv_destructor = D;
+	netdev_set_priv_destructor(NDEV, D);
	...>
}

@r2 depends on r1@
identifier r1.D, r1.C;
fresh identifier E = "__" ## D;
@@

+#if LINUX_VERSION_IS_LESS(4,13,0)
+static void E(struct net_device *ndev)
+{
+	D(ndev);
+	free_netdev(ndev);
+}
+#endif
+
C(...)
{
	...
}

@r3 depends on r1@
type T;
identifier NDEV;
identifier r1.D;
T RET;
@@

RET = \(register_netdevice\|register_ndev\)(NDEV);
if (<+... RET ...+>) {
	<...
+#if LINUX_VERSION_IS_LESS(4,13,0)
+	D(NDEV);
+#endif
	free_netdev(NDEV);
	...>
}

@r4 depends on r1@
identifier NDEV;
identifier r1.D;
type T;
T RET;
@@

if (...)
	RET = register_netdevice(NDEV);
else
	RET = register_netdev(NDEV);
if (<+... RET ...+>) {
	<...
+#if LINUX_VERSION_IS_LESS(4,13,0)
+	D(NDEV);
+#endif
	free_netdev(NDEV);
	...>
}

@r5@
struct net_device *NDEV;
identifier TRUE =~ "true";
@@

-NDEV->needs_free_netdev = TRUE;
+netdev_set_priv_destructor(NDEV, free_netdev);

@r6@
struct net_device *NDEV;
identifier D;
@@

-NDEV->priv_destructor = D;
+netdev_set_priv_destructor(NDEV, D);