All of lore.kernel.org
 help / color / mirror / Atom feed
From: Zachary Amsden <zach-pghWNbHTmq7QT0dZR+AlfA@public.gmane.org>
To: Jeremy Fitzhardinge <jeremy-TSDbQ3PG+2Y@public.gmane.org>
Cc: kvm-devel
	<kvm-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org>,
	virtualization
	<virtualization-qjLDD68F18O7TbgM5vRIOg@public.gmane.org>
Subject: Re: [PATCH 0/5] KVM paravirt_ops implementation
Date: Tue, 19 Jun 2007 17:21:57 -0700	[thread overview]
Message-ID: <46787325.30804@vmware.com> (raw)
In-Reply-To: <4676084F.3090901-TSDbQ3PG+2Y@public.gmane.org>

Jeremy Fitzhardinge wrote:
> Well, I was suggesting we could print the banner later rather than
> forcing an earlier init.
>
> The important part is that you set your pv_ops before patching occurs,
> since that will bake the function calls into the rest of the kernel, and
> it will ignore any further changes to the paravirt_ops structure.
>
> I think Zach was originally thinking of initializing VMI much later
> (even as a module load), but the subtleties of inveigling its way into
> the kernel at that late stage got too complex.
>   

Definition: software-reliant paravirtualization is a guest-involved 
virtualization technique in which non-virtualizable operations are 
substituted in software with virtualized operations, thus making 
redirection of instruction flow necessary for correct operation.

For software-reliant paravirtualization, it is difficult to atomically 
switch from natural instructions to simulated para-instructions on the 
fly; you would need stop_machine_run that also holds off NMIs (so as to 
keep IF flag state intact across a window where non-virtualizable IRET 
instruction is not yet patched), and you would need to re-patch the 
kernel and modules dynamically.  Another problem is unloading the 
module, which requires restoring the smashed native paravirt-ops - some 
of which may have been patched, some not.  It is possible to do this 
from a module, just obtuse, and for 32-bit, not really worth the effort 
IMHO.

Definition: software-advisory paravirtualization is a guest-involved 
virtualization technique in which only advisory state is communicated to 
the hypervisor, thus making redirection of instruction flow at any 
particular point optional for more efficient virtualization (and 
non-virtualizability is eliminated by some other mechanism).

For software-advisory paravirtualization, it is totally possible to just 
switch over to new pv-ops at any time, and there need be no atomicity.  
This would make a paravirt-ops module rather easy to write; it simply 
needs to run some init code on each CPU and the patch paravirt-ops at 
leisure.

Now it is quite likely at least one developer is going to be assuming 
hardware virtualization capabilities for 64-bit paravirt, thus making an 
advisory method with module loading (and unloading) a more practical 
option than dissecting the 64-bit startup sequence.  In that case, 
perhaps having a paravirt_register function which would check to make 
sure no conflicting paravirt-ops have already been installed, printing 
the banner on success would be the most logical.  The 
paravirt_unregister function can then simply restore the native 
paravirt-ops.

More importantly, now device drivers for virtual devices would have a 
way to inquire into which set of paravirt-ops was loaded by having an 
official registered interface rather than an ad-hoc (if xxx_running == 
1) mess, and now the paravirt driver modules are nicely decoupled from 
the boot-strap code and can be loaded dynamically.

Zach

-------------------------------------------------------------------------
This SF.net email is sponsored by DB2 Express
Download DB2 Express C - the FREE version of DB2 express and take
control of your XML. No limits. Just data. Click to get it now.
http://sourceforge.net/powerbar/db2/

  parent reply	other threads:[~2007-06-20  0:21 UTC|newest]

