public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
From: "Liran Alon" <liran.alon@oracle.com>
To: Laszlo Ersek <lersek@redhat.com>, devel@edk2.groups.io
Cc: nikita.leshchenko@oracle.com, aaron.young@oracle.com,
	jordan.l.justen@intel.com, ard.biesheuvel@linaro.org
Subject: Re: [PATCH v2 14/17] OvmfPkg/PvScsiDxe: Introduce DMA communication buffer
Date: Fri, 27 Mar 2020 03:05:40 +0300	[thread overview]
Message-ID: <1d747d1e-064e-f24a-f8ac-ac07b91c3999@oracle.com> (raw)
In-Reply-To: <45e5950c-ec82-c24b-4c38-2912402747b2@redhat.com>


On 27/03/2020 0:17, Laszlo Ersek wrote:
> On 03/25/20 17:10, Liran Alon wrote:
>>     PvScsiRestorePciAttributes (Dev);
>> diff --git a/OvmfPkg/PvScsiDxe/PvScsi.h b/OvmfPkg/PvScsiDxe/PvScsi.h
>> index 6d23b6e1eccf..7f91d70fec79 100644
>> --- a/OvmfPkg/PvScsiDxe/PvScsi.h
>> +++ b/OvmfPkg/PvScsiDxe/PvScsi.h
>> @@ -31,6 +31,11 @@ typedef struct {
>>     PVSCSI_DMA_DESC      RingCmpsDmaDesc;
>>   } PVSCSI_RING_DESC;
>>   
>> +typedef struct {
>> +  UINT8     SenseData[MAX_UINT8];
> (4) Is the maximum possible size of the sense data specified somewhere?
> If so, it would be nice to document it with a comment at least.
This is a good point. Thanks for pointing it out.
Turns out "SCSI Commands Reference Manual" section 2.4.1.1.1 Descriptor 
format sense data overview specifies:
"The additional sense length shall be less than or equal to 244 (i.e., 
limiting the total length of the sense data to 252 bytes)"

i.e. The max possible size of sense data is 252.
As another evidence, I saw QEMU's include/hw/scsi/scsi.h indeed defining:

#define SCSI_SENSE_BUF_SIZE 252

This change was done by QEMU commit c5f52875b980 ("scsi: Change scsi 
sense buf size to 252") which says in it's commit message:
"According to SPC-4, section 4.5.2.1, 252 is the limit of sense data."

Interestingly, this QEMU commit changed the value of SCSI_SENSE_BUF_SIZE 
from 96 to 252.
But then I found this in EDK2 OvmfPkg/Include/IndustryStandard/VirtioScsi.h:

//
// We expect these maximum sizes from the host. Also we force the 
CdbLength and
// SenseDataLength parameters of 
EFI_EXT_SCSI_PASS_THRU_PROTOCOL.PassThru() not
// to exceed these limits. See UEFI 2.3.1 errata C 14.7.
//
#define VIRTIO_SCSI_CDB_SIZE   32
#define VIRTIO_SCSI_SENSE_SIZE 96

Which seems to be wrong...

It seems most appropriate to add a SCSI_MAX_SENSE_SIZE constant to EDK2 
MdePkg/Include/IndustryStandard/Scsi.h.
And then use that from my PvScsi driver.

I can also submit a separate patch (Not part of this series) to remove 
this VIRTIO_SCSI_SENSE_SIZE constant.
Note that VirtioScsi doesn't have a technical issue here because it 
provides this max sense length to the device in VirtioScsiInit():

Status = VIRTIO_CFG_WRITE (Dev, SenseSize, VIRTIO_SCSI_SENSE_SIZE);

So if it's OK by you, I think I will just add a patch to this series 
defining SCSI_MAX_SENSE_SIZE in MdePkg/Include/IndustryStandard/Scsi.h,
and then rely on that when defining SenseData in PVSCSI_DMA_BUFFER.

>> +  UINT8     Data[0x2000];
> (5) Same here. From peeking at the next patch, we seem to be choosing
> this size arbitrarily.
This is indeed arbitrary...
>
> If it works for you in all relevant boot scenarios, I'm OK with it, but
> we should be clear that this value is arbitrarily chosen. No need for a
> #define, but a comment would be nice.

OK. Will just add a comment such as:

//
// This size is arbitrarily chosen,
// It seems to be sufficient for all I/O requests sent through 
EFI_SCSI_PASS_THRU_PROTOCOL.PassThru().
//

If you wish to have something else, please say so. :)

>
> (6) Should we declare this structure as packed?
There is no such requirement as it's not a wire-format or anything like 
that.
The only rational of defining it as packed is to avoid mapping 
unnecessary pages to device.
But this structure is less than a page-size anyway. So I think it's fine.

