Re: [Xen-devel] [PATCH v3 20/25] xen/arm: introduce a union in vpl011
On Mon, 13 Aug 2018, Julien Grall wrote: > Hi Stefano, > > On 01/08/18 00:28, Stefano Stabellini wrote: > > Introduce a union in struct vpl011 to contain the console ring members. > > A later patch will add another member of the union for the case where > > the backend is in Xen. > > > > Signed-off-by: Stefano Stabellini > > --- > > Changes in v3: > > - rename ring field to dom > > > > Changes in v2: > > - new patch > > --- > > xen/arch/arm/vpl011.c| 20 ++-- > > xen/include/asm-arm/vpl011.h | 8 ++-- > > 2 files changed, 16 insertions(+), 12 deletions(-) > > > > diff --git a/xen/arch/arm/vpl011.c b/xen/arch/arm/vpl011.c > > index a281eab..e70c5ec 100644 > > --- a/xen/arch/arm/vpl011.c > > +++ b/xen/arch/arm/vpl011.c > > @@ -82,7 +82,7 @@ static uint8_t vpl011_read_data(struct domain *d) > > unsigned long flags; > > uint8_t data = 0; > > struct vpl011 *vpl011 = >arch.vpl011; > > -struct xencons_interface *intf = vpl011->ring_buf; > > +struct xencons_interface *intf = vpl011->dom.ring_buf; > > XENCONS_RING_IDX in_cons, in_prod; > > VPL011_LOCK(d, flags); > > @@ -145,7 +145,7 @@ static uint8_t vpl011_read_data(struct domain *d) > > static void vpl011_update_tx_fifo_status(struct vpl011 *vpl011, > >unsigned int fifo_level) > > { > > -struct xencons_interface *intf = vpl011->ring_buf; > > +struct xencons_interface *intf = vpl011->dom.ring_buf; > > unsigned int fifo_threshold = sizeof(intf->out) - > > SBSA_UART_FIFO_LEVEL; > > BUILD_BUG_ON(sizeof(intf->out) < SBSA_UART_FIFO_SIZE); > > @@ -164,7 +164,7 @@ static void vpl011_write_data(struct domain *d, uint8_t > > data) > > { > > unsigned long flags; > > struct vpl011 *vpl011 = >arch.vpl011; > > -struct xencons_interface *intf = vpl011->ring_buf; > > +struct xencons_interface *intf = vpl011->dom.ring_buf; > > XENCONS_RING_IDX out_cons, out_prod; > > VPL011_LOCK(d, flags); > > @@ -382,7 +382,7 @@ static void vpl011_data_avail(struct domain *d) > > { > > unsigned long flags; > > struct vpl011 *vpl011 = >arch.vpl011; > > -struct xencons_interface *intf = vpl011->ring_buf; > > +struct xencons_interface *intf = vpl011->dom.ring_buf; > > XENCONS_RING_IDX in_cons, in_prod, out_cons, out_prod; > > XENCONS_RING_IDX in_fifo_level, out_fifo_level; > > @@ -459,14 +459,14 @@ int domain_vpl011_init(struct domain *d, struct > > vpl011_init_info *info) > > int rc; > > struct vpl011 *vpl011 = >arch.vpl011; > > -if ( vpl011->ring_buf ) > > +if ( vpl011->dom.ring_buf ) > > return -EINVAL; > > /* Map the guest PFN to Xen address space. */ > > rc = prepare_ring_for_helper(d, > > gfn_x(info->gfn), > > - >ring_page, > > - >ring_buf); > > + >dom.ring_page, > > + >dom.ring_buf); > > if ( rc < 0 ) > > goto out; > > @@ -495,7 +495,7 @@ out2: > > vgic_free_virq(d, GUEST_VPL011_SPI); > > out1: > > -destroy_ring_for_helper(>ring_buf, vpl011->ring_page); > > +destroy_ring_for_helper(>dom.ring_buf, vpl011->dom.ring_page); > > out: > > return rc; > > @@ -505,11 +505,11 @@ void domain_vpl011_deinit(struct domain *d) > > { > > struct vpl011 *vpl011 = >arch.vpl011; > > -if ( !vpl011->ring_buf ) > > +if ( !vpl011->dom.ring_buf ) > > return; > > free_xen_event_channel(d, vpl011->evtchn); > > -destroy_ring_for_helper(>ring_buf, vpl011->ring_page); > > +destroy_ring_for_helper(>dom.ring_buf, vpl011->dom.ring_page); > > } > > /* > > diff --git a/xen/include/asm-arm/vpl011.h b/xen/include/asm-arm/vpl011.h > > index db95ff8..b873a29 100644 > > --- a/xen/include/asm-arm/vpl011.h > > +++ b/xen/include/asm-arm/vpl011.h > > @@ -31,8 +31,12 @@ > > #define SBSA_UART_FIFO_SIZE 32 > > struct vpl011 { > > -void *ring_buf; > > -struct page_info *ring_page; > > +union { > > If you name the union vpl011_backend it would be clearer that this deal with > backend information. Or even just avoiding the anonymous union by naming it > "backend". OK > > +struct { > > +void *ring_buf; > > +struct page_info *ring_page; > > +} dom; > > +}; > > uint32_tuartfr; /* Flag register */ > > uint32_tuartcr; /* Control register */ > > uint32_tuartimsc; /* Interrupt mask register*/ > > > > Cheers, > > -- > Julien Grall > ___ Xen-devel mailing list Xen-devel@lists.xenproject.org https://lists.xenproject.org/mailman/listinfo/xen-devel
Re: [Xen-devel] [PATCH v3 20/25] xen/arm: introduce a union in vpl011
Hi Stefano, On 01/08/18 00:28, Stefano Stabellini wrote: Introduce a union in struct vpl011 to contain the console ring members. A later patch will add another member of the union for the case where the backend is in Xen. Signed-off-by: Stefano Stabellini --- Changes in v3: - rename ring field to dom Changes in v2: - new patch --- xen/arch/arm/vpl011.c| 20 ++-- xen/include/asm-arm/vpl011.h | 8 ++-- 2 files changed, 16 insertions(+), 12 deletions(-) diff --git a/xen/arch/arm/vpl011.c b/xen/arch/arm/vpl011.c index a281eab..e70c5ec 100644 --- a/xen/arch/arm/vpl011.c +++ b/xen/arch/arm/vpl011.c @@ -82,7 +82,7 @@ static uint8_t vpl011_read_data(struct domain *d) unsigned long flags; uint8_t data = 0; struct vpl011 *vpl011 = >arch.vpl011; -struct xencons_interface *intf = vpl011->ring_buf; +struct xencons_interface *intf = vpl011->dom.ring_buf; XENCONS_RING_IDX in_cons, in_prod; VPL011_LOCK(d, flags); @@ -145,7 +145,7 @@ static uint8_t vpl011_read_data(struct domain *d) static void vpl011_update_tx_fifo_status(struct vpl011 *vpl011, unsigned int fifo_level) { -struct xencons_interface *intf = vpl011->ring_buf; +struct xencons_interface *intf = vpl011->dom.ring_buf; unsigned int fifo_threshold = sizeof(intf->out) - SBSA_UART_FIFO_LEVEL; BUILD_BUG_ON(sizeof(intf->out) < SBSA_UART_FIFO_SIZE); @@ -164,7 +164,7 @@ static void vpl011_write_data(struct domain *d, uint8_t data) { unsigned long flags; struct vpl011 *vpl011 = >arch.vpl011; -struct xencons_interface *intf = vpl011->ring_buf; +struct xencons_interface *intf = vpl011->dom.ring_buf; XENCONS_RING_IDX out_cons, out_prod; VPL011_LOCK(d, flags); @@ -382,7 +382,7 @@ static void vpl011_data_avail(struct domain *d) { unsigned long flags; struct vpl011 *vpl011 = >arch.vpl011; -struct xencons_interface *intf = vpl011->ring_buf; +struct xencons_interface *intf = vpl011->dom.ring_buf; XENCONS_RING_IDX in_cons, in_prod, out_cons, out_prod; XENCONS_RING_IDX in_fifo_level, out_fifo_level; @@ -459,14 +459,14 @@ int domain_vpl011_init(struct domain *d, struct vpl011_init_info *info) int rc; struct vpl011 *vpl011 = >arch.vpl011; -if ( vpl011->ring_buf ) +if ( vpl011->dom.ring_buf ) return -EINVAL; /* Map the guest PFN to Xen address space. */ rc = prepare_ring_for_helper(d, gfn_x(info->gfn), - >ring_page, - >ring_buf); + >dom.ring_page, + >dom.ring_buf); if ( rc < 0 ) goto out; @@ -495,7 +495,7 @@ out2: vgic_free_virq(d, GUEST_VPL011_SPI); out1: -destroy_ring_for_helper(>ring_buf, vpl011->ring_page); +destroy_ring_for_helper(>dom.ring_buf, vpl011->dom.ring_page); out: return rc; @@ -505,11 +505,11 @@ void domain_vpl011_deinit(struct domain *d) { struct vpl011 *vpl011 = >arch.vpl011; -if ( !vpl011->ring_buf ) +if ( !vpl011->dom.ring_buf ) return; free_xen_event_channel(d, vpl011->evtchn); -destroy_ring_for_helper(>ring_buf, vpl011->ring_page); +destroy_ring_for_helper(>dom.ring_buf, vpl011->dom.ring_page); } /* diff --git a/xen/include/asm-arm/vpl011.h b/xen/include/asm-arm/vpl011.h index db95ff8..b873a29 100644 --- a/xen/include/asm-arm/vpl011.h +++ b/xen/include/asm-arm/vpl011.h @@ -31,8 +31,12 @@ #define SBSA_UART_FIFO_SIZE 32 struct vpl011 { -void *ring_buf; -struct page_info *ring_page; +union { If you name the union vpl011_backend it would be clearer that this deal with backend information. Or even just avoiding the anonymous union by naming it "backend". +struct { +void *ring_buf; +struct page_info *ring_page; +} dom; +}; uint32_tuartfr; /* Flag register */ uint32_tuartcr; /* Control register */ uint32_tuartimsc; /* Interrupt mask register*/ Cheers, -- Julien Grall ___ Xen-devel mailing list Xen-devel@lists.xenproject.org https://lists.xenproject.org/mailman/listinfo/xen-devel
[Xen-devel] [PATCH v3 20/25] xen/arm: introduce a union in vpl011
Introduce a union in struct vpl011 to contain the console ring members. A later patch will add another member of the union for the case where the backend is in Xen. Signed-off-by: Stefano Stabellini --- Changes in v3: - rename ring field to dom Changes in v2: - new patch --- xen/arch/arm/vpl011.c| 20 ++-- xen/include/asm-arm/vpl011.h | 8 ++-- 2 files changed, 16 insertions(+), 12 deletions(-) diff --git a/xen/arch/arm/vpl011.c b/xen/arch/arm/vpl011.c index a281eab..e70c5ec 100644 --- a/xen/arch/arm/vpl011.c +++ b/xen/arch/arm/vpl011.c @@ -82,7 +82,7 @@ static uint8_t vpl011_read_data(struct domain *d) unsigned long flags; uint8_t data = 0; struct vpl011 *vpl011 = >arch.vpl011; -struct xencons_interface *intf = vpl011->ring_buf; +struct xencons_interface *intf = vpl011->dom.ring_buf; XENCONS_RING_IDX in_cons, in_prod; VPL011_LOCK(d, flags); @@ -145,7 +145,7 @@ static uint8_t vpl011_read_data(struct domain *d) static void vpl011_update_tx_fifo_status(struct vpl011 *vpl011, unsigned int fifo_level) { -struct xencons_interface *intf = vpl011->ring_buf; +struct xencons_interface *intf = vpl011->dom.ring_buf; unsigned int fifo_threshold = sizeof(intf->out) - SBSA_UART_FIFO_LEVEL; BUILD_BUG_ON(sizeof(intf->out) < SBSA_UART_FIFO_SIZE); @@ -164,7 +164,7 @@ static void vpl011_write_data(struct domain *d, uint8_t data) { unsigned long flags; struct vpl011 *vpl011 = >arch.vpl011; -struct xencons_interface *intf = vpl011->ring_buf; +struct xencons_interface *intf = vpl011->dom.ring_buf; XENCONS_RING_IDX out_cons, out_prod; VPL011_LOCK(d, flags); @@ -382,7 +382,7 @@ static void vpl011_data_avail(struct domain *d) { unsigned long flags; struct vpl011 *vpl011 = >arch.vpl011; -struct xencons_interface *intf = vpl011->ring_buf; +struct xencons_interface *intf = vpl011->dom.ring_buf; XENCONS_RING_IDX in_cons, in_prod, out_cons, out_prod; XENCONS_RING_IDX in_fifo_level, out_fifo_level; @@ -459,14 +459,14 @@ int domain_vpl011_init(struct domain *d, struct vpl011_init_info *info) int rc; struct vpl011 *vpl011 = >arch.vpl011; -if ( vpl011->ring_buf ) +if ( vpl011->dom.ring_buf ) return -EINVAL; /* Map the guest PFN to Xen address space. */ rc = prepare_ring_for_helper(d, gfn_x(info->gfn), - >ring_page, - >ring_buf); + >dom.ring_page, + >dom.ring_buf); if ( rc < 0 ) goto out; @@ -495,7 +495,7 @@ out2: vgic_free_virq(d, GUEST_VPL011_SPI); out1: -destroy_ring_for_helper(>ring_buf, vpl011->ring_page); +destroy_ring_for_helper(>dom.ring_buf, vpl011->dom.ring_page); out: return rc; @@ -505,11 +505,11 @@ void domain_vpl011_deinit(struct domain *d) { struct vpl011 *vpl011 = >arch.vpl011; -if ( !vpl011->ring_buf ) +if ( !vpl011->dom.ring_buf ) return; free_xen_event_channel(d, vpl011->evtchn); -destroy_ring_for_helper(>ring_buf, vpl011->ring_page); +destroy_ring_for_helper(>dom.ring_buf, vpl011->dom.ring_page); } /* diff --git a/xen/include/asm-arm/vpl011.h b/xen/include/asm-arm/vpl011.h index db95ff8..b873a29 100644 --- a/xen/include/asm-arm/vpl011.h +++ b/xen/include/asm-arm/vpl011.h @@ -31,8 +31,12 @@ #define SBSA_UART_FIFO_SIZE 32 struct vpl011 { -void *ring_buf; -struct page_info *ring_page; +union { +struct { +void *ring_buf; +struct page_info *ring_page; +} dom; +}; uint32_tuartfr; /* Flag register */ uint32_tuartcr; /* Control register */ uint32_tuartimsc; /* Interrupt mask register*/ -- 1.9.1 ___ Xen-devel mailing list Xen-devel@lists.xenproject.org https://lists.xenproject.org/mailman/listinfo/xen-devel