From: Cornelia Huck <cohuck@redhat.com>
To: Eric Farman <farman@linux.ibm.com>
Cc: linux-s390@vger.kernel.org, kvm@vger.kernel.org,
Halil Pasic <pasic@linux.ibm.com>,
Jason Herne <jjherne@linux.ibm.com>,
Jared Rossi <jrossi@linux.ibm.com>
Subject: Re: [PATCH v3 2/8] vfio-ccw: Register a chp_event callback for vfio-ccw
Date: Fri, 17 Apr 2020 12:29:07 +0200 [thread overview]
Message-ID: <20200417122907.034c8508.cohuck@redhat.com> (raw)
In-Reply-To: <20200417023001.65006-3-farman@linux.ibm.com>
On Fri, 17 Apr 2020 04:29:55 +0200
Eric Farman <farman@linux.ibm.com> wrote:
> From: Farhan Ali <alifm@linux.ibm.com>
>
> Register the chp_event callback to receive channel path related
> events for the subchannels managed by vfio-ccw.
>
> Signed-off-by: Farhan Ali <alifm@linux.ibm.com>
> Signed-off-by: Eric Farman <farman@linux.ibm.com>
> ---
>
> Notes:
> v2->v3:
> - Add a call to cio_cancel_halt_clear() for CHP_VARY_OFF [CH]
>
> v1->v2:
> - Move s390dbf before cio_update_schib() call [CH]
>
> v0->v1: [EF]
> - Add s390dbf trace
>
> drivers/s390/cio/vfio_ccw_drv.c | 45 +++++++++++++++++++++++++++++++++
> 1 file changed, 45 insertions(+)
>
> diff --git a/drivers/s390/cio/vfio_ccw_drv.c b/drivers/s390/cio/vfio_ccw_drv.c
> index 8715c1c2f1e1..e48967c475e7 100644
> --- a/drivers/s390/cio/vfio_ccw_drv.c
> +++ b/drivers/s390/cio/vfio_ccw_drv.c
> @@ -19,6 +19,7 @@
>
> #include <asm/isc.h>
>
> +#include "chp.h"
> #include "ioasm.h"
> #include "css.h"
> #include "vfio_ccw_private.h"
> @@ -262,6 +263,49 @@ static int vfio_ccw_sch_event(struct subchannel *sch, int process)
> return rc;
> }
>
> +static int vfio_ccw_chp_event(struct subchannel *sch,
> + struct chp_link *link, int event)
> +{
> + struct vfio_ccw_private *private = dev_get_drvdata(&sch->dev);
> + int mask = chp_ssd_get_mask(&sch->ssd_info, link);
> + int retry = 255;
> +
> + if (!private || !mask)
> + return 0;
> +
> + VFIO_CCW_MSG_EVENT(2, "%pUl (%x.%x.%04x): mask=0x%x event=%d\n",
> + mdev_uuid(private->mdev), sch->schid.cssid,
> + sch->schid.ssid, sch->schid.sch_no,
> + mask, event);
> +
> + if (cio_update_schib(sch))
> + return -ENODEV;
> +
> + switch (event) {
> + case CHP_VARY_OFF:
> + /* Path logically turned off */
> + sch->opm &= ~mask;
> + sch->lpm &= ~mask;
> + cio_cancel_halt_clear(sch, &retry);
> + break;
> + case CHP_OFFLINE:
> + /* Path is gone */
> + cio_cancel_halt_clear(sch, &retry);
Looking at this again: While calling the same function for both
CHP_VARY_OFF and CHP_OFFLINE is the right thing to do,
cio_cancel_halt_clear() is probably not that function. I don't think we
want to terminate an I/O that does not use the affected path.
Looking at what the normal I/O subchannel driver does, it first checks
for the lpum and does not do anything if the affected path does not
show up there. Following down the git history rabbit hole, that basic
check (surviving several reworks) precedes the first git import, so
there's unfortunately no patch description explaining that. Looking at
the PoP, I cannot find a whole lot of details... I think some of the
path-handling stuff is explained in non-public documentation, and
whoever wrote the original code (probably me) relied on the information
there.
tl;dr: We probably should check the lpum here as well.
> + break;
> + case CHP_VARY_ON:
> + /* Path logically turned on */
> + sch->opm |= mask;
> + sch->lpm |= mask;
> + break;
> + case CHP_ONLINE:
> + /* Path became available */
> + sch->lpm |= mask & sch->opm;
> + break;
> + }
> +
> + return 0;
> +}
> +
> static struct css_device_id vfio_ccw_sch_ids[] = {
> { .match_flags = 0x1, .type = SUBCHANNEL_TYPE_IO, },
> { /* end of list */ },
> @@ -279,6 +323,7 @@ static struct css_driver vfio_ccw_sch_driver = {
> .remove = vfio_ccw_sch_remove,
> .shutdown = vfio_ccw_sch_shutdown,
> .sch_event = vfio_ccw_sch_event,
> + .chp_event = vfio_ccw_chp_event,
> };
>
> static int __init vfio_ccw_debug_init(void)
next prev parent reply other threads:[~2020-04-17 10:29 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-04-17 2:29 [PATCH v3 0/8] s390x/vfio-ccw: Channel Path Handling [KVM] Eric Farman
2020-04-17 2:29 ` [PATCH v3 1/8] vfio-ccw: Introduce new helper functions to free/destroy regions Eric Farman
2020-04-17 2:29 ` [PATCH v3 2/8] vfio-ccw: Register a chp_event callback for vfio-ccw Eric Farman
2020-04-17 10:29 ` Cornelia Huck [this message]
2020-04-17 12:38 ` Eric Farman
2020-04-17 2:29 ` [PATCH v3 3/8] vfio-ccw: Refactor the unregister of the async regions Eric Farman
2020-04-17 2:29 ` [PATCH v3 4/8] vfio-ccw: Introduce a new schib region Eric Farman
2020-04-21 9:24 ` Cornelia Huck
2020-04-17 2:29 ` [PATCH v3 5/8] vfio-ccw: Introduce a new CRW region Eric Farman
2020-04-21 9:41 ` Cornelia Huck
2020-04-21 11:02 ` Eric Farman
2020-04-21 11:08 ` Cornelia Huck
2020-04-21 12:03 ` Eric Farman
2020-04-17 2:29 ` [PATCH v3 6/8] vfio-ccw: Refactor IRQ handlers Eric Farman
2020-04-17 2:30 ` [PATCH v3 7/8] vfio-ccw: Wire up the CRW irq and CRW region Eric Farman
2020-04-21 12:06 ` Cornelia Huck
2020-04-17 2:30 ` [PATCH v3 8/8] vfio-ccw: Add trace for CRW event Eric Farman
2020-04-21 12:11 ` Cornelia Huck
2020-04-21 15:35 ` [PATCH v3 0/8] s390x/vfio-ccw: Channel Path Handling [KVM] Cornelia Huck
2020-04-22 3:10 ` Eric Farman
2020-04-22 10:27 ` Cornelia Huck
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=20200417122907.034c8508.cohuck@redhat.com \
--to=cohuck@redhat.com \
--cc=farman@linux.ibm.com \
--cc=jjherne@linux.ibm.com \
--cc=jrossi@linux.ibm.com \
--cc=kvm@vger.kernel.org \
--cc=linux-s390@vger.kernel.org \
--cc=pasic@linux.ibm.com \
/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).