Patent ID: 7478180

Claim:
A method for virtualizing a communications channel in which blocks of data are divided into multiple sub-blocks for conveyance, the method being implemented in a computer system in which one or more host drivers provide an interface with a physical device that supports the communications channel, a virtualization software emulates a virtual device that appears to support the communications channel, and one or more guest drivers provide an interface with the virtual device, wherein the one or more guest drivers receive multiple guest data block buffers for use in conveying data over the communications channel and generate multiple corresponding guest data sub-block buffers for individual guest data block buffers, wherein the virtualization software obtains access to the guest data sub-block buffers, and wherein the one or more host drivers expect to access host data block buffers, the method comprising: scanning guest data sub-block buffers for an indication of a first boundary between a first guest data block buffer and a second guest data block buffer, wherein the indication of the first boundary between the guest data block buffers includes a guest data sub-block buffer in the data sub-block buffers having a flag that is set followed by a guest data sub-block buffer having the flag that is not set; scanning additional guest data sub-block buffers for an indication of a second boundary between the second guest data block buffer and a third guest data block buffer, wherein the indication of the second boundary between the guest data block buffers includes a guest data sub-block buffer in the additional guest data sub-block buffers having a flag that is set followed by a guest data sub-block buffer having the flag that is not set; and forming a host data block buffer encompassing the guest data sub-block buffers between the first boundary and the second boundary, and making the host data block buffer available to the one or more host drivers.