qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
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
> 

      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).