From mboxrd@z Thu Jan 1 00:00:00 1970 From: Mao Mingy Subject: Re: frame buffer shared by domains on arch arm linux Date: Fri, 23 Jan 2015 17:14:11 +0800 Message-ID: <54C210E3.50100@gmail.com> References: <54BF64F1.1090300@gmail.com> <54C05E05.1020200@gmail.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------040901010609080906010902" Return-path: In-Reply-To: List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: Stefano Stabellini Cc: xen-devel@lists.xen.org List-Id: xen-devel@lists.xenproject.org This is a multi-part message in MIME format. --------------040901010609080906010902 Content-Type: multipart/alternative; boundary="------------060705020406070003000103" --------------060705020406070003000103 Content-Type: text/plain; charset=windows-1252; format=flowed Content-Transfer-Encoding: 7bit On 22/01/2015 19:56, Stefano Stabellini wrote: > On Thu, 22 Jan 2015, Mao Mingy wrote: >> On 21/01/2015 18:51, Stefano Stabellini wrote: >>> On Wed, 21 Jan 2015, Mao Mingy wrote: >>>> I am trying to run the PVHVM guest on omap5 (arm arch) so that I can get >>>> the >>>> frame buffer shared by Domains. my setup are: >>>> 1. run xen4.5 after the u-boot. >>>> 2. start the dom0 (on linux kernel 3.12) on xen. >>> 3.12 is pretty old now >>> >>> >>>> 3. run the qemu (from xen 4.5) and HVM backend on xen. >>> Is this the QEMU binary that gets compiled as part of the Xen 4.5 build >>> and started automatically by xl if you configure the VM with a >>> framebuffer? >> Yes. it's compiled from Xen 4.5. exact location @ " >> ./xen_4.5/dist/install/usr/local/lib/xen/bin/qemu-system-i386 " >>>> 4. run the guest domain as "Machine: Dummy Virtual Machine, model: >>>> XENVM-4.5" >>>> 5. try to build a frame buffer on guest domain by >>>> CONFIG_XEN_FBDEV_FRONTEND = y >>>> CONFIG_FB_VIRTUAL=y >>>> >>>> after change to domain checking in the first list of xenfb_init(...) in >>>> xen-fbfront.c from >>>> if (!xen_pv_domain()) ---> if (!xen_domain()) >>>> the /dev/fb0 is built up on guest domain. However, writing to this fb has >>>> no >>>> response from screen. >>>> >>>> Why xenfb_init limited to PV domain only? >>> No it is not. In fact if you use a more recent Linux kernel, you won't >>> need to make any modifications and it should work out of the box. >> Thanks. Check the latest kernel source. it's already modified to if >> (!xen_domain()) >>>> Is the PVHVM mode supported by xen4.5 and linux3.12? >>> We don't call "PVHVM" guests on ARM: on ARM we only have one type of >>> guest. From the Linux kernel perspective, they are HVM domains. >>> >>> >>>> Looks at the xen.h at the linux kernel source: >>>> enum xen_domain_type { >>>> XEN_NATIVE, /* running on bare hardware */ >>>> XEN_PV_DOMAIN, /* running in a PV domain */ >>>> XEN_HVM_DOMAIN, /* running in a Xen hvm domain */ >>>> }; >>>> seems PVHVM is not there yet? >>> In this context PVHVM would just be XEN_PV_DOMAIN. >>> >>> >>>> Kindly enlighten me what could be the solution to get the frame buffer >>>> shared >>>> by Domains? >>> It should work out of the box with the latest Linux kernel and Xen 4.5, >>> if you add >>> >>> vfb=['vnc=1'] >>> >>> to the VM config file. >> Unfortunately, It's still no work after add the vfb=[ 'vnc=1' ]. fb >> open/write/ioctl/close from guest >> linux user space program return no error. However, just the screen do NOT >> display the contents wrote to vfb. >> Here is the configuration file when create the guest linux >> >> kernel = "/xen/images/zImage" >> memory = "128" >> name = "omap5" >> bootargs = "mem=128M vram=16M xencons=hvc" >> vcpus = 1 >> extra ="console=hvc0 xencons=hvc root=/dev/xvda ro" > You might want to use console=tty0 if you want to see the kernel output on the framebuffer. Thanks. I got the kernel trace output for my guest Linux. >> disk = [ 'phy:/dev/loop0,xvda,w' ] >> vfb=['vnc=1'] >> >> Kindly advise what could be the reason? > Do you have > > CONFIG_XEN_FBDEV_FRONTEND=y > CONFIG_INPUT_XEN_KBDDEV_FRONTEND=y > CONFIG_FRAMEBUFFER_CONSOLE=y > > in your guest kernel config? > > Could you please post the output of xenstore-ls, executing the command > after creating the VM? > Yes. The CONFIG_XXX mentioned above is in my guest kernel config. I've attached the related CONFIG_XXX of the guest Linux. Unfortunately, it's not an option for me to go for latest Linux kernel right now, so I debugged the problem by adding tracing information into the kernel and qemu source code to trace the issue. On guest Linux, when writing to frame buffer, the call path is xenfb_write() xenfb_refresh() xenfb_do_update() <---- here the XENFB_TYPE_UPDATE event is sent out. However, in the QEMU size on Dom0, There is NO XENFB_TYPE_UPDATE event is observed in xenfb_handle_events() of xenfb.c Shoud the XENFB_TYPE_UPDATE event sent by guest Linux reach the QEMU and processed and write to real hardware by QEMU? If so. why it's not received? any point to check? So far, I checked the following two points 1. QEMU's start up parameter, changed the original from Xen4.5 /usr/local/lib/xen/bin/qemu-system-i386 -xen-domid 0 -xen-attach -name dom0 */-nographic/* -M xenpv -daemonize -monitor /dev/null -serial /dev/null -parallel /dev/null -pidfile /var/run/qemu-dom0.pid to /usr/local/lib/xen/bin/qemu-system-i386 -xen-domid 0 -xen-attach -name dom0 /*-vga xenfb */-M xenpv -daemonize -monitor /dev/null -serial /dev/null -parallel /dev/null -pidfile /var/run/qemu-dom0.pid but it does NOT make any different for this aspect. 2. The return value of xen_be_register("vfb", &xen_framebuffer_ops) of xen_machine_pv.c of the QEMU it's checked and return 0. Looks not a problem The result of xenstore-ls are attached as well. Regards, Mao Mingya --------------060705020406070003000103 Content-Type: text/html; charset=windows-1252 Content-Length: 7130 Content-Transfer-Encoding: quoted-printable
On 22/01/2015 19:56, Stefano Stabellini wrote:
On Thu, 22 Jan 2015, Mao Mingy wrote:
On 21/01/2015 18:51, Stefano Stabellini wrote:
On Wed, 21 Jan 2015, Mao Mingy wrote:
I am trying to run the PVHVM guest on omap5 (arm arch) so that I can get
the
frame buffer shared by Domains. my setup are:
1. run xen4.5 after the u-boot.
2. start the dom0 (on linux kernel 3.12) on xen.
3.12 is pretty old now


