[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH v3 06/11] x86/hvm: allowing registering EOI callbacks for GSIs


  • To: Jan Beulich <jbeulich@xxxxxxxx>
  • From: Roger Pau Monné <roger.pau@xxxxxxxxxx>
  • Date: Mon, 19 Apr 2021 10:31:26 +0200
  • Arc-authentication-results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com; dkim=pass header.d=citrix.com; arc=none
  • Arc-message-signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=fE4fqxepWG1lQFu4oIhhEc4JBOmCI95lUCTjTFdFK+4=; b=IG3k5zRM3+Udvo2Jyc4OZIWko/CgNXDG3jMJK/D4pGhGBe4uEmJPM4zjM9e8Dr2F9BrO7H0pDiHRBBfMRvtCiip88bEGb8sn2WooPcPYDwEOP/VwvywqnTfM/CzTtVHESIhyKc0hg3MS1eVlnrE+5sSTG3mB+2F0Pytz3NErjwjpxyo362znPvuDOm0klgq+4i43C62KkMBaY9I76EFy5E1W6CX5DKVi/FN7Ym5qrPkrCwGKhvU8tT5Q0l1j9XbXhINq4tpmKzcEU3aphRzEzGApOaz/RRLv9hSOfs3wV0KDxbyH9iM1GeRyeY3HzyCFoZ7bQbydZXO3OxTW+z4Gig==
  • Arc-seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=BqG6wAI7cMX8JI31X+yygXum8gMneodcgSR7zx2cfqQOq6fVV3QsNS6RQO3ZG5W/1soKjF3NBxP4Cmv9oJbbBEXkvheEheAK4wL2rC/LXyGCkPnqtlU4GtbaCEpgjSBq1sPb45H1JkO7E7w3Qy1aSQFct6+C8HuptV+L3xUcWaifrUXjPT/vSfEzSFvOw18T7JCitIHngmJHjWDTd/yYCfDRj+L0JUkRm9wubhkgrQ3X4eu9S+tpf4hYbxfTLOsy8twi5hy1XvGMuvsM4aPEFKH8/NwLMB5Qf4MPPoHP+q1NQXrm9GSWC4zIxigXDCKpiODGVrXlTjcs1wpotAAzkQ==
  • Authentication-results: esa1.hc3370-68.iphmx.com; dkim=pass (signature verified) header.i=@citrix.onmicrosoft.com
  • Cc: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>, Wei Liu <wl@xxxxxxx>, <xen-devel@xxxxxxxxxxxxxxxxxxxx>
  • Delivery-date: Mon, 19 Apr 2021 08:31:43 +0000
  • Ironport-hdrordr: A9a23:57sgZaD8267ZegzlHeh+sceALOonbusQ8zAX/mhsVB1YddGZnc iynPIdkST5kioVRWtIo729EYOLKEm9ybde544NMbC+GDT3oWfAFvAH0aLO4R3FXxf/+OlUyL t6f8FFYuHYIFBmga/BjzWQPM0nxLC8npyAocf74zNTQRpxa6dmhj0JbzqzNkFtXgFJCd4YOf Onl6l6jgGtc3gWcci3b0NtN4T+jubGiY78Zlo+DwMngTPksRqT9LX4HxKEty1uMQ9n/LFKyw n4uj283IqPmbWRyhjQ12jchq4m5efJ+594K+GnzuQQIjXooA60aIpmQK3qhkFInMifrGwEvf OJjxA8P9liy365RBDLnTLdnzPO/Rxry3j+xUSWiXHuyPaJOg4SOo56qq9yNj76gnBQ2+1U4e Zw8E+y86dzN1fmmh/w4tDZPisa7XackD4ZvsM4y0BEXZB2Us42kaUvuHl7Pb0nByzA5IUuAI BVfbvhzccTS1+cYnzD11MfueCEbzA2FheCdEAIptaY5ThQhGx41EsV3qUk7w89yK4=
  • Ironport-sdr: DVlt1wLN5EQ8Q2U0sQ/uYOS3Y8AFQckWFiOvnjr+Q4Iu/yLl1GpVfDIoOXc+72aGy+VEHuhm31 7M7hThMBl7lDbmrFymDclS+gyvZ8jfougzm21SU8yO2L0C+jQ+jD/EbkPYxdFeoXSC8MY0tZmH zMPNysHLoPQNFcawG/vm9ppRwgEDBcJYuQwWVWllMPnB+OD6LGTak0mTSPPv5eWBrAThGOHhVH ZtFNgszADfymTRYR+S9FRPUPpSS4v3CZUunfGSW9I9RfC6WtSZSLeXufS/dETAh+TQwfpgYOK+ I6E=
  • List-id: Xen developer discussion <xen-devel.lists.xenproject.org>

On Fri, Apr 16, 2021 at 09:29:26AM +0200, Jan Beulich wrote:
> On 15.04.2021 18:04, Roger Pau Monné wrote:
> > On Wed, Apr 07, 2021 at 07:08:06PM +0200, Roger Pau Monné wrote:
> >> On Wed, Apr 07, 2021 at 05:51:14PM +0200, Jan Beulich wrote:
> >>> On 31.03.2021 12:32, Roger Pau Monne wrote:
> >>>> --- a/xen/arch/x86/hvm/irq.c
> >>>> +++ b/xen/arch/x86/hvm/irq.c
> >>>> +void hvm_gsi_execute_callbacks(unsigned int gsi)
> >>>> +{
> >>>> +    struct hvm_irq *hvm_irq = hvm_domain_irq(current->domain);
> >>>> +    struct hvm_gsi_eoi_callback *cb;
> >>>> +
> >>>> +    read_lock(&hvm_irq->gsi_callbacks_lock);
> >>>> +    list_for_each_entry ( cb, &hvm_irq->gsi_callbacks[gsi], list )
> >>>> +        cb->callback(gsi, cb->data);
> >>>> +    read_unlock(&hvm_irq->gsi_callbacks_lock);
> >>>> +}
> >>>
> >>> Just as an observation (for now at least) - holding the lock here
> >>> means the callbacks cannot re-register themselves.
> >>
> >> Well, re-registering would be weird, as the callback is not
> >> unregistered after execution. What is likely more relevant is that the
> >> callback cannot unregister itself. I haven't found a need for this so
> >> far, so I think it's fine.
> > 
> > I'm afraid I was wrong here - rtc_pf_callback could attempt to
> > unregister the timer, and thus end up calling
> > hvm_gsi_unregister_callback inside of a callback.
> > 
> > I need to figure a way to solve this. We already run the RTC in no ack
> > mode (which is correct because of the flag we expose in the WAET ACPI
> > table), and hence I wonder if we still need to keep the code for the
> > strict_mode around, since it's not used at all. Would you be OK with
> > me removing the mode_strict related code?
> 
> Not sure, to be honest. Years ago I did submit a patch correcting this
> ("x86/HVM: tie RTC emulation mode to enabling of Viridian emulation"),
> as we shouldn't assume all guests to even know of WAET.

It's very likely guest that don't even know about WAET to continue
working fine even in the no_ack mode. In fact the current code for
strict_mode will inject 10 interrupts without REG_C being read, as
there's no check for the value of REG_C before injecting the
interrupt.

> Hence running
> uniformly in rtc_mode_no_ack isn't really correct. I'm still carrying
> this patch, as Tim (iirc) had asked not to tie the behavior to the
> Viridian param, but give it its own one. Which I still didn't get to.
> 
> Of course, if we decided to drop mode_strict support, I could also
> drop that patch ...

AFAICT the no_ack mode it's been used since Xen 4.3, and so far we had
no complains, so I think it's safe to just remove the code for
strict_mode. It can always be fetched from the repository history if
there's a need to support strict_mode in the future.

Thanks, Roger.



 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.