Thread overview: 85+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-06-18  2:56 [PATCH 0/5] KVM paravirt_ops implementation Anthony Liguori
     [not found] ` <4675F462.1010708-rdkfGonbjUSkNkDKm+mE6A@public.gmane.org>
2007-06-18  2:58   ` [PATCH 1/5] KVM paravirt_ops core infrastructure Anthony Liguori
     [not found]     ` <4675F4C3.6050700-rdkfGonbjUSkNkDKm+mE6A@public.gmane.org>
2007-06-18  8:03       ` Avi Kivity
     [not found]         ` <46763C6B.9050004-atKUWr5tajBWk0Htik3J/w@public.gmane.org>
2007-06-18 12:25           ` Anthony Liguori
     [not found]             ` <467679C5.6030201-rdkfGonbjUSkNkDKm+mE6A@public.gmane.org>
2007-06-18 12:28               ` Avi Kivity
2007-06-26  8:04       ` Dor Laor
     [not found]         ` <64F9B87B6B770947A9F8391472E032160C73025E-yEcIvxbTEBqsx+V+t5oei8rau4O3wl8o3fe8/T/H7NteoWH0uzbU5w@public.gmane.org>
2007-06-26  8:45           ` Jun Koi
     [not found]             ` <fdaac4d50706260145x1ebceadt432edd5b6a6ac1f2-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2007-06-26 11:57               ` Anthony Liguori
2007-06-26 11:56           ` Anthony Liguori
2007-06-18  2:58   ` [PATCH 2/5] KVM: Implement CR read caching for KVM paravirt_ops Anthony Liguori
     [not found]     ` <4675F4F1.5090207-rdkfGonbjUSkNkDKm+mE6A@public.gmane.org>
2007-06-18  8:05       ` Avi Kivity
     [not found]         ` <46763CD3.3060704-atKUWr5tajBWk0Htik3J/w@public.gmane.org>
2007-06-18 12:26           ` Anthony Liguori
2007-06-18  8:11       ` Avi Kivity
     [not found]         ` <46763E35.8020108-atKUWr5tajBWk0Htik3J/w@public.gmane.org>
2007-06-18 12:27           ` Anthony Liguori
2007-06-18  3:00   ` [PATCH 3/5] KVM: Add paravirt MMU write support Anthony Liguori
     [not found]     ` <4675F533.40809-rdkfGonbjUSkNkDKm+mE6A@public.gmane.org>
2007-06-18  8:20       ` Avi Kivity
     [not found]         ` <46764061.9080705-atKUWr5tajBWk0Htik3J/w@public.gmane.org>
2007-06-18 12:33           ` Anthony Liguori
     [not found]             ` <46767B8C.9050001-rdkfGonbjUSkNkDKm+mE6A@public.gmane.org>
2007-06-18 12:38               ` Avi Kivity
     [not found]                 ` <46767CD1.7030208-atKUWr5tajBWk0Htik3J/w@public.gmane.org>
2007-06-18 12:48                   ` Anthony Liguori
2007-06-19 21:57           ` Anthony Liguori
     [not found]             ` <46785132.3070505-rdkfGonbjUSkNkDKm+mE6A@public.gmane.org>
2007-06-19 22:19               ` Jeremy Fitzhardinge
     [not found]                 ` <4678567C.6040400-TSDbQ3PG+2Y@public.gmane.org>
2007-06-19 22:28                   ` Anthony Liguori
2007-06-18  3:00   ` [PATCH 4/5] KVM: Add hypercall queue for paravirt_ops implementation Anthony Liguori
     [not found]     ` <4675F568.90608-rdkfGonbjUSkNkDKm+mE6A@public.gmane.org>
2007-06-18  4:00       ` Jeremy Fitzhardinge
     [not found]         ` <46760343.5070401-TSDbQ3PG+2Y@public.gmane.org>
2007-06-18  4:09           ` Jeremy Fitzhardinge
2007-06-18 12:22           ` Anthony Liguori
2007-06-18  9:07       ` Avi Kivity
     [not found]         ` <46764B47.5060403-atKUWr5tajBWk0Htik3J/w@public.gmane.org>
2007-06-18 12:40           ` Anthony Liguori
     [not found]             ` <46767D47.1010104-rdkfGonbjUSkNkDKm+mE6A@public.gmane.org>
2007-06-18 12:50               ` Avi Kivity
     [not found]                 ` <46767F98.70109-atKUWr5tajBWk0Htik3J/w@public.gmane.org>
2007-06-18 13:03                   ` Gregory Haskins
     [not found]                     ` <1182171781.4593.38.camel-5CR4LY5GPkvLDviKLk5550HKjMygAv58XqFh9Ls21Oc@public.gmane.org>