3. run the qemu (from xen 4.5) and HVM backend on xen.
Is this the QEMU binary that gets compiled as part of the Xen 4.5 build
and started automatically by xl if you configure the VM with a
framebuffer=3F
Yes. it's compiled from Xen 4.5. exact location @ "
./xen_4.5/dist/install/usr/local/lib/xen/bin/qemu-system-i386 "
4. run the guest domain as "Machine: Dummy Virtual Machine, model:
XENVM-4.5"
5. try to build a frame buffer on guest domain by
     CONFIG_XEN_FBDEV_FRONTEND =3D y
     CONFIG_FB_VIRTUAL=3Dy

after change to domain checking in the first list of xenfb_init(...) in
xen-fbfront.c from
     if (!xen_pv_domain()) --->    if (!xen_domain())
the /dev/fb0 is built up on guest domain. However, writing to this fb has
no
response from screen.

Why xenfb_init limited to PV domain only=3F
No it is not. In fact if you use a more recent Linux kernel, you won't
need to make any modifications and it should work out of the box.
Thanks. Check the latest kernel source. it's already modified to if
(!xen_domain())
Is the PVHVM mode supported by xen4.5 and linux3.12=3F
We don't call "PVHVM" guests on ARM: on ARM we only have one type of
guest. From the Linux kernel perspective, they are HVM domains.


Looks at the xen.h at the linux kernel source:
enum xen_domain_type {
     XEN_NATIVE,        /* running on bare hardware    */
     XEN_PV_DOMAIN,        /* running in a PV domain      */
     XEN_HVM_DOMAIN,        /* running in a Xen hvm domain */
};
seems PVHVM is not there yet=3F
In this context PVHVM would just be XEN_PV_DOMAIN.


Kindly enlighten me what could be the solution to get the frame buffer
shared
by Domains=3F
It should work out of the box with the latest Linux kernel and Xen 4.5,
if you add

vfb=3D['vnc=3D1']

to the VM config file.
Unfortunately, It's still no work after add the vfb=3D[ 'vnc=3D1' ]. fb
open/write/ioctl/close from guest
linux user space program return no error. However, just the screen do NOT
display the contents wrote to vfb.
Here is the configuration file when create the guest linux

