Merge branch 'for_paulus' of master.kernel.org:/pub/scm/linux/kernel/git/galak/powerpc
[cascardo/linux.git] / arch / powerpc / kernel / vio.c
index 13c4149..971020c 100644 (file)
@@ -76,7 +76,7 @@ static void vio_bus_shutdown(struct device *dev)
        struct vio_dev *viodev = to_vio_dev(dev);
        struct vio_driver *viodrv = to_vio_driver(dev->driver);
 
-       if (viodrv->shutdown)
+       if (dev->driver && viodrv->shutdown)
                viodrv->shutdown(viodev);
 }
 
@@ -91,9 +91,6 @@ int vio_register_driver(struct vio_driver *viodrv)
 
        /* fill in 'struct driver' fields */
        viodrv->driver.bus = &vio_bus_type;
-       viodrv->driver.probe = vio_bus_probe;
-       viodrv->driver.remove = vio_bus_remove;
-       viodrv->driver.shutdown = vio_bus_shutdown;
 
        return driver_register(&viodrv->driver);
 }
@@ -205,7 +202,7 @@ static dma_addr_t vio_map_single(struct device *dev, void *vaddr,
                          size_t size, enum dma_data_direction direction)
 {
        return iommu_map_single(to_vio_dev(dev)->iommu_table, vaddr, size,
-                       direction);
+                       ~0ul, direction);
 }
 
 static void vio_unmap_single(struct device *dev, dma_addr_t dma_handle,
@@ -219,7 +216,7 @@ static int vio_map_sg(struct device *dev, struct scatterlist *sglist,
                int nelems, enum dma_data_direction direction)
 {
        return iommu_map_sg(dev, to_vio_dev(dev)->iommu_table, sglist,
-                       nelems, direction);
+                       nelems, ~0ul, direction);
 }
 
 static void vio_unmap_sg(struct device *dev, struct scatterlist *sglist,
@@ -232,7 +229,7 @@ static void *vio_alloc_coherent(struct device *dev, size_t size,
                           dma_addr_t *dma_handle, gfp_t flag)
 {
        return iommu_alloc_coherent(to_vio_dev(dev)->iommu_table, size,
-                       dma_handle, flag);
+                       dma_handle, ~0ul, flag);
 }
 
 static void vio_free_coherent(struct device *dev, size_t size,
@@ -295,4 +292,7 @@ struct bus_type vio_bus_type = {
        .name = "vio",
        .uevent = vio_hotplug,
        .match = vio_bus_match,
+       .probe = vio_bus_probe,
+       .remove = vio_bus_remove,
+       .shutdown = vio_bus_shutdown,
 };