Enable /dev/xen/{gntdev,evtchn} and /proc/xen/ for xen_shim_domain().
These interfaces will be used by xenstored to initialize its
event channel port and the kva used to communicate with the
xenbus driver.
Signed-off-by: Joao Martins <joao.m.martins@oracle.com>
{
int err;
- if (!xen_domain())
+ if (!xen_domain() && !xen_shim_domain_get())
return -ENODEV;
/* Create '/dev/xen/evtchn'. */
err = misc_register(&evtchn_miscdev);
if (err != 0) {
pr_err("Could not register /dev/xen/evtchn\n");
+ xen_shim_domain_put();
return err;
}
static void __exit evtchn_cleanup(void)
{
misc_deregister(&evtchn_miscdev);
+ xen_shim_domain_put();
}
module_init(evtchn_init);
{
int err;
- if (!xen_domain())
+ if (!xen_domain() && !xen_shim_domain_get())
return -ENODEV;
err = misc_register(&privcmd_dev);
if (err != 0) {
pr_err("Could not register Xen privcmd device\n");
+ xen_shim_domain_put();
return err;
}
if (err != 0) {
pr_err("Could not register Xen hypercall-buf device\n");
misc_deregister(&privcmd_dev);
+ xen_shim_domain_put();
return err;
}
{
misc_deregister(&privcmd_dev);
misc_deregister(&xen_privcmdbuf_dev);
+ xen_shim_domain_put();
}
module_init(privcmd_init);
{
int err;
- if (!xen_hvm_domain() || xen_initial_domain())
+ if (!xen_hvm_domain() || xen_initial_domain() || xen_shim_domain())
return;
if (xen_strict_xenbus_quirk())
};
return simple_fill_super(sb, XENFS_SUPER_MAGIC,
- xen_initial_domain() ? xenfs_init_files : xenfs_files);
+ xen_initial_domain() || xen_shim_domain() ?
+ xenfs_init_files : xenfs_files);
}
static struct dentry *xenfs_mount(struct file_system_type *fs_type,
static int __init xenfs_init(void)
{
- if (xen_domain())
+ if (xen_domain() || xen_shim_domain())
return register_filesystem(&xenfs_type);
return 0;
static void __exit xenfs_exit(void)
{
- if (xen_domain())
+ if (xen_domain() || xen_shim_domain())
unregister_filesystem(&xenfs_type);
}
#include <xen/interface/platform.h>
#include <asm/xen/hypercall.h>
#include <xen/xen-ops.h>
+#include <xen/xen.h>
#include "xenfs.h"
struct xensyms *xs;
int ret;
+ if (xen_shim_domain())
+ return -EINVAL;
+
ret = seq_open_private(file, &xensyms_seq_ops,
sizeof(struct xensyms));
if (ret)