If you still think it should be marked as packed, I can change this.

Thanks!
-Liran



  reply	other threads:[~2020-03-27  0:05 UTC|newest]

Thread overview: 41+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-03-25 16:09 [PATCH v2 00/17] OvmfPkg: Support booting from VMware PVSCSI controller Liran Alon
2020-03-25 16:09 ` [PATCH v2 01/17] OvmfPkg/PvScsiDxe: Create empty driver Liran Alon
2020-03-26 14:44   ` [edk2-devel] " Laszlo Ersek
2020-03-25 16:09 ` [PATCH v2 02/17] OvmfPkg/PvScsiDxe: Install DriverBinding protocol Liran Alon
2020-03-25 16:09 ` [PATCH v2 03/17] OvmfPkg/PvScsiDxe: Report name of driver Liran Alon
2020-03-25 16:09 ` [PATCH v2 04/17] OvmfPkg/PvScsiDxe: Probe PCI devices and look for PvScsi Liran Alon
2020-03-25 16:09 ` [PATCH v2 05/17] OvmfPkg/PvScsiDxe: Install stubbed EXT_SCSI_PASS_THRU Liran Alon
2020-03-25 16:09 ` [PATCH v2 06/17] OvmfPkg/PvScsiDxe: Report the number of targets and LUNs Liran Alon
2020-03-25 16:09 ` [PATCH v2 07/17] OvmfPkg/PvScsiDxe: Translate Target & LUN to/from DevicePath Liran Alon
2020-03-25 16:09 ` [PATCH v2 08/17] OvmfPkg/PvScsiDxe: Open PciIo protocol for later use Liran Alon
2020-03-25 16:09 ` [PATCH v2 09/17] OvmfPkg/PvScsiDxe: Backup/Restore PCI attributes on Init/UnInit Liran Alon
2020-03-26 17:04   ` [edk2-devel] " Laszlo Ersek
2020-03-25 16:09 ` [PATCH v2 10/17] OvmfPkg/PvScsiDxe: Enable MMIO-Space & Bus-Mastering in PCI attributes Liran Alon
2020-03-26 17:12   ` Laszlo Ersek
2020-03-25 16:09 ` [PATCH v2 11/17] OvmfPkg/PvScsiDxe: Define device interface structures and constants Liran Alon
2020-03-26 17:19   ` [edk2-devel] " Laszlo Ersek
2020-03-25 16:10 ` [PATCH v2 12/17] OvmfPkg/PvScsiDxe: Reset adapter on init Liran Alon
2020-03-26 18:25   ` [edk2-devel] " Laszlo Ersek
2020-03-25 16:10 ` [PATCH v2 13/17] OvmfPkg/PvScsiDxe: Setup requests and completions rings Liran Alon
2020-03-26 20:51   ` Laszlo Ersek
2020-03-25 16:10 ` [PATCH v2 14/17] OvmfPkg/PvScsiDxe: Introduce DMA communication buffer Liran Alon
2020-03-26 22:17   ` Laszlo Ersek
2020-03-27  0:05     ` Liran Alon [this message]
2020-03-27 13:35       ` Laszlo Ersek
2020-03-27 21:31         ` Liran Alon
2020-03-30 11:29           ` Laszlo Ersek
2020-03-25 16:10 ` [PATCH v2 15/17] OvmfPkg/PvScsiDxe: Support sending SCSI request and receive response Liran Alon
2020-03-27 11:26   ` [edk2-devel] " Laszlo Ersek
2020-03-27 13:04     ` Liran Alon
2020-03-27 13:20       ` Liran Alon
2020-03-27 21:05         ` Laszlo Ersek
2020-03-27 21:05       ` Laszlo Ersek
2020-03-27 22:04         ` Liran Alon
2020-03-27 22:17           ` Liran Alon
2020-03-28 19:18             ` Liran Alon
2020-03-30 11:23               ` Laszlo Ersek
2020-03-30 11:12             ` Laszlo Ersek
2020-03-30 10:30           ` Laszlo Ersek
2020-03-25 16:10 ` [PATCH v2 16/17] OvmfPkg/PvScsiDxe: Reset device on ExitBootServices() Liran Alon
2020-03-25 16:10 ` [PATCH v2 17/17] OvmfPkg/PvScsiDxe: Enable device 64-bit DMA addresses Liran Alon
2020-03-26 22:29   ` [edk2-devel] " Laszlo Ersek

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-list from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1d747d1e-064e-f24a-f8ac-ac07b91c3999@oracle.com \
    --to=devel@edk2.groups.io \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox