Re: atascsi dma_alloc() - make atascsi play nicer with bigmem

2011-04-02 Thread David Gwynne
ok.

On 02/04/2011, at 11:15 PM, Kenneth R Westerback wrote:

 Another driver malloc'ing and passing potentially dma unsafe memory
 to do i/o into.
 
 ok?
 
  Ken
 
 Index: atascsi.c
 ===
 RCS file: /cvs/src/sys/dev/ata/atascsi.c,v
 retrieving revision 1.101
 diff -u -p -r1.101 atascsi.c
 --- atascsi.c 3 Feb 2011 21:22:19 -   1.101
 +++ atascsi.c 2 Apr 2011 13:03:58 -
 @@ -26,6 +26,7 @@
 #include sys/device.h
 #include sys/proc.h
 #include sys/queue.h
 +#include sys/pool.h
 
 #include scsi/scsi_all.h
 #include scsi/scsi_disk.h
 @@ -335,8 +336,8 @@ atascsi_probe(struct scsi_link *link)
   xa = scsi_io_get(ahp-ahp_iopool, SCSI_NOSLEEP);
   if (xa == NULL)
   panic(no free xfers on a new port);
 - /* XXX dma reachable */
 - identify = malloc(sizeof(*identify), M_TEMP, M_WAITOK);
 + identify = dma_alloc(sizeof(*identify),
 + PR_WAITOK | PR_ZERO);
   xa-pmp_port = ap-ap_pmp_port;
   xa-data = identify;
   xa-datalen = sizeof(*identify);
 @@ -353,10 +354,10 @@ atascsi_probe(struct scsi_link *link)
   if (rv == 0) {
   bcopy(identify, ap-ap_identify,
   sizeof(ap-ap_identify));
 - free(identify, M_TEMP);
 + dma_free(identify, sizeof(*identify));
   break;
   }
 - free(identify, M_TEMP);
 + dma_free(identify, sizeof(*identify));
   delay(500);
   } while (count--);



Re: atascsi dma_alloc() - make atascsi play nicer with bigmem

2011-04-02 Thread Thordur Bjornsson
On Sat, Apr 02, 2011 at 09:15:37AM -0400, Kenneth R Westerback wrote:
 Another driver malloc'ing and passing potentially dma unsafe memory
 to do i/o into.
 
 ok?
yub
 
  Ken
 
 Index: atascsi.c
 ===
 RCS file: /cvs/src/sys/dev/ata/atascsi.c,v
 retrieving revision 1.101
 diff -u -p -r1.101 atascsi.c
 --- atascsi.c 3 Feb 2011 21:22:19 -   1.101
 +++ atascsi.c 2 Apr 2011 13:03:58 -
 @@ -26,6 +26,7 @@
  #include sys/device.h
  #include sys/proc.h
  #include sys/queue.h
 +#include sys/pool.h
  
  #include scsi/scsi_all.h
  #include scsi/scsi_disk.h
 @@ -335,8 +336,8 @@ atascsi_probe(struct scsi_link *link)
   xa = scsi_io_get(ahp-ahp_iopool, SCSI_NOSLEEP);
   if (xa == NULL)
   panic(no free xfers on a new port);
 - /* XXX dma reachable */
 - identify = malloc(sizeof(*identify), M_TEMP, M_WAITOK);
 + identify = dma_alloc(sizeof(*identify),
 + PR_WAITOK | PR_ZERO);
   xa-pmp_port = ap-ap_pmp_port;
   xa-data = identify;
   xa-datalen = sizeof(*identify);
 @@ -353,10 +354,10 @@ atascsi_probe(struct scsi_link *link)
   if (rv == 0) {
   bcopy(identify, ap-ap_identify,
   sizeof(ap-ap_identify));
 - free(identify, M_TEMP);
 + dma_free(identify, sizeof(*identify));
   break;
   }
 - free(identify, M_TEMP);
 + dma_free(identify, sizeof(*identify));
   delay(500);
   } while (count--);