From: Christian Borntraeger <borntraeger@de.ibm.com>
To: Cornelia Huck <cornelia.huck@de.ibm.com>, qemu-devel@nongnu.org
Cc: agraf@suse.de
Subject: Re: [Qemu-devel] [PATCH 3/3] s390x/css: Don't save orb in subchannel.
Date: Mon, 05 May 2014 20:52:10 +0200 [thread overview]
Message-ID: <5367DDDA.3050909@de.ibm.com> (raw)
In-Reply-To: <1399302619-21944-4-git-send-email-cornelia.huck@de.ibm.com>
On 05/05/14 17:10, Cornelia Huck wrote:
> Current css code saves the operation request block (orb) in the
> subchannel structure for later consumption by the start function
> handler. This might make sense for asynchronous execution of the
> start function (which qemu doesn't support), but not in our case;
> it would even be wrong since orb contains a reference to a local
> variable in the base ssch handler.
>
> Let's just pass the orb through the start function call chain for
> ssch; for rsch, we can pass NULL as the backend function does not
> use any information passed via the orb there.
>
> Signed-off-by: Cornelia Huck <cornelia.huck@de.ibm.com>
Good, this makes the whole thing simpler. Furthermore, this also avoids the need to take care of the orb in the vmstate for migration since it is no longer a state.
Acked-by: Christian Borntraeger <borntraeger@de.ibm.com>
> ---
> hw/s390x/css.c | 21 ++++++++-------------
> hw/s390x/css.h | 1 -
> hw/s390x/virtio-ccw.c | 1 -
> 3 files changed, 8 insertions(+), 15 deletions(-)
>
> diff --git a/hw/s390x/css.c b/hw/s390x/css.c
> index 7074d2b..122cc7e 100644
> --- a/hw/s390x/css.c
> +++ b/hw/s390x/css.c
> @@ -140,7 +140,6 @@ static void sch_handle_clear_func(SubchDev *sch)
> s->flags &= ~SCSW_FLAGS_MASK_PNO;
>
> /* We always 'attempt to issue the clear signal', and we always succeed. */
> - sch->orb = NULL;
> sch->channel_prog = 0x0;
> sch->last_cmd_valid = false;
> s->ctrl &= ~SCSW_ACTL_CLEAR_PEND;
> @@ -163,7 +162,6 @@ static void sch_handle_halt_func(SubchDev *sch)
> path = 0x80;
>
> /* We always 'attempt to issue the halt signal', and we always succeed. */
> - sch->orb = NULL;
> sch->channel_prog = 0x0;
> sch->last_cmd_valid = false;
> s->ctrl &= ~SCSW_ACTL_HALT_PEND;
> @@ -317,12 +315,11 @@ static int css_interpret_ccw(SubchDev *sch, hwaddr ccw_addr)
> return ret;
> }
>
> -static void sch_handle_start_func(SubchDev *sch)
> +static void sch_handle_start_func(SubchDev *sch, ORB *orb)
> {
>
> PMCW *p = &sch->curr_status.pmcw;
> SCSW *s = &sch->curr_status.scsw;
> - ORB *orb = sch->orb;
> int path;
> int ret;
>
> @@ -331,6 +328,7 @@ static void sch_handle_start_func(SubchDev *sch)
>
> if (!(s->ctrl & SCSW_ACTL_SUSP)) {
> /* Look at the orb and try to execute the channel program. */
> + assert(orb != NULL); /* resume does not pass an orb */
> p->intparm = orb->intparm;
> if (!(orb->lpm & path)) {
> /* Generate a deferred cc 3 condition. */
> @@ -406,7 +404,7 @@ static void sch_handle_start_func(SubchDev *sch)
> * read/writes) asynchronous later on if we start supporting more than
> * our current very simple devices.
> */
> -static void do_subchannel_work(SubchDev *sch)
> +static void do_subchannel_work(SubchDev *sch, ORB *orb)
> {
>
> SCSW *s = &sch->curr_status.scsw;
> @@ -416,7 +414,7 @@ static void do_subchannel_work(SubchDev *sch)
> } else if (s->ctrl & SCSW_FCTL_HALT_FUNC) {
> sch_handle_halt_func(sch);
> } else if (s->ctrl & SCSW_FCTL_START_FUNC) {
> - sch_handle_start_func(sch);
> + sch_handle_start_func(sch, orb);
> } else {
> /* Cannot happen. */
> return;
> @@ -594,7 +592,6 @@ int css_do_xsch(SubchDev *sch)
> SCSW_ACTL_SUSP);
> sch->channel_prog = 0x0;
> sch->last_cmd_valid = false;
> - sch->orb = NULL;
> s->dstat = 0;
> s->cstat = 0;
> ret = 0;
> @@ -618,7 +615,7 @@ int css_do_csch(SubchDev *sch)
> s->ctrl &= ~(SCSW_CTRL_MASK_FCTL | SCSW_CTRL_MASK_ACTL);
> s->ctrl |= SCSW_FCTL_CLEAR_FUNC | SCSW_FCTL_CLEAR_FUNC;
>
> - do_subchannel_work(sch);
> + do_subchannel_work(sch, NULL);
> ret = 0;
>
> out:
> @@ -659,7 +656,7 @@ int css_do_hsch(SubchDev *sch)
> }
> s->ctrl |= SCSW_ACTL_HALT_PEND;
>
> - do_subchannel_work(sch);
> + do_subchannel_work(sch, NULL);
> ret = 0;
>
> out:
> @@ -721,13 +718,12 @@ int css_do_ssch(SubchDev *sch, ORB *orb)
> if (channel_subsys->chnmon_active) {
> css_update_chnmon(sch);
> }
> - sch->orb = orb;
> sch->channel_prog = orb->cpa;
> /* Trigger the start function. */
> s->ctrl |= (SCSW_FCTL_START_FUNC | SCSW_ACTL_START_PEND);
> s->flags &= ~SCSW_FLAGS_MASK_PNO;
>
> - do_subchannel_work(sch);
> + do_subchannel_work(sch, orb);
> ret = 0;
>
> out:
> @@ -957,7 +953,7 @@ int css_do_rsch(SubchDev *sch)
> }
>
> s->ctrl |= SCSW_ACTL_RESUME_PEND;
> - do_subchannel_work(sch);
> + do_subchannel_work(sch, NULL);
> ret = 0;
>
> out:
> @@ -1267,7 +1263,6 @@ void css_reset_sch(SubchDev *sch)
>
> sch->channel_prog = 0x0;
> sch->last_cmd_valid = false;
> - sch->orb = NULL;
> sch->thinint_active = false;
> }
>
> diff --git a/hw/s390x/css.h b/hw/s390x/css.h
> index e9b4405..220169e 100644
> --- a/hw/s390x/css.h
> +++ b/hw/s390x/css.h
> @@ -76,7 +76,6 @@ struct SubchDev {
> hwaddr channel_prog;
> CCW1 last_cmd;
> bool last_cmd_valid;
> - ORB *orb;
> bool thinint_active;
> /* transport-provided data: */
> int (*ccw_cb) (SubchDev *, CCW1);
> diff --git a/hw/s390x/virtio-ccw.c b/hw/s390x/virtio-ccw.c
> index 2bf0af8..1cb4e2c 100644
> --- a/hw/s390x/virtio-ccw.c
> +++ b/hw/s390x/virtio-ccw.c
> @@ -559,7 +559,6 @@ static int virtio_ccw_device_init(VirtioCcwDevice *dev, VirtIODevice *vdev)
> /* Initialize subchannel structure. */
> sch->channel_prog = 0x0;
> sch->last_cmd_valid = false;
> - sch->orb = NULL;
> sch->thinint_active = false;
> /*
> * Use a device number if provided. Otherwise, fall back to subchannel
>
prev parent reply other threads:[~2014-05-05 18:52 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-05-05 15:10 [Qemu-devel] [PATCH 0/3] qemu: pending s390 patches Cornelia Huck
2014-05-05 15:10 ` [Qemu-devel] [PATCH 1/3] s390x/helper: Fixed real-to-absolute address translation Cornelia Huck
2014-05-06 9:20 ` Alexander Graf
2014-05-05 15:10 ` [Qemu-devel] [PATCH 2/3] s390x/helper: Added format control bit to MMU translation Cornelia Huck
2014-05-05 15:10 ` [Qemu-devel] [PATCH 3/3] s390x/css: Don't save orb in subchannel Cornelia Huck
2014-05-05 18:52 ` Christian Borntraeger [this message]
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-all 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=5367DDDA.3050909@de.ibm.com \
--to=borntraeger@de.ibm.com \
--cc=agraf@suse.de \
--cc=cornelia.huck@de.ibm.com \
--cc=qemu-devel@nongnu.org \
/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;
as well as URLs for NNTP newsgroup(s).