[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [qemu-s390x] [Qemu-devel] [PATCH 1/2] vfio-ccw: add force unlimited
From: |
Cornelia Huck |
Subject: |
Re: [qemu-s390x] [Qemu-devel] [PATCH 1/2] vfio-ccw: add force unlimited prefetch property |
Date: |
Mon, 14 May 2018 15:45:15 +0200 |
On Mon, 14 May 2018 14:40:13 +0200
Halil Pasic <address@hidden> wrote:
> On 05/14/2018 02:18 PM, Cornelia Huck wrote:
> > On Thu, 10 May 2018 02:07:11 +0200
> > Halil Pasic <address@hidden> wrote:
> >
> >> There is at least one control program (guest) that although it does not
> >
> > I'd drop 'control program' here as well, as it probably confuses more
> > than helps.
> >
>
> Will do (everywhere).
>
> >> rely on the guarantees provided by ORB 1 word 9 bit (aka unlimited
> >> prefetch, aka P bit) not being set, fails to tell this to the machine.
> >>
> >> Usually this ain't a big deal, as the story is usually about performance
> >> optimizations only. But vfio-ccw can not provide the guarantees required
> >> if the bit is not set.
> >
> > Isn't that also about channel program rewriting? Or am I mixing things
> > up?
> >
>
> I don't understand the question. Can you rephrase it (maybe with more
> details)?
If the caller doesn't allow prefetching, it may manipulate parts of the
channel program that have not yet been fetched. For example, setting a
suspend flag and manipulating ccws that come after that. (I think the
ctc and lcs drivers do something like that, or at least did in the
past.)
>
> >>
> >> Since it is impossible to implement support for P bit not set (at
> >> impossible least without transitioning to lower level protocols) in
> >> vfio-ccw let's provide a manual override.
> >
> > Hm... so the basic idea seems to be "we don't support !PFCH, but we
> > know that the guest will not rely on the guarantees, so we provide the
> > host admin with a way to override the setting"?
> >
>
> That is the idea, although I'm not sure what 'the setting' is.
Lack of coffee :) I meant 'handling'.
>
> >>
> >> Signed-off-by: Halil Pasic <address@hidden>
> >> Suggested-by: Dong Jia Shi <address@hidden>
> >> Acked-by: Jason J. Herne <address@hidden>
> >> Tested-by: Jason J. Herne <address@hidden>
> >> ---
> >> hw/s390x/css.c | 3 +--
> >> hw/vfio/ccw.c | 13 +++++++++++++
> >> 2 files changed, 14 insertions(+), 2 deletions(-)
> >>
> >> diff --git a/hw/s390x/css.c b/hw/s390x/css.c
> >> index 301bf1772f..32f1b2820d 100644
> >> --- a/hw/s390x/css.c
> >> +++ b/hw/s390x/css.c
> >> @@ -1196,8 +1196,7 @@ static IOInstEnding
> >> sch_handle_start_func_passthrough(SubchDev *sch)
> >> * Only support prefetch enable mode.
> >> * Only support 64bit addressing idal.
> >> */
> >> - if (!(orb->ctrl0 & ORB_CTRL0_MASK_PFCH) ||
> >> - !(orb->ctrl0 & ORB_CTRL0_MASK_C64)) {
> >> + if (!(orb->ctrl0 & ORB_CTRL0_MASK_C64)) {
> >> warn_report("vfio-ccw requires PFCH and C64 flags set");
> >
> > Adapt this warning?
> >
> >> sch_gen_unit_exception(sch);
> >> css_inject_io_interrupt(sch);
> >> diff --git a/hw/vfio/ccw.c b/hw/vfio/ccw.c
> >> index e67392c5f9..32cf606a71 100644
> >> --- a/hw/vfio/ccw.c
> >> +++ b/hw/vfio/ccw.c
> >> @@ -32,6 +32,8 @@ typedef struct VFIOCCWDevice {
> >> uint64_t io_region_offset;
> >> struct ccw_io_region *io_region;
> >> EventNotifier io_notifier;
> >> + /* force unlimited prefetch */
> >> + bool f_upfch;
> >
> > force_unlimited_prefetch? You only use it that often :)
> >
>
> I would have expected complaints for the property name in the
> first place. I think we should first find a good name for the
> property and then consider the rest.
What about 'force_pfch' (at least matches the name of the bit in the
code)?
>
> >> } VFIOCCWDevice;
> >>
> >> static void vfio_ccw_compute_needs_reset(VFIODevice *vdev)
> >> @@ -52,8 +54,18 @@ static IOInstEnding vfio_ccw_handle_request(SubchDev
> >> *sch)
> >> S390CCWDevice *cdev = sch->driver_data;
> >> VFIOCCWDevice *vcdev = DO_UPCAST(VFIOCCWDevice, cdev, cdev);
> >> struct ccw_io_region *region = vcdev->io_region;
> >> + bool upfch = sch->orb.ctrl0 & ORB_CTRL0_MASK_PFCH;
> >
> > Frankly, I'd drop that variable...
> >
> >> int ret;
> >>
> >> + if (!upfch && !vcdev->f_upfch) {
> >> + warn_report("vfio-ccw requires PFCH flag set");
> >> + sch_gen_unit_exception(sch);
> >> + css_inject_io_interrupt(sch);
> >> + return IOINST_CC_EXPECTED;
> >> + } else if (!upfch) {
> >> + sch->orb.ctrl0 |= ORB_CTRL0_MASK_PFCH;
> >> + }
> >
> > and do
> >
> > if (!(sch->orb.ctrl0 & ORB_CTR0_MASK_PFCH)) {
> > if (!vcdev->f_upfch) {
> > ...error...
> > } else {
> > ...set bit...
> > }
> > }
> >
> > Avoids discussions around variable naming, as well :)
> >
>
> Seems like more indentation and more lies of code to me, but
> no strong feelings. It may be easier to read.
Yes, I think this makes it easier to see which branch is taken.
>
> >> +
> >> QEMU_BUILD_BUG_ON(sizeof(region->orb_area) != sizeof(ORB));
> >> QEMU_BUILD_BUG_ON(sizeof(region->scsw_area) != sizeof(SCSW));
> >> QEMU_BUILD_BUG_ON(sizeof(region->irb_area) != sizeof(IRB));
> >> @@ -429,6 +441,7 @@ static void vfio_ccw_unrealize(DeviceState *dev, Error
> >> **errp)
> >>
> >> static Property vfio_ccw_properties[] = {
> >> DEFINE_PROP_STRING("sysfsdev", VFIOCCWDevice, vdev.sysfsdev),
> >> + DEFINE_PROP_BOOL("f-upfch", VFIOCCWDevice, f_upfch, false),
> >
> > Any particular reason you want to control this on a device-by-device
> > level?
> >
>
> It seemed natural for me. What are our options here? I don't like
> machine property, as it is not a machine thing.
On the one hand, we want to accommodate certain guests; on the other
hand, the guest is free to address different devices in different ways
(although I would expect the difference to be more by different device
types).
In the end, it seems that a per-device property is the easiest approach
after all. (The admin can probably set this globally, if desired.)
Another thought: Should there be a warning logged somewhere if we
actually force pfch (i.e., not just set the property)?
- [qemu-s390x] [PATCH 0/2] vfio-ccw: loosen orb flags checks, Halil Pasic, 2018/05/09
- [qemu-s390x] [PATCH 1/2] vfio-ccw: add force unlimited prefetch property, Halil Pasic, 2018/05/09
- Re: [qemu-s390x] [PATCH 1/2] vfio-ccw: add force unlimited prefetch property, Cornelia Huck, 2018/05/14
- Re: [qemu-s390x] [Qemu-devel] [PATCH 1/2] vfio-ccw: add force unlimited prefetch property, Halil Pasic, 2018/05/14
- Re: [qemu-s390x] [Qemu-devel] [PATCH 1/2] vfio-ccw: add force unlimited prefetch property,
Cornelia Huck <=
- Re: [qemu-s390x] [Qemu-devel] [PATCH 1/2] vfio-ccw: add force unlimited prefetch property, Halil Pasic, 2018/05/14
- Re: [qemu-s390x] [Qemu-devel] [PATCH 1/2] vfio-ccw: add force unlimited prefetch property, Cornelia Huck, 2018/05/14
- Re: [qemu-s390x] [Qemu-devel] [PATCH 1/2] vfio-ccw: add force unlimited prefetch property, Halil Pasic, 2018/05/16
- Re: [qemu-s390x] [Qemu-devel] [PATCH 1/2] vfio-ccw: add force unlimited prefetch property, Cornelia Huck, 2018/05/17
- Re: [qemu-s390x] [Qemu-devel] [PATCH 1/2] vfio-ccw: add force unlimited prefetch property, Halil Pasic, 2018/05/17
[qemu-s390x] [PATCH 2/2] vfio-ccw: remove orb.c64 (64 bit data addresses) check, Halil Pasic, 2018/05/09