Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 162188
b: refs/heads/master
c: b219b3f
h: refs/heads/master
v: v3
  • Loading branch information
Nicolas Palix authored and Greg Kroah-Hartman committed Sep 15, 2009
1 parent 979750b commit 06b14d9
Show file tree
Hide file tree
Showing 4 changed files with 35 additions and 49 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 45dcfb3809fda1f40f10a0650518a0320974caee
refs/heads/master: b219b3f7329d71cdd27355c8c64e65416a0096ce
42 changes: 15 additions & 27 deletions trunk/drivers/staging/hv/Channel.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand All @@ -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,
Expand Down Expand Up @@ -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);
Expand Down Expand Up @@ -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,
Expand Down Expand Up @@ -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);

Expand Down Expand Up @@ -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,
Expand Down
27 changes: 14 additions & 13 deletions trunk/drivers/staging/hv/RingBuffer.c
Original file line number Diff line number Diff line change
Expand Up @@ -347,25 +347,26 @@ RingBufferCleanup(
--*/
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;
u32 byteAvailToWrite;
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);
Expand Down Expand Up @@ -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();
Expand Down
13 changes: 5 additions & 8 deletions trunk/drivers/staging/hv/RingBuffer.h
Original file line number Diff line number Diff line change
Expand Up @@ -25,12 +25,9 @@
#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 */
Expand Down Expand Up @@ -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
Expand Down

0 comments on commit 06b14d9

Please sign in to comment.