2007-06-18 13:19                       ` Anthony Liguori
     [not found]                         ` <4676867E.1090208-rdkfGonbjUSkNkDKm+mE6A@public.gmane.org>
2007-06-18 13:25                           ` Gregory Haskins
2007-06-18 13:22                   ` Anthony Liguori
     [not found]                     ` <46768724.3000509-rdkfGonbjUSkNkDKm+mE6A@public.gmane.org>
2007-06-18 13:35                       ` Avi Kivity
     [not found]                         ` <46768A3F.2010202-atKUWr5tajBWk0Htik3J/w@public.gmane.org>
2007-06-18 14:02                           ` Anthony Liguori
     [not found]                             ` <4676905B.6000805-rdkfGonbjUSkNkDKm+mE6A@public.gmane.org>
2007-06-18 15:08                               ` Avi Kivity
     [not found]                                 ` <46769FFE.6040502-atKUWr5tajBWk0Htik3J/w@public.gmane.org>
2007-06-18 15:20                                   ` Anthony Liguori
     [not found]                                     ` <4676A2D4.2040704-rdkfGonbjUSkNkDKm+mE6A@public.gmane.org>
2007-06-18 16:01                                       ` Avi Kivity
2007-06-18 16:00                                   ` Avi Kivity
     [not found]                                     ` <4676AC10.3090007-atKUWr5tajBWk0Htik3J/w@public.gmane.org>
2007-06-18 17:47                                       ` Anthony Liguori
2007-06-18  3:03   ` [PATCH 5/5] KVM: paravirt time source Anthony Liguori
     [not found]     ` <4675F601.3090706-rdkfGonbjUSkNkDKm+mE6A@public.gmane.org>
2007-06-18  9:24       ` Avi Kivity
2007-06-18 19:11       ` Jeremy Fitzhardinge
     [not found]         ` <4676D8E4.3020806-TSDbQ3PG+2Y@public.gmane.org>
2007-06-18 21:52           ` Anthony Liguori
     [not found]             ` <4676FEB9.6060308-rdkfGonbjUSkNkDKm+mE6A@public.gmane.org>
2007-06-18 22:04               ` Jeremy Fitzhardinge
     [not found]                 ` <46770162.6030101-TSDbQ3PG+2Y@public.gmane.org>
2007-06-18 23:33                   ` Anthony Liguori
     [not found]                     ` <4677163F.2030308-rdkfGonbjUSkNkDKm+mE6A@public.gmane.org>
2007-06-18 23:56                       ` Jeremy Fitzhardinge
     [not found]                         ` <46771BA0.2000308-TSDbQ3PG+2Y@public.gmane.org>
2007-06-19  0:53                           ` Anthony Liguori
2007-06-19  7:44                       ` Avi Kivity
     [not found]                         ` <4677894D.3050500-atKUWr5tajBWk0Htik3J/w@public.gmane.org>
2007-06-19  8:04                           ` Rusty Russell
2007-06-19 20:38           ` Anthony Liguori
     [not found]             ` <46783EDB.5010808-rdkfGonbjUSkNkDKm+mE6A@public.gmane.org>
2007-06-19 21:26               ` Jeremy Fitzhardinge
     [not found]                 ` <46784A0E.3080502-TSDbQ3PG+2Y@public.gmane.org>
2007-06-19 21:38                   ` Anthony Liguori
2007-06-21  7:04               ` Dong, Eddie
2007-06-18  3:19   ` [PATCH 0/5] KVM paravirt_ops implementation Jeremy Fitzhardinge
     [not found]     ` <4675F9DE.6080806-TSDbQ3PG+2Y@public.gmane.org>
2007-06-18  3:36       ` Anthony Liguori
     [not found]         ` <4675FDCA.4040006-rdkfGonbjUSkNkDKm+mE6A@public.gmane.org>
2007-06-18  4:21           ` Jeremy Fitzhardinge
     [not found]             ` <4676084F.3090901-TSDbQ3PG+2Y@public.gmane.org>
2007-06-18 12:46               ` Anthony Liguori
     [not found]                 ` <46767EB2.4090707-rdkfGonbjUSkNkDKm+mE6A@public.gmane.org>
2007-06-18 14:46                   ` Jeremy Fitzhardinge
     [not found]                     ` <46769AD2.9080105-TSDbQ3PG+2Y@public.gmane.org>
2007-06-18 15:07                       ` Anthony Liguori
2007-06-20  0:21               ` Zachary Amsden [this message]
     [not found]                 ` <46787325.30804-pghWNbHTmq7QT0dZR+AlfA@public.gmane.org>
2007-06-20 14:22                   ` Anthony Liguori
     [not found]                     ` <4679381E.9090404-rdkfGonbjUSkNkDKm+mE6A@public.gmane.org>
2007-06-20 15:32                       ` Jeremy Fitzhardinge
     [not found]                         ` <46794899.6070708-TSDbQ3PG+2Y@public.gmane.org>
2007-06-20 19:35                           ` Zachary Amsden
     [not found]                             ` <46798174.2060304-pghWNbHTmq7QT0dZR+AlfA@public.gmane.org>
2007-06-20 19:47                               ` Jeremy Fitzhardinge
2007-06-20 19:52                               ` Anthony Liguori
     [not found]                                 ` <46798597.4020903-rdkfGonbjUSkNkDKm+mE6A@public.gmane.org>
2007-06-20 20:03                                   ` Zachary Amsden
     [not found]                                     ` <4679882B.7070605-pghWNbHTmq7QT0dZR+AlfA@public.gmane.org>
2007-06-20 20:16                                       ` Jeremy Fitzhardinge
     [not found]                                         ` <46798B16.5090407-TSDbQ3PG+2Y@public.gmane.org>
2007-06-20 20:27                                           ` Anthony Liguori
     [not found]                                             ` <46798D9B.5000400-rdkfGonbjUSkNkDKm+mE6A@public.gmane.org>
2007-06-20 20:33                                               ` Jeremy Fitzhardinge
     [not found]                                                 ` <46798F1A.4090901-TSDbQ3PG+2Y@public.gmane.org>
2007-06-20 20:46                                                   ` Zachary Amsden
     [not found]                                                     ` <4679921A.8090607-pghWNbHTmq7QT0dZR+AlfA@public.gmane.org>
2007-06-20 20:55                                                       ` Jeremy Fitzhardinge
2007-06-20 22:08                                                   ` Anthony Liguori
     [not found]                                                     ` <4679A54F.5020908-rdkfGonbjUSkNkDKm+mE6A@public.gmane.org>
2007-06-20 22:33                                                       ` Jeremy Fitzhardinge
2007-06-20 20:43                                               ` Zachary Amsden
     [not found]                                                 ` <46799157.3070805-pghWNbHTmq7QT0dZR+AlfA@public.gmane.org>
2007-06-20 20:53                                                   ` Jeremy Fitzhardinge
     [not found]                                                     ` <467993B1.6000307-TSDbQ3PG+2Y@public.gmane.org>
2007-06-20 21:08                                                       ` Zachary Amsden
     [not found]                                                         ` <46799755.8060405-pghWNbHTmq7QT0dZR+AlfA@public.gmane.org>
2007-06-20 21:48                                                           ` Jeremy Fitzhardinge
2007-06-20 22:39                                                   ` Anthony Liguori
2007-06-20 20:22                                       ` Anthony Liguori
     [not found]                                         ` <46798C99.8010303-rdkfGonbjUSkNkDKm+mE6A@public.gmane.org>
2007-06-20 20:37                                           ` Zachary Amsden
     [not found]                                             ` <46799001.5020807-pghWNbHTmq7QT0dZR+AlfA@public.gmane.org>
2007-06-20 21:07                                               ` Jeremy Fitzhardinge
     [not found]                                                 ` <46799716.9040402-TSDbQ3PG+2Y@public.gmane.org>
2007-06-20 21:27                                                   ` ron minnich
2007-06-20 21:39                                                   ` H. Peter Anvin
2007-06-19 23:49           ` Zachary Amsden

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=46787325.30804@vmware.com \
    --to=zach-pghwnbhtmq7qt0dzr+alfa@public.gmane.org \
    --cc=jeremy-TSDbQ3PG+2Y@public.gmane.org \
    --cc=kvm-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org \
    --cc=virtualization-qjLDD68F18O7TbgM5vRIOg@public.gmane.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.