[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




 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.