|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH 3/4 v2] Consolidate macro'ed access to properties
On 03/03/2026 10:36, Owen Smith wrote:
> Replace specific accessors for members of the XENVBD_CAPS,
> XENVBD_FEATURES and XENVBD_DISKINFO structures, with an
> accessor for the structure, and direct accesses for the structure
> members.
> Remove all manually implemented FrontendGet* accessors, using a
> new macro for returning a pointer to a member.
>
> Signed-off-by: Owen Smith <owen.smith@xxxxxxxxxx>
Reviewed-by: Tu Dinh <ngoc-tu.dinh@xxxxxxxxxx>
> ---
> src/xenvbd/frontend.c | 85 +++++++++++--------------------------------
> src/xenvbd/frontend.h | 9 +----
> src/xenvbd/target.c | 29 +++++++++------
> 3 files changed, 40 insertions(+), 83 deletions(-)
>
> diff --git a/src/xenvbd/frontend.c b/src/xenvbd/frontend.c
> index 912fc7e..ef60f9c 100644
> --- a/src/xenvbd/frontend.c
> +++ b/src/xenvbd/frontend.c
> @@ -130,6 +130,23 @@ FrontendGet ## _name ## ( \
> return __FrontendGet ## _name ## (Frontend);\
> }
>
> +
> +#define FRONTEND_GET_PROPERTY_PTR(_name, _type) \
> +static FORCEINLINE _type \
> +__FrontendGet ## _name ## ( \
> + IN PXENVBD_FRONTEND Frontend \
> + ) \
> +{ \
> + return &Frontend-> ## _name ## ; \
> +} \
> +_type \
> +FrontendGet ## _name ## ( \
> + IN PXENVBD_FRONTEND Frontend \
> + ) \
> +{ \
> + return __FrontendGet ## _name ## (Frontend);\
> +}
> +
> FRONTEND_GET_PROPERTY(Target, PXENVBD_TARGET)
> FRONTEND_GET_PROPERTY(Ring, PXENVBD_RING)
> FRONTEND_GET_PROPERTY(Granter, PXENVBD_GRANTER)
> @@ -138,74 +155,14 @@ FRONTEND_GET_PROPERTY(DeviceId, ULONG)
> FRONTEND_GET_PROPERTY(BackendDomain, ULONG)
> FRONTEND_GET_PROPERTY(BackendPath, PCHAR)
> FRONTEND_GET_PROPERTY(FrontendPath, PCHAR)
> -//FRONTEND_GET_PROPERTY(Caps, PXENVBD_CAPS)
> -PXENVBD_CAPS
> -FrontendGetCaps(
> - IN PXENVBD_FRONTEND Frontend
> - )
> -{
> - return &Frontend->Caps;
> -}
> -//FRONTEND_GET_PROPERTY(Features, PXENVBD_FEATURES)
> -PXENVBD_FEATURES
> -FrontendGetFeatures(
> - IN PXENVBD_FRONTEND Frontend
> - )
> -{
> - return &Frontend->Features;
> -}
> -//FRONTEND_GET_PROPERTY(DiskInfo, PXENVBD_DISKINFO)
> -PXENVBD_DISKINFO
> -FrontendGetDiskInfo(
> - IN PXENVBD_FRONTEND Frontend
> - )
> -{
> - return &Frontend->DiskInfo;
> -}
> -//FRONTEND_GET_PROPERTY(Connected, BOOLEAN)
> -BOOLEAN
> -FrontendGetConnected(
> - IN PXENVBD_FRONTEND Frontend
> - )
> -{
> - return Frontend->Caps.Connected;
> -}
> -//FRONTEND_GET_PROPERTY(ReadOnly, BOOLEAN)
> -BOOLEAN
> -FrontendGetReadOnly(
> - IN PXENVBD_FRONTEND Frontend
> - )
> -{
> - return !!(Frontend->DiskInfo.DiskInfo & VDISK_READONLY);
> -}
> -//FRONTEND_GET_PROPERTY(Discard, BOOLEAN)
> -BOOLEAN
> -FrontendGetDiscard(
> - IN PXENVBD_FRONTEND Frontend
> - )
> -{
> - return Frontend->Features.Discard;
> -}
> -//FRONTEND_GET_PROPERTY(FlushCache, BOOLEAN)
> -BOOLEAN
> -FrontendGetFlushCache(
> - IN PXENVBD_FRONTEND Frontend
> - )
> -{
> - return Frontend->Features.FlushCache;
> -}
> -//FRONTEND_GET_PROPERTY(Barrier, BOOLEAN)
> -BOOLEAN
> -FrontendGetBarrier(
> - IN PXENVBD_FRONTEND Frontend
> - )
> -{
> - return Frontend->Features.Barrier;
> -}
> FRONTEND_GET_PROPERTY(MaxQueues, ULONG)
> FRONTEND_GET_PROPERTY(NumQueues, ULONG)
> +FRONTEND_GET_PROPERTY_PTR(Caps, PXENVBD_CAPS)
> +FRONTEND_GET_PROPERTY_PTR(Features, PXENVBD_FEATURES)
> +FRONTEND_GET_PROPERTY_PTR(DiskInfo, PXENVBD_DISKINFO)
>
> #undef FRONTEND_GET_PROPERTY
> +#undef FRONTEND_GET_PROPERTY_PTR
>
>
> //=============================================================================
> #define FRONTEND_POOL_TAG 'tnFX'
> diff --git a/src/xenvbd/frontend.h b/src/xenvbd/frontend.h
> index 34f91b4..dc7b55f 100644
> --- a/src/xenvbd/frontend.h
> +++ b/src/xenvbd/frontend.h
> @@ -159,16 +159,11 @@ FRONTEND_GET_PROPERTY(DeviceId, ULONG)
> FRONTEND_GET_PROPERTY(BackendDomain, ULONG)
> FRONTEND_GET_PROPERTY(BackendPath, PCHAR)
> FRONTEND_GET_PROPERTY(FrontendPath, PCHAR)
> +FRONTEND_GET_PROPERTY(MaxQueues, ULONG)
> +FRONTEND_GET_PROPERTY(NumQueues, ULONG)
> FRONTEND_GET_PROPERTY(Caps, PXENVBD_CAPS)
> FRONTEND_GET_PROPERTY(Features, PXENVBD_FEATURES)
> FRONTEND_GET_PROPERTY(DiskInfo, PXENVBD_DISKINFO)
> -FRONTEND_GET_PROPERTY(Connected, BOOLEAN)
> -FRONTEND_GET_PROPERTY(ReadOnly, BOOLEAN)
> -FRONTEND_GET_PROPERTY(Discard, BOOLEAN)
> -FRONTEND_GET_PROPERTY(FlushCache, BOOLEAN)
> -FRONTEND_GET_PROPERTY(Barrier, BOOLEAN)
> -FRONTEND_GET_PROPERTY(MaxQueues, ULONG)
> -FRONTEND_GET_PROPERTY(NumQueues, ULONG)
>
> #undef FRONTEND_GET_PROPERTY
>
> diff --git a/src/xenvbd/target.c b/src/xenvbd/target.c
> index a07fc45..7dc18f3 100644
> --- a/src/xenvbd/target.c
> +++ b/src/xenvbd/target.c
> @@ -223,11 +223,11 @@ TargetReadWrite(
> ULONG NumSectors;
>
> Srb->SrbStatus = SRB_STATUS_ERROR;
> - if (!FrontendGetConnected(Frontend))
> + if (!FrontendGetCaps(Frontend)->Connected)
> goto fail1;
>
> // disallow writes to read-only disks
> - if (FrontendGetReadOnly(Frontend) &&
> + if (FrontendGetDiskInfo(Frontend)->DiskInfo & VDISK_READONLY &&
> Cdb_OperationEx(Srb) == SCSIOP_WRITE)
> goto fail2;
>
> @@ -266,15 +266,15 @@ TargetSyncCache(
> PXENVBD_RING Ring = FrontendGetRing(Frontend);
>
> Srb->SrbStatus = SRB_STATUS_ERROR;
> - if (!FrontendGetConnected(Frontend))
> + if (!FrontendGetCaps(Frontend)->Connected)
> goto fail1;
>
> - if (FrontendGetReadOnly(Frontend))
> + if (FrontendGetDiskInfo(Frontend)->DiskInfo & VDISK_READONLY)
> goto fail2;
>
> // If neither FLUSH or BARRIER is supported, just succceed the SRB
> - if (!(FrontendGetFlushCache(Frontend) ||
> - FrontendGetBarrier(Frontend)))
> + if (!(FrontendGetFeatures(Frontend)->FlushCache ||
> + FrontendGetFeatures(Frontend)->Barrier))
> goto succeed;
>
> Srb->SrbStatus = SRB_STATUS_PENDING;
> @@ -302,13 +302,13 @@ TargetUnmap(
> PXENVBD_RING Ring = FrontendGetRing(Frontend);
>
> Srb->SrbStatus = SRB_STATUS_ERROR;
> - if (!FrontendGetConnected(Frontend))
> + if (!FrontendGetCaps(Frontend)->Connected)
> goto fail1;
>
> - if (FrontendGetReadOnly(Frontend))
> + if (FrontendGetDiskInfo(Frontend)->DiskInfo & VDISK_READONLY)
> goto fail2;
>
> - if (!FrontendGetDiscard(Frontend))
> + if (!FrontendGetFeatures(Frontend)->Discard)
> goto succeed;
>
> Srb->SrbStatus = SRB_STATUS_PENDING;
> @@ -359,7 +359,7 @@ __TargetModeSense(
> // Fill in CachingParams
> Caching->PageCode = MODE_PAGE_CACHING;
> Caching->PageLength = sizeof(MODE_CACHING_PAGE);
> - Caching->WriteCacheEnable =
> FrontendGetFlushCache(Target->Frontend) ? 1 : 0;
> + Caching->WriteCacheEnable =
> FrontendGetFeatures(Target->Frontend)->FlushCache ? 1 : 0;
>
> *ModeDataLength += sizeof(MODE_CACHING_PAGE);
> *Size += sizeof(MODE_CACHING_PAGE);
> @@ -386,12 +386,15 @@ TargetModeSense(
> IN PSCSI_REQUEST_BLOCK Srb
> )
> {
> + PXENVBD_FRONTEND Frontend = Target->Frontend;
> + PXENVBD_DISKINFO DiskInfo = FrontendGetDiskInfo(Frontend);
> PMODE_PARAMETER_HEADER Data = Srb->DataBuffer;
> ULONG Length = Srb->DataTransferLength;
> ULONG BlockDescrLength = 0;
> ULONG ModeDataLength = 0;
> ULONG Size;
>
> +
> Srb->SrbStatus = SRB_STATUS_ERROR;
>
> if (Data == NULL)
> @@ -403,7 +406,7 @@ TargetModeSense(
>
> // Header
> Data->MediumType = 0;
> - Data->DeviceSpecificParameter = FrontendGetReadOnly(Target->Frontend) ?
> + Data->DeviceSpecificParameter = (DiskInfo->DiskInfo & VDISK_READONLY) ?
> MODE_DSP_WRITE_PROTECT
> : 0;
> Size = sizeof(MODE_PARAMETER_HEADER);
>
> @@ -431,6 +434,8 @@ TargetModeSense10(
> IN PSCSI_REQUEST_BLOCK Srb
> )
> {
> + PXENVBD_FRONTEND Frontend = Target->Frontend;
> + PXENVBD_DISKINFO DiskInfo = FrontendGetDiskInfo(Frontend);
> PMODE_PARAMETER_HEADER10 Data = Srb->DataBuffer;
> ULONG Length = Srb->DataTransferLength;
> ULONG BlockDescrLength = 0;
> @@ -448,7 +453,7 @@ TargetModeSense10(
>
> // Header
> Data->MediumType = 0;
> - Data->DeviceSpecificParameter = FrontendGetReadOnly(Target->Frontend) ?
> + Data->DeviceSpecificParameter = (DiskInfo->DiskInfo & VDISK_READONLY) ?
> MODE_DSP_WRITE_PROTECT
> : 0;
> Size = sizeof(MODE_PARAMETER_HEADER10);
>
--
Ngoc Tu Dinh | Vates XCP-ng Developer
XCP-ng & Xen Orchestra - Vates solutions
web: https://vates.tech
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |