On Thu, Jun 25, 2015 at 12:48 PM, Ed White <edmund.h.wh...@intel.com> wrote:
> On 06/25/2015 06:40 AM, Razvan Cojocaru wrote: > > On 06/25/2015 03:44 PM, Lengyel, Tamas wrote: > >> On Wed, Jun 24, 2015 at 2:06 PM, Ed White <edmund.h.wh...@intel.com > >> <mailto:edmund.h.wh...@intel.com>> wrote: > >> On 06/24/2015 09:15 AM, Lengyel, Tamas wrote: > >> >> +bool_t p2m_set_altp2m_mem_access(struct domain *d, uint16_t idx, > >> >> + unsigned long pfn, > xenmem_access_t > >> >> access) > >> >> +{ > >> >> > >> > > >> > This function IMHO should be merged with p2m_set_mem_access and > should be > >> > triggerable with the same memop (XENMEM_access_op) hypercall > instead of > >> > introducing a new hvmop one. > >> > >> I think we should vote on this. My view is that it makes > >> XENMEM_access_op > >> too complicated to use. > >> > >> The two functions are not very long and share enough code that it would > >> justify merging. The only big change added is the copy from host->alt > >> when the entry doesn't exists in alt, and that itself is pretty self > >> contained. Let's see if we can get a third opinion on it.. > > > > At first sight (I admit I'm rather late in the game and haven't had a > > chance to follow the series closely from the beginning), the two > > functions do seem to be mergeable (or at least the common code factored > > out in static helper functions). > > > > Also, if Ed's concern is that the libxc API would look unnatural if > > xc_set_mem_access() is used for both purposes, as far as I can tell the > > only difference could be a non-zero last altp2m parameter, so I agree > > with you that the less functions doing almost the same thing the better > > (I have been guilty of this in the past too, for example with my > > xc_enable_introspection() function ;) ). > > > > So I'd say, yes, if possible merge them. > > So here are my reasons why I don't think we should merge the hypercalls, > in more detail: > > Although the two hypercalls are similar, they are not identical. For one > thing, the existing hypercall can only be used cross-domain whereas the > altp2m one can be used cross-domain or intra-domain. Fair point, the use of rcu_lock_live_remote_domain_by_id in the memaccess memop handler precludes it working for the intra-domain case. However, now that we have a valid use-case for it working when a domain applies restrictions on itself, it would be fine to change that to rcu_lock_domain_by_any_id. It has been just used as a sanity check. The code you are using in hvm.c could be abstracted as p2m_altp2m_sanity_check: "!is_hvm_domain(d) || !hvm_altp2m_supported() || !d->arch.altp2m_active" and ran when the altp2m field is non-zero to catch buggy tools. > Also, the existing > hypercall can be used to modify a range of pages and the new one can only > modify a single page, and that is intentional. > Please elaborate on this. > > As I see it, the implementation in hvm.c would become a lot less clean, > and every direct user of the existing hypercall would have to change for > no good reason. > For 4.6 I reworked the entire vm_event/mem_access system, so that is already happening irrespective of altp2m. It's fine to add support for the altp2m field before 4.6 freezes. > Razvan's suggestion to merge the functions that implement the p2m changes > I'm more ambivalent about. Personally, I prefer not to have code that > contains lots of conditional logic, which would be the result, but I > don't feel that strongly about it. > > Ed > Thanks, Tamas
_______________________________________________ Xen-devel mailing list Xen-devel@lists.xen.org http://lists.xen.org/xen-devel