Patch?: Centralized DMA mapping in linux-2.5.6-pre2/drivers/scsi/scsi.c

From: Adam J. Richter (adam@yggdrasil.com)
Date: Wed Mar 06 2002 - 06:22:13 EST


        I have been exploring the daunting task of trying to port
the numerous scsi drivers in 2.5.6-pre2 that no longer build to
the DMA mapping interface described in Documentation/DMA-mapping.txt.
There are approximately 90 scsi host controller drivers in Linus's
tree. I believe that most of the effected drivers will need to
implement almost exactly the same code.

        So, I have created the following patch which defines two
new flags that scsi host templates can set, which tell scsi.c to
handle mapping (and unmapping) or Scsi_Request.request_buffer and
Scsi_Request.sense_buffer, respectively (some drivers have no use
for mapping sense_buffer). All of the executable code is contained
in two static routines, scsi_map_dma and scsi_unmap_dma. So, the
patch should be pretty readable.

        I believe this approach has the following advantages:

                o less code to maintain
                o faster cleanup of drivers/scsi
                o saves a few bytes of system size if more than one
                  device driver
                o drivers that do not use this facility should be unaffected,
                o easier to make changes in the future, for example:
                        - scsi_map_dma could change all requests
                          that have use_sg=0 to one that have use_sg=1,
                          so drivers could eliminate the use_sg=0 case
                          before it becomes necessary to change all clients
                          to avoid use_sg=0.
                        - Perhaps DMA mapping could be moved out to
                          scsi_allocate_device and scsi_release_request,
                          so that it could be done a little less often.
                        - Perhaps allocate sense_buffer or request_buffer
                          via pci_pool_alloc, so it can be allocated from
                          high memory on systems that can DMA to it.

        Here are some small disadvantages, and why this the change is worth it.

                o Any driver that does not use named initializers for
                  its Scsi_Host_Template will break, but it's really unlikely
                  that such drivers have been maintained to reflect the
                  other 2.5 changes and not have named initializers.

                o This change 20 bytes to Scsi_Request, but its a big
                  data structure to begin with and some of that
                  size can be made up if we can eliminate the use_sg=0
                  and, in many cases, the new variables are eliminating
                  the need to create the same variables in driver private
                  data.

                o Right now, I only know that it compiles and links without
                  undefined symbols, but drivers that do not set the new
                  flags should not be affected.

        Comments? Bugs in my implementation?

-- 
Adam J. Richter     __     ______________   4880 Stevens Creek Blvd, Suite 104
adam@yggdrasil.com     \ /                  San Jose, California 95129-1034
+1 408 261-6630         | g g d r a s i l   United States of America
fax +1 408 261-6631      "Free Software For The Rest Of Us."


- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/



This archive was generated by hypermail 2b29 : Thu Mar 07 2002 - 21:00:54 EST