diff --git a/kern/include/linux/compat_todo.h b/kern/include/linux/compat_todo.h
index 096293d..32836ca 100644
--- a/kern/include/linux/compat_todo.h
+++ b/kern/include/linux/compat_todo.h
@@ -241,6 +241,13 @@
 	// XXX t->state = 2
 }
 
+static inline void tasklet_kill(struct tasklet_struct *t)
+{
+	/* This is some hokey shit.  The one user of this is trying to kill it
+	 * after it already ran too.  This is more of a 'disable' in Linux. */
+	atomic_cas_u32(&t->state, 1, 0);
+}
+
 static inline void tasklet_init(struct tasklet_struct *t,
 				void (*func)(unsigned long), unsigned long data)
 {
@@ -305,6 +312,13 @@
 	return round_jiffies(j);
 }
 
+static inline unsigned long msecs_to_jiffies(const unsigned int m)
+{
+	return m;
+}
+
+#define time_after_eq(a, b) ((b) <= (a))
+
 struct timer_list {
 	spinlock_t lock;
 	bool scheduled;
@@ -641,13 +655,14 @@
 
 struct dma_pool *dma_pool_create(const char *name, void *dev,
 				 size_t size, size_t align, size_t allocation);
-
 void dma_pool_destroy(struct dma_pool *pool);
-
 void *dma_pool_alloc(struct dma_pool *pool, int mem_flags, dma_addr_t *handle);
-
+void *dma_pool_zalloc(struct dma_pool *pool, int mem_flags, dma_addr_t *handle);
 void dma_pool_free(struct dma_pool *pool, void *vaddr, dma_addr_t addr);
 
+/* This leaks memory, but we don't do driver detach yet. */
+#define dmam_pool_create dma_pool_create
+
 #define pci_pool dma_pool
 #define pci_pool_create(name, pdev, size, align, allocation) \
 		dma_pool_create(name, pdev, size, align, allocation)
@@ -736,6 +751,7 @@
 #define vmalloc_node(...) (0 /* XXX */)
 /* needed by icm.c: */
 #define kmalloc_node(size, flags, node) kmalloc(size, flags)
+/* MLX4 icm.c calls this, it fails, and tries something else */
 #define alloc_pages_node(nid, gfp_mask, order) 0
 
 struct scatterlist {
@@ -1069,6 +1085,7 @@
 #define for_each_online_cpu(x) for_each_core(x)
 
 #define alloc_percpu_gfp(x, f) percpu_alloc(x, f)
+#define alloc_percpu(x) percpu_alloc(x, MEM_WAIT)
 #define free_percpu(x) percpu_free(x)
 
 #define __this_cpu_read(x) PERCPU_VAR(x)
diff --git a/kern/include/linux_compat.h b/kern/include/linux_compat.h
index c645057..37af5f9 100644
--- a/kern/include/linux_compat.h
+++ b/kern/include/linux_compat.h
@@ -37,6 +37,14 @@
 //#define CONFIG_INET 1 	// will deal with this manually
 #define CONFIG_PCI_MSI 1
 
+#define IS_ENABLED(x) defined(x)
+
+struct module;
+#define __module_get(x)
+#define module_put(x)
+#define try_module_get(x) true
+#define	kref_get(p)	kref_get(p, 1)
+
 static inline void synchronize_sched(void)
 {
 	synchronize_rcu();
@@ -160,6 +168,11 @@
 #define dma_mapping_error(dev, handle)                                         \
 	__dma_mapping_error(handle)
 
+static inline void *devm_kzalloc(struct device *dev, size_t amt, int flags)
+{
+	return kzmalloc(amt, flags);
+}
+
 static void *vmalloc(size_t size)
 {
 	void *vaddr = get_cont_pages(LOG2_UP(nr_pages(size)), MEM_WAIT);
@@ -176,6 +189,16 @@
 	free_cont_pages(vaddr, LOG2_UP(nr_pages(size)));
 }
 
+/* Linux's helper, adapted to Akaros.  Any usage of __flags is likely wrong. */
+#define KMEM_CACHE(__struct, __flags)					\
+({									\
+	static_assert(__flags == 0);					\
+	kmem_cache_create(#__struct, sizeof(struct __struct),		\
+			  __alignof__(struct __struct), 0, NULL, NULL,	\
+			  NULL, NULL);					\
+})
+
+
 typedef int pci_power_t;
 typedef int pm_message_t;
 
@@ -267,6 +290,18 @@
 #define dev_alert(dev, fmt, ...) \
 	printk("[dev]: " fmt, ##__VA_ARGS__)
 
+/* Turn it on per-file with #define DEV_DBG */
+#ifdef DEV_DBG
+	#define dev_dbg(dev, fmt, ...) \
+		printk("[dev]: " fmt, ##__VA_ARGS__)
+#else
+	#define dev_dbg(dev, fmt, ...)
+#endif
+
+#define dev_dbg_ratelimited dev_dbg
+#define dev_WARN(dev, fmt, ...) \
+	warn("[dev]: " fmt, ##__VA_ARGS__)
+
 #ifdef DEBUG
 
 #define might_sleep() assert(can_block(&per_cpu_info[core_id()]))
@@ -307,6 +342,7 @@
 #define MODULE_VERSION(...)
 #define MODULE_FIRMWARE(...)
 #define module_param(...)
+#define module_param_string(...)
 #define module_param_named(...)
 #define MODULE_PARM_DESC(...)
 #define MODULE_DEVICE_TABLE(...)
@@ -316,6 +352,12 @@
 #define module_init(...)
 #define module_exit(...)
 
+/* Feel free to add more.  If we get too many of these, we may need to think of
+ * when we are running them.  Right now, they all happen after arch and rcu
+ * init, and before devtab reset/init. */
+#define arch_initcall(x) init_func_2(x)
+#define device_initcall(x) init_func_2(x)
+
 #define is_kdump_kernel() (0)
 
 /* from Linux's ethtool.h.  We probably won't use any of this code, but at
@@ -594,7 +636,7 @@
 #define rtnl_unlock()
 #define ASSERT_RTNL(...)
 
-#define synchronize_irq(x) warn_once("Asked to sync IRQ %d, unsupported", x)
+#define synchronize_irq(x) synchronize_rcu()
 #define HZ 1000
 
 /* Linux has a PCI device id struct.  Drivers make tables of their supported
@@ -640,6 +682,7 @@
 #define PCI_VENDOR_ID_AT            0x1259
 #define PCI_VENDOR_ID_LINKSYS       0x1737
 #define PCI_VENDOR_ID_GIGABYTE      0x1458
+#define PCI_VENDOR_ID_INTEL         0x8086
 
 /* I'd like to spatch all of the pci methods, but I don't know how to do the
  * reads.  Since we're not doing the reads, then no sense doing the writes. */
@@ -696,6 +739,32 @@
 	return 0;
 }
 
+static inline int pci_enable_device_mem(struct pci_device *dev)
+{
+	return pci_enable_device(dev);
+}
+
+static inline int pci_save_state(struct pci_device *dev)
+{
+	return 0;
+}
+
+static inline void pci_restore_state(struct pci_device *dev)
+{
+}
+
+static inline void pci_enable_pcie_error_reporting(struct pci_device *dev)
+{
+}
+
+static inline void pci_disable_pcie_error_reporting(struct pci_device *dev)
+{
+}
+
+static inline void pci_wake_from_d3(struct pci_device *dev, bool foo)
+{
+}
+
 static inline uint32_t pci_resource_len(struct pci_device *dev, int bir)
 {
 	return pci_get_membar_sz(dev, bir);
diff --git a/kern/src/dmapool.c b/kern/src/dmapool.c
index f714cdd..b6d7f8e 100644
--- a/kern/src/dmapool.c
+++ b/kern/src/dmapool.c
@@ -161,6 +161,16 @@
 	return retval;
 }
 
+void *dma_pool_zalloc(struct dma_pool *pool, int mem_flags, dma_addr_t *handle)
+{
+	void *ret = dma_pool_alloc(pool, mem_flags, handle);
+
+	if (!ret)
+		return NULL;
+	memset(ret, 0, pool->size);
+	return ret;
+}
+
 void dma_pool_free(struct dma_pool *pool, void *vaddr, dma_addr_t addr)
 {
 	/* TODO */
