spatch: add a few features to the Linux coccis
authorBarret Rhoden <brho@cs.berkeley.edu>
Fri, 30 Aug 2019 19:36:10 +0000 (15:36 -0400)
committerBarret Rhoden <brho@cs.berkeley.edu>
Tue, 8 Oct 2019 21:11:10 +0000 (17:11 -0400)
Notably, the lock transform was mismatched.  We'd set all locks to be
irqsave (by the init function), but the _bh locks were not irqsave.

The issue here is that _bh locks *don't* need to be irqsave, but we
don't know when we look at spinlock_init where the lock is grabbed.  At
least not easily.  So since we say all locks are irqsave, we need to be
consistent.

Another option would be to keep them as spin_lock_bh and #define it, so
we keep the info that it is a bh lock.  Or if we really care about a
slightly lower lock in a Linux driver, we just look at the changelog.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
scripts/spatch/linux/funcs.cocci
scripts/spatch/linux/memory.cocci
scripts/spatch/linux/scalar.cocci

index 01802f6..69e0d80 100644 (file)
@@ -92,13 +92,13 @@ expression E;
 expression E;
 @@
 -spin_lock_bh(E)
-+spin_lock(E)
++spin_lock_irqsave(E)
 
 @@
 expression E;
 @@
 -spin_unlock_bh(E)
-+spin_unlock(E)
++spin_unlock_irqsave(E)
 @@
 
 expression E;
@@ -349,3 +349,15 @@ expression P;
 @@
 -pci_clear_master(P)
 +pci_clr_bus_master(P)
+
+@@
+expression X;
+@@
+-upper_32_bits(X)
++high32(X)
+
+@@
+expression X;
+@@
+-lower_32_bits(X)
++low32(X)
index 19d573e..591b627 100644 (file)
@@ -1,7 +1,7 @@
 @@
 @@
 -GFP_ATOMIC
-+0
++MEM_ATOMIC
 
 @@
 @@
 +MEM_WAIT
 
 @@
+@@
+-GFP_NOWAIT
++MEM_ATOMIC
+
+@@
 expression SZ;
 expression FL;
 @@
@@ -55,6 +60,18 @@ expression ORDER;
 +kva2page(get_cont_pages(ORDER, FLAGS))
 
 @@
+expression ADDR;
+@@
+-__free_page(ADDR)
++kpages_free(page2kva(ADDR), PGSIZE)
+
+@@
+expression FLAGS;
+@@
+-alloc_page(FLAGS)
++kva2page(kpages_alloc(PGSIZE, FLAGS))
+
+@@
 expression FLAGS;
 @@
 -__get_free_page(FLAGS)
index 7df8941..9a7486a 100644 (file)
@@ -153,6 +153,18 @@ struct pci_device *p;
 +p->linux_dev
 
 @@
+struct pci_device *p;
+@@
+-p->device
++p->dev_id
+
+@@
+struct pci_device *p;
+@@
+-p->vendor
++p->ven_id
+
+@@
 struct ether *p;
 @@
 -p->features