pci: pci_set_ops() always assigns to the kernel

The IOMMU sets an identity mapping for the kernel, by default, for all
devices.  In essence, this is assigned to the kernel.  If someone wants
a different state, like unassigned, then do it manually.  e.g.
	pci_set_ops(pdev);
	...
	pci_device_unassign(pdev, NULL);

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
diff --git a/kern/arch/x86/pci.c b/kern/arch/x86/pci.c
index 7cc797a..36f9671 100644
--- a/kern/arch/x86/pci.c
+++ b/kern/arch/x86/pci.c
@@ -850,11 +850,10 @@
 	}
 }
 
-void pci_set_ops(struct pci_device *pdev, struct pci_ops *ops, int pci_state)
+void pci_set_ops(struct pci_device *pdev, struct pci_ops *ops)
 {
 	pdev->_ops = ops;
-	assert(pdev->state == DEV_STATE_UNKNOWN);
-	pdev->state = pci_state;
+	pdev->state = DEV_STATE_ASSIGNED_KERNEL;
 }
 
 static void __pci_device_assign_check(struct pci_device *pdev)
diff --git a/kern/arch/x86/pci.h b/kern/arch/x86/pci.h
index 60e0d65..bd51935 100644
--- a/kern/arch/x86/pci.h
+++ b/kern/arch/x86/pci.h
@@ -317,7 +317,7 @@
 int pci_set_cacheline_size(struct pci_device *dev);
 int pci_set_mwi(struct pci_device *dev);
 void pci_clear_mwi(struct pci_device *dev);
-void pci_set_ops(struct pci_device *pdev, struct pci_ops *ops, int pci_state);
+void pci_set_ops(struct pci_device *pdev, struct pci_ops *ops);
 void pci_device_assign(struct pci_device *pdev, struct proc *proc);
 void pci_device_unassign_known(struct pci_device *pdev, struct proc *proc);
 void pci_device_unassign(struct pci_device *pdev, struct proc *proc);
diff --git a/kern/drivers/dma/ioat/init.c b/kern/drivers/dma/ioat/init.c
index 1ab1a5f..5c6622c 100644
--- a/kern/drivers/dma/ioat/init.c
+++ b/kern/drivers/dma/ioat/init.c
@@ -1596,8 +1596,7 @@
 		if (p->ven_id != PCI_VENDOR_ID_INTEL)
 			continue;
 		if (ioat_pci_init(p))
-			pci_set_ops(p, &ioat_pci_ops,
-				    DEV_STATE_ASSIGNED_KERNEL);
+			pci_set_ops(p, &ioat_pci_ops);
 	}
 }
 /* The 'arch_initcall' setup functions run at level 2. */