kernel =3D "/xen/images/zImage"
memory =3D "128"
name =3D "omap5"
bootargs =3D "mem=3D128M vram=3D16M xencons=3Dhvc"
vcpus =3D 1
extra =3D"console=3Dhvc0 xencons=3Dhvc root=3D/dev/xvda ro"
You might want to use console=3Dtty0 if you want to see the kernel output on the framebuffer.
Thanks. I got the kernel trace output for my guest Linux.

      
disk =3D [ 'phy:/dev/loop0,xvda,w' ]
vfb=3D['vnc=3D1']

Kindly advise what could be the reason=3F
Do you have

CONFIG_XEN_FBDEV_FRONTEND=3Dy
CONFIG_INPUT_XEN_KBDDEV_FRONTEND=3Dy
CONFIG_FRAMEBUFFER_CONSOLE=3Dy

in your guest kernel config=3F

Could you please post the output of xenstore-ls, executing the command
after creating the VM=3F

Yes. The CONFIG_XXX mentioned above is in my guest kernel config. I've attached the related CONFIG_XXX of the guest Linux.

Unfortunately, it's not an option for me to go for latest Linux kernel right now, so I debugged the problem by adding tracing information into the kernel and qemu source code to trace the issue.
On guest Linux, when writing to frame buffer, the call path is
xenfb_write()
=A0=A0=A0 xenfb_refresh()
=A0=A0=A0 =A0=A0=A0 xenfb_do_update() <---- here the XENFB_TYPE_UPDATE event is sent out.

However, in the QEMU size on Dom0,=A0 There is NO XENFB_TYPE_UPDATE event is observed in xenfb_handle_events() of xenfb.c

Shoud the XENFB_TYPE_UPDATE event sent by guest Linux reach the QEMU and processed and write to real hardware by QEMU=3F
If so. why it's not received=3F any point to check=3F

So far, I checked the following two points
1. QEMU's start up parameter, changed the original from Xen4.5
/usr/local/lib/xen/bin/qemu-system-i386 -xen-domid 0 -xen-attach -name dom0 -nographic -M xenpv -daemonize -monitor /dev/null -serial /dev/null -parallel /dev/null -pidfile /var/run/qemu-dom0.pid
to
/usr/local/lib/xen/bin/qemu-system-i386 -xen-domid 0 -xen-attach -name dom0 -vga xenfb -M xenpv -daemonize -monitor /dev/null -serial /dev/null -parallel /dev/null -pidfile /var/run/qemu-dom0.pid
but it does NOT make any different for this aspect.

2. The return value of xen_be_register("vfb", &xen_framebuffer_ops) of xen_machine_pv.c of the QEMU
it's checked and return 0. Looks not a problem

The result of xenstore-ls are attached as well.

Regards,
Mao Mingya






