Staging: hv: Replace typedef SG_BUFFER_LIST by struct scatterlist
authorNicolas Palix <npalix@diku.dk>
Thu, 30 Jul 2009 15:37:23 +0000 (17:37 +0200)
committerGreg Kroah-Hartman <gregkh@suse.de>
Tue, 15 Sep 2009 19:01:54 +0000 (12:01 -0700)
typedef SG_BUFFER_LIST is removed and its uses are replaced by the use of
struct scatterlist.

Signed-off-by: Nicolas Palix <npalix@diku.dk>
Cc: Bill Pemberton <wfp5p@virginia.edu>
Cc: Hank Janssen <hjanssen@microsoft.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
drivers/staging/hv/Channel.c
drivers/staging/hv/RingBuffer.c
drivers/staging/hv/RingBuffer.h

index be9770e6b098624742f0512719f10086edca131e..2938e588de90bdfdb7352ed43d537e0ad98a704b 100644 (file)
@@ -773,7 +773,7 @@ VmbusChannelSendPacket(
        VMPACKET_DESCRIPTOR desc;
        u32 packetLen = sizeof(VMPACKET_DESCRIPTOR) + BufferLen;
        u32 packetLenAligned = ALIGN_UP(packetLen, sizeof(u64));
-       SG_BUFFER_LIST bufferList[3];
+       struct scatterlist bufferList[3];
        u64 alignedData=0;
 
        DPRINT_ENTER(VMBUS);
@@ -790,14 +790,10 @@ VmbusChannelSendPacket(
        desc.Length8 = (u16)(packetLenAligned >> 3);
        desc.TransactionId = RequestId;
 
-       bufferList[0].Data = &desc;
-       bufferList[0].Length = sizeof(VMPACKET_DESCRIPTOR);
-
-       bufferList[1].Data = Buffer;
-       bufferList[1].Length = BufferLen;
-
-       bufferList[2].Data = &alignedData;
-       bufferList[2].Length = packetLenAligned - packetLen;
+       sg_init_table(bufferList,3);
+       sg_set_buf(&bufferList[0], &desc, sizeof(VMPACKET_DESCRIPTOR));
+       sg_set_buf(&bufferList[1], Buffer, BufferLen);
+       sg_set_buf(&bufferList[2], &alignedData, packetLenAligned - packetLen);
 
        ret = RingBufferWrite(
                &Channel->Outbound,
@@ -841,7 +837,7 @@ VmbusChannelSendPacketPageBuffer(
        u32 descSize;
        u32 packetLen;
        u32 packetLenAligned;
-       SG_BUFFER_LIST bufferList[3];
+       struct scatterlist bufferList[3];
        u64 alignedData=0;
 
        DPRINT_ENTER(VMBUS);
@@ -872,14 +868,10 @@ VmbusChannelSendPacketPageBuffer(
                desc.Range[i].Pfn        = PageBuffers[i].Pfn;
        }
 
-       bufferList[0].Data = &desc;
-       bufferList[0].Length = descSize;
-
-       bufferList[1].Data = Buffer;
-       bufferList[1].Length = BufferLen;
-
-       bufferList[2].Data = &alignedData;
-       bufferList[2].Length = packetLenAligned - packetLen;
+       sg_init_table(bufferList,3);
+       sg_set_buf(&bufferList[0], &desc, descSize);
+       sg_set_buf(&bufferList[1], Buffer, BufferLen);
+       sg_set_buf(&bufferList[2], &alignedData, packetLenAligned - packetLen);
 
        ret = RingBufferWrite(
                &Channel->Outbound,
@@ -922,7 +914,7 @@ VmbusChannelSendPacketMultiPageBuffer(
        u32 descSize;
        u32 packetLen;
        u32 packetLenAligned;
-       SG_BUFFER_LIST bufferList[3];
+       struct scatterlist bufferList[3];
        u64 alignedData=0;
        u32 PfnCount = NUM_PAGES_SPANNED(MultiPageBuffer->Offset, MultiPageBuffer->Length);
 
@@ -955,14 +947,10 @@ VmbusChannelSendPacketMultiPageBuffer(
 
        memcpy(desc.Range.PfnArray, MultiPageBuffer->PfnArray, PfnCount*sizeof(u64));
 
-       bufferList[0].Data = &desc;
-       bufferList[0].Length = descSize;
-
-       bufferList[1].Data = Buffer;
-       bufferList[1].Length = BufferLen;
-
-       bufferList[2].Data = &alignedData;
-       bufferList[2].Length = packetLenAligned - packetLen;
+       sg_init_table(bufferList,3);
+       sg_set_buf(&bufferList[0], &desc, descSize);
+       sg_set_buf(&bufferList[1], Buffer, BufferLen);
+       sg_set_buf(&bufferList[2], &alignedData, packetLenAligned - packetLen);
 
        ret = RingBufferWrite(
                &Channel->Outbound,
index d338ce25e2b038f115e8fd27de9c0209f3182768..571f9db4160e836af842de05e6c238c226c6270f 100644 (file)
@@ -347,9 +347,9 @@ Description:
 --*/
 static int
 RingBufferWrite(
-       RING_BUFFER_INFO*       OutRingInfo,
-       SG_BUFFER_LIST          SgBuffers[],
-       u32                             SgBufferCount
+       RING_BUFFER_INFO *OutRingInfo,
+       struct scatterlist *sglist,
+       u32 sgcount
        )
 {
        int i=0;
@@ -357,15 +357,16 @@ RingBufferWrite(
        u32 byteAvailToRead;
        u32 totalBytesToWrite=0;
 
+       struct scatterlist *sg;
        volatile u32 nextWriteLocation;
        u64 prevIndices=0;
        unsigned long flags;
 
        DPRINT_ENTER(VMBUS);
 
-       for (i=0; i < SgBufferCount; i++)
+       for_each_sg(sglist, sg, sgcount, i)
        {
-               totalBytesToWrite += SgBuffers[i].Length;
+               totalBytesToWrite += sg->length;
        }
 
        totalBytesToWrite += sizeof(u64);
@@ -394,21 +395,21 @@ RingBufferWrite(
        /* Write to the ring buffer */
        nextWriteLocation = GetNextWriteLocation(OutRingInfo);
 
-       for (i=0; i < SgBufferCount; i++)
+       for_each_sg(sglist, sg, sgcount, i)
        {
-                nextWriteLocation = CopyToRingBuffer(OutRingInfo,
-                                                                                               nextWriteLocation,
-                                                                                               SgBuffers[i].Data,
-                                                                                               SgBuffers[i].Length);
+               nextWriteLocation = CopyToRingBuffer(OutRingInfo,
+                                                    nextWriteLocation,
+                                                    sg_virt(sg),
+                                                    sg->length);
        }
 
        /* Set previous packet start */
        prevIndices = GetRingBufferIndices(OutRingInfo);
 
        nextWriteLocation = CopyToRingBuffer(OutRingInfo,
-                                                                                               nextWriteLocation,
-                                                                                               &prevIndices,
-                                                                                               sizeof(u64));
+                                            nextWriteLocation,
+                                            &prevIndices,
+                                            sizeof(u64));
 
        /* Make sure we flush all writes before updating the writeIndex */
        mb();
index a0b6e0e9f879a5217eeb90dcf45c7abf196a40f9..16586148bef98b822445d3b212009f43132e7887 100644 (file)
 #ifndef _RING_BUFFER_H_
 #define _RING_BUFFER_H_
 
-#include "include/osd.h"
+#include <linux/scatterlist.h>
 
-typedef struct _SG_BUFFER_LIST {
-       void *  Data;
-       u32     Length;
-} SG_BUFFER_LIST;
+#include "include/osd.h"
 
 typedef struct _RING_BUFFER {
     volatile u32       WriteIndex;     /* Offset in bytes from the start of ring data below */
@@ -83,9 +80,9 @@ RingBufferCleanup(
 
 static int
 RingBufferWrite(
-       RING_BUFFER_INFO        *RingInfo,
-       SG_BUFFER_LIST          SgBuffers[],
-       u32                             SgBufferCount
+       RING_BUFFER_INFO *RingInfo,
+       struct scatterlist *sglist,
+       u32 sgcount
        );
 
 static int