*/
        blk_queue_update_dma_alignment(sdev->request_queue, (512 - 1));
 
-       if (devinfo->flags & US_FL_MAX_SECTORS_64)
-               blk_queue_max_hw_sectors(sdev->request_queue, 64);
-       else if (devinfo->flags & US_FL_MAX_SECTORS_240)
-               blk_queue_max_hw_sectors(sdev->request_queue, 240);
-
        return 0;
 }
 
 static int uas_slave_configure(struct scsi_device *sdev)
 {
        struct uas_dev_info *devinfo = sdev->hostdata;
+       struct device *dev = sdev->host->dma_dev;
+
+       if (devinfo->flags & US_FL_MAX_SECTORS_64)
+               blk_queue_max_hw_sectors(sdev->request_queue, 64);
+       else if (devinfo->flags & US_FL_MAX_SECTORS_240)
+               blk_queue_max_hw_sectors(sdev->request_queue, 240);
+
+       blk_queue_max_hw_sectors(sdev->request_queue,
+               min_t(size_t, queue_max_hw_sectors(sdev->request_queue),
+                     dma_max_mapping_size(dev) >> SECTOR_SHIFT));
 
        if (devinfo->flags & US_FL_NO_REPORT_OPCODES)
                sdev->no_report_opcodes = 1;
        shost->can_queue = devinfo->qdepth - 2;
 
        usb_set_intfdata(intf, shost);
-       result = scsi_add_host(shost, &intf->dev);
+       result = scsi_add_host_with_dma(shost, &intf->dev, udev->bus->sysdev);
        if (result)
                goto free_streams;