--------------060705020406070003000103-- --------------040901010609080906010902 Content-Type: text/plain; charset=UTF-8; name="xen_domu_config" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="xen_domu_config" #add for xen related config CONFIG_HVC_XEN_FRONTEND=y CONFIG_XEN_DEV_EVTCHN=y CONFIG_XENFS=y CONFIG_XEN_COMPAT_XENFS=y CONFIG_XEN_SYS_HYPERVISOR=y CONFIG_XEN_GNTDEV=y CONFIG_XEN_GRANT_DEV_A #From: http://wiki.xenproject.org/wiki/Mainline_Linux_Kernel_Configs#Configuring_the_Kernel_for_domU_Support #Enable these core options (Processor type and features| Paravirtualized guest support] CONFIG_HYPERVISOR_GUEST=y CONFIG_PARAVIRT=y CONFIG_XEN=y CONFIG_PARAVIRT_GUEST=y CONFIG_PARAVIRT_SPINLOCKS=y #And Xen pv console device support (Device Drivers|Character devices CONFIG_HVC_DRIVER=y CONFIG_HVC_XEN=y #And Xen disk and network support (Device Drivers|Block devices and Device Drivers|Network device support) CONFIG_XEN_FBDEV_FRONTEND=y CONFIG_XEN_BLKDEV_FRONTEND=y CONFIG_XEN_NETDEV_FRONTEND=y #And the rest (Device Drivers|Xen driver support) CONFIG_XEN_PCIDEV_FRONTEND=y CONFIG_INPUT_XEN_KBDDEV_FRONTEND=y CONFIG_XEN_FBDEV_FRONTEND=y CONFIG_XEN_XENBUS_FRONTEND=y CONFIG_XEN_SAVE_RESTORE=y CONFIG_XEN_GRANT_DEV_ALLOC=m CONFIG_FB_VIRTUAL=y #And for tmem support: CONFIG_XEN_TMEM=y CONFIG_CLEANCACHE=y CONFIG_FRONTSWAP=y CONFIG_XEN_SELFBALLOONING=y #xxxxwwww, add general virt machine, to be used as a domain U guest CONFIG_ARCH_VIRT=y #xxxxwwww. gc moudle give out exception, disable is first # CONFIG_GCCORE is not set # CONFIG_GCIOCTL is not set # CONFIG_GCBV is not set #xxxxwwww, to make frame buffer working CONFIG_FRAMEBUFFER_CONSOLE=y --------------040901010609080906010902 Content-Type: text/plain; charset=UTF-8; name="xenstore-ls_20150123.txt" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="xenstore-ls_20150123.txt" root@dra7xx-evm:/xen/images# xenstore-ls tool = "" xenstored = "" local = "" domain = "" 0 = "" domid = "0" name = "Domain-0" device = "" vfb = "" 0 = "" state = "1" backend-id = "0" backend = "/local/domain/0/backend/vfb/0/0" vkbd = "" 0 = "" state = "1" backend-id = "0" backend = "/local/domain/0/backend/vkbd/0/0" backend = "" vfb = "" 0 = "" 0 = "" type = "vnc" domain = "dom0" online = "1" state = "2" frontend-id = "0" frontend = "/local/domain/0/device/vfb/0" feature-resize = "1" hotplug-status = "connected" 1 = "" 0 = "" frontend = "/local/domain/1/device/vfb/0" frontend-id = "1" online = "1" state = "4" vnc = "1" vnclisten = "127.0.0.1" vncdisplay = "0" vncunused = "1" sdl = "0" opengl = "0" feature-resize = "1" hotplug-status = "connected" type = "vnc" domain = "omap5_4" request-update = "1" vkbd = "" 0 = "" 0 = "" domain = "dom0" online = "1" state = "2" frontend-id = "0" frontend = "/local/domain/0/device/vkbd/0" feature-abs-pointer = "1" hotplug-status = "connected" 1 = "" 0 = "" frontend = "/local/domain/1/device/vkbd/0" frontend-id = "1" online = "1" state = "1" feature-abs-pointer = "1" hotplug-status = "connected" domain = "omap5_4" vbd = "" 1 = "" 51712 = "" frontend = "/local/domain/1/device/vbd/51712" params = "/dev/loop0" script = "/etc/xen/scripts/block" physical-device = "7:0" frontend-id = "1" online = "1" removable = "0" bootable = "1" state = "4" dev = "xvda" type = "phy" mode = "w" device-type = "disk" discard-enable = "1" feature-flush-cache = "1" feature-discard = "0" feature-barrier = "1" feature-persistent = "1" feature-max-indirect-segments = "256" sectors = "7615488" info = "0" sector-size = "512" physical-sector-size = "512" console = "" 1 = "" 0 = "" frontend = "/local/domain/1/console" frontend-id = "1" online = "1" state = "1" protocol = "vt100" device-model = "" 0 = "" state = "running" 1 = "" state = "running" memory = "" target = "262144" static-max = "4294967292" freemem-slack = "157286" libxl = "" disable_udev = "1" 1 = "" vm = "/vm/c32df72b-0983-43f7-8b57-6190ab74482d" name = "omap5_4" cpu = "" 0 = "" availability = "online" memory = "" static-max = "131072" target = "131072" videoram = "0" device = "" suspend = "" event-channel = "" vbd = "" 51712 = "" backend = "/local/domain/0/backend/vbd/1/51712" backend-id = "0" state = "4" virtual-device = "51712" device-type = "disk" protocol = "arm-abi" ring-ref = "8" event-channel = "4" feature-persistent = "1" vfb = "" 0 = "" backend = "/local/domain/0/backend/vfb/1/0" backend-id = "0" state = "4" page-ref = "285571" event-channel = "3" protocol = "arm-abi" feature-update = "1" vkbd = "" 0 = "" backend = "/local/domain/0/backend/vkbd/1/0" backend-id = "0" state = "1" control = "" shutdown = "" platform-feature-multiprocessor-suspend = "1" platform-feature-xs_reset_watches = "1" data = "" domid = "1" store = "" port = "1" ring-ref = "233473" console = "" backend = "/local/domain/0/backend/console/1/0" backend-id = "0" limit = "1048576" type = "xenconsoled" output = "pty" tty = "/dev/pts/0" port = "2" ring-ref = "233472" vnc-listen = "127.0.0.1" vnc-port = "5901" image = "" device-model-pid = "1869" vm = "" c32df72b-0983-43f7-8b57-6190ab74482d = "" name = "omap5_4" uuid = "c32df72b-0983-43f7-8b57-6190ab74482d" image = "" ostype = "linux" kernel = "/xen/images/zImage" cmdline = "console=hvc0 xencons=hvc root=/dev/xvda ro" start_time = "1388577612.84" libxl = "" 1 = "" dm-version = "qemu_xen" --------------040901010609080906010902 Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ Xen-devel mailing list Xen-devel@lists.xen.org http://lists.xen.org/xen-devel --------------040901010609080906010902--