mirror of https://github.com/xemu-project/xemu.git
Merge remote-tracking branch 'jvrao/for-anthony' into staging
This commit is contained in:
commit
e77976a247
|
@ -285,9 +285,13 @@ sound-obj-$(CONFIG_HDA) += intel-hda.o hda-audio.o
|
||||||
adlib.o fmopl.o: QEMU_CFLAGS += -DBUILD_Y8950=0
|
adlib.o fmopl.o: QEMU_CFLAGS += -DBUILD_Y8950=0
|
||||||
hw-obj-$(CONFIG_SOUND) += $(sound-obj-y)
|
hw-obj-$(CONFIG_SOUND) += $(sound-obj-y)
|
||||||
|
|
||||||
hw-obj-$(CONFIG_REALLY_VIRTFS) += virtio-9p-debug.o
|
9pfs-nested-$(CONFIG_VIRTFS) = virtio-9p-debug.o
|
||||||
hw-obj-$(CONFIG_VIRTFS) += virtio-9p-local.o virtio-9p-xattr.o
|
9pfs-nested-$(CONFIG_VIRTFS) += virtio-9p-local.o virtio-9p-xattr.o
|
||||||
hw-obj-$(CONFIG_VIRTFS) += virtio-9p-xattr-user.o virtio-9p-posix-acl.o
|
9pfs-nested-$(CONFIG_VIRTFS) += virtio-9p-xattr-user.o virtio-9p-posix-acl.o
|
||||||
|
|
||||||
|
hw-obj-$(CONFIG_REALLY_VIRTFS) += $(addprefix 9pfs/, $(9pfs-nested-y))
|
||||||
|
$(addprefix 9pfs/, $(9pfs-nested-y)): CFLAGS += -I$(SRC_PATH)/hw/
|
||||||
|
|
||||||
|
|
||||||
######################################################################
|
######################################################################
|
||||||
# libdis
|
# libdis
|
||||||
|
|
|
@ -194,7 +194,7 @@ obj-$(CONFIG_VIRTIO) += virtio-blk.o virtio-balloon.o virtio-net.o virtio-serial
|
||||||
obj-$(CONFIG_VIRTIO_PCI) += virtio-pci.o
|
obj-$(CONFIG_VIRTIO_PCI) += virtio-pci.o
|
||||||
obj-y += vhost_net.o
|
obj-y += vhost_net.o
|
||||||
obj-$(CONFIG_VHOST_NET) += vhost.o
|
obj-$(CONFIG_VHOST_NET) += vhost.o
|
||||||
obj-$(CONFIG_REALLY_VIRTFS) += virtio-9p.o
|
obj-$(CONFIG_REALLY_VIRTFS) += 9pfs/virtio-9p.o
|
||||||
obj-y += rwhandler.o
|
obj-y += rwhandler.o
|
||||||
obj-$(CONFIG_KVM) += kvm.o kvm-all.o
|
obj-$(CONFIG_KVM) += kvm.o kvm-all.o
|
||||||
obj-$(CONFIG_NO_KVM) += kvm-stub.o
|
obj-$(CONFIG_NO_KVM) += kvm-stub.o
|
||||||
|
@ -401,9 +401,11 @@ hmp-commands.h: $(SRC_PATH)/hmp-commands.hx
|
||||||
qmp-commands.h: $(SRC_PATH)/qmp-commands.hx
|
qmp-commands.h: $(SRC_PATH)/qmp-commands.hx
|
||||||
$(call quiet-command,sh $(SRC_PATH)/scripts/hxtool -h < $< > $@," GEN $(TARGET_DIR)$@")
|
$(call quiet-command,sh $(SRC_PATH)/scripts/hxtool -h < $< > $@," GEN $(TARGET_DIR)$@")
|
||||||
|
|
||||||
|
9pfs/virtio-9p.o: CFLAGS += -I$(SRC_PATH)/hw/
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
rm -f *.o *.a *~ $(PROGS) nwfpe/*.o fpu/*.o
|
rm -f *.o *.a *~ $(PROGS) nwfpe/*.o fpu/*.o
|
||||||
rm -f *.d */*.d tcg/*.o ide/*.o
|
rm -f *.d */*.d tcg/*.o ide/*.o 9pfs/*.o
|
||||||
rm -f hmp-commands.h qmp-commands.h gdbstub-xml.c
|
rm -f hmp-commands.h qmp-commands.h gdbstub-xml.c
|
||||||
ifdef CONFIG_SYSTEMTAP_TRACE
|
ifdef CONFIG_SYSTEMTAP_TRACE
|
||||||
rm -f *.stp
|
rm -f *.stp
|
||||||
|
|
|
@ -3062,6 +3062,7 @@ mkdir -p $target_dir
|
||||||
mkdir -p $target_dir/fpu
|
mkdir -p $target_dir/fpu
|
||||||
mkdir -p $target_dir/tcg
|
mkdir -p $target_dir/tcg
|
||||||
mkdir -p $target_dir/ide
|
mkdir -p $target_dir/ide
|
||||||
|
mkdir -p $target_dir/9pfs
|
||||||
if test "$target" = "arm-linux-user" -o "$target" = "armeb-linux-user" -o "$target" = "arm-bsd-user" -o "$target" = "armeb-bsd-user" ; then
|
if test "$target" = "arm-linux-user" -o "$target" = "armeb-linux-user" -o "$target" = "arm-bsd-user" -o "$target" = "armeb-bsd-user" ; then
|
||||||
mkdir -p $target_dir/nwfpe
|
mkdir -p $target_dir/nwfpe
|
||||||
fi
|
fi
|
||||||
|
@ -3488,6 +3489,7 @@ for hwlib in 32 64; do
|
||||||
mkdir -p $d
|
mkdir -p $d
|
||||||
mkdir -p $d/ide
|
mkdir -p $d/ide
|
||||||
symlink $source_path/Makefile.hw $d/Makefile
|
symlink $source_path/Makefile.hw $d/Makefile
|
||||||
|
mkdir -p $d/9pfs
|
||||||
echo "QEMU_CFLAGS+=-DTARGET_PHYS_ADDR_BITS=$hwlib" > $d/config.mak
|
echo "QEMU_CFLAGS+=-DTARGET_PHYS_ADDR_BITS=$hwlib" > $d/config.mak
|
||||||
done
|
done
|
||||||
|
|
||||||
|
|
|
@ -13,7 +13,7 @@
|
||||||
#ifndef QEMU_FSDEV_H
|
#ifndef QEMU_FSDEV_H
|
||||||
#define QEMU_FSDEV_H
|
#define QEMU_FSDEV_H
|
||||||
#include "qemu-option.h"
|
#include "qemu-option.h"
|
||||||
#include "hw/file-op-9p.h"
|
#include "file-op-9p.h"
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -370,7 +370,7 @@ static int local_symlink(FsContext *fs_ctx, const char *oldpath,
|
||||||
return fd;
|
return fd;
|
||||||
}
|
}
|
||||||
/* Write the oldpath (target) to the file. */
|
/* Write the oldpath (target) to the file. */
|
||||||
oldpath_size = strlen(oldpath) + 1;
|
oldpath_size = strlen(oldpath);
|
||||||
do {
|
do {
|
||||||
write_size = write(fd, (void *)oldpath, oldpath_size);
|
write_size = write(fd, (void *)oldpath, oldpath_size);
|
||||||
} while (write_size == -1 && errno == EINTR);
|
} while (write_size == -1 && errno == EINTR);
|
|
@ -15,7 +15,7 @@
|
||||||
#include <attr/xattr.h>
|
#include <attr/xattr.h>
|
||||||
#include "virtio.h"
|
#include "virtio.h"
|
||||||
#include "virtio-9p.h"
|
#include "virtio-9p.h"
|
||||||
#include "file-op-9p.h"
|
#include "fsdev/file-op-9p.h"
|
||||||
#include "virtio-9p-xattr.h"
|
#include "virtio-9p-xattr.h"
|
||||||
|
|
||||||
#define MAP_ACL_ACCESS "user.virtfs.system.posix_acl_access"
|
#define MAP_ACL_ACCESS "user.virtfs.system.posix_acl_access"
|
||||||
|
@ -60,7 +60,7 @@ static int mp_pacl_removexattr(FsContext *ctx,
|
||||||
ret = lremovexattr(rpath(ctx, path), MAP_ACL_ACCESS);
|
ret = lremovexattr(rpath(ctx, path), MAP_ACL_ACCESS);
|
||||||
if (ret == -1 && errno == ENODATA) {
|
if (ret == -1 && errno == ENODATA) {
|
||||||
/*
|
/*
|
||||||
* We don't get ENODATA error when trying to remote a
|
* We don't get ENODATA error when trying to remove a
|
||||||
* posix acl that is not present. So don't throw the error
|
* posix acl that is not present. So don't throw the error
|
||||||
* even in case of mapped security model
|
* even in case of mapped security model
|
||||||
*/
|
*/
|
||||||
|
@ -103,7 +103,18 @@ static int mp_dacl_setxattr(FsContext *ctx, const char *path, const char *name,
|
||||||
static int mp_dacl_removexattr(FsContext *ctx,
|
static int mp_dacl_removexattr(FsContext *ctx,
|
||||||
const char *path, const char *name)
|
const char *path, const char *name)
|
||||||
{
|
{
|
||||||
return lremovexattr(rpath(ctx, path), MAP_ACL_DEFAULT);
|
int ret;
|
||||||
|
ret = lremovexattr(rpath(ctx, path), MAP_ACL_DEFAULT);
|
||||||
|
if (ret == -1 && errno == ENODATA) {
|
||||||
|
/*
|
||||||
|
* We don't get ENODATA error when trying to remove a
|
||||||
|
* posix acl that is not present. So don't throw the error
|
||||||
|
* even in case of mapped security model
|
||||||
|
*/
|
||||||
|
errno = 0;
|
||||||
|
ret = 0;
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -14,7 +14,7 @@
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#include "virtio.h"
|
#include "virtio.h"
|
||||||
#include "virtio-9p.h"
|
#include "virtio-9p.h"
|
||||||
#include "file-op-9p.h"
|
#include "fsdev/file-op-9p.h"
|
||||||
#include "virtio-9p-xattr.h"
|
#include "virtio-9p-xattr.h"
|
||||||
|
|
||||||
|
|
|
@ -13,7 +13,7 @@
|
||||||
|
|
||||||
#include "virtio.h"
|
#include "virtio.h"
|
||||||
#include "virtio-9p.h"
|
#include "virtio-9p.h"
|
||||||
#include "file-op-9p.h"
|
#include "fsdev/file-op-9p.h"
|
||||||
#include "virtio-9p-xattr.h"
|
#include "virtio-9p-xattr.h"
|
||||||
|
|
||||||
|
|
|
@ -596,7 +596,10 @@ static V9fsPDU *alloc_pdu(V9fsState *s)
|
||||||
static void free_pdu(V9fsState *s, V9fsPDU *pdu)
|
static void free_pdu(V9fsState *s, V9fsPDU *pdu)
|
||||||
{
|
{
|
||||||
if (pdu) {
|
if (pdu) {
|
||||||
QLIST_INSERT_HEAD(&s->free_list, pdu, next);
|
if (debug_9p_pdu) {
|
||||||
|
pprint_pdu(pdu);
|
||||||
|
}
|
||||||
|
QLIST_INSERT_HEAD(&s->free_list, pdu, next);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1479,7 +1482,7 @@ static void v9fs_walk_complete(V9fsState *s, V9fsWalkState *vs, int err)
|
||||||
{
|
{
|
||||||
complete_pdu(s, vs->pdu, err);
|
complete_pdu(s, vs->pdu, err);
|
||||||
|
|
||||||
if (vs->nwnames) {
|
if (vs->nwnames && vs->nwnames <= P9_MAXWELEM) {
|
||||||
for (vs->name_idx = 0; vs->name_idx < vs->nwnames; vs->name_idx++) {
|
for (vs->name_idx = 0; vs->name_idx < vs->nwnames; vs->name_idx++) {
|
||||||
v9fs_string_free(&vs->wnames[vs->name_idx]);
|
v9fs_string_free(&vs->wnames[vs->name_idx]);
|
||||||
}
|
}
|
||||||
|
@ -1575,7 +1578,7 @@ static void v9fs_walk(V9fsState *s, V9fsPDU *pdu)
|
||||||
vs->offset += pdu_unmarshal(vs->pdu, vs->offset, "ddw", &fid,
|
vs->offset += pdu_unmarshal(vs->pdu, vs->offset, "ddw", &fid,
|
||||||
&newfid, &vs->nwnames);
|
&newfid, &vs->nwnames);
|
||||||
|
|
||||||
if (vs->nwnames) {
|
if (vs->nwnames && vs->nwnames <= P9_MAXWELEM) {
|
||||||
vs->wnames = qemu_mallocz(sizeof(vs->wnames[0]) * vs->nwnames);
|
vs->wnames = qemu_mallocz(sizeof(vs->wnames[0]) * vs->nwnames);
|
||||||
|
|
||||||
vs->qids = qemu_mallocz(sizeof(vs->qids[0]) * vs->nwnames);
|
vs->qids = qemu_mallocz(sizeof(vs->qids[0]) * vs->nwnames);
|
||||||
|
@ -1584,6 +1587,9 @@ static void v9fs_walk(V9fsState *s, V9fsPDU *pdu)
|
||||||
vs->offset += pdu_unmarshal(vs->pdu, vs->offset, "s",
|
vs->offset += pdu_unmarshal(vs->pdu, vs->offset, "s",
|
||||||
&vs->wnames[i]);
|
&vs->wnames[i]);
|
||||||
}
|
}
|
||||||
|
} else if (vs->nwnames > P9_MAXWELEM) {
|
||||||
|
err = -EINVAL;
|
||||||
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
vs->fidp = lookup_fid(s, fid);
|
vs->fidp = lookup_fid(s, fid);
|
||||||
|
@ -1768,7 +1774,7 @@ static void v9fs_post_lcreate(V9fsState *s, V9fsLcreateState *vs, int err)
|
||||||
v9fs_string_copy(&vs->fidp->path, &vs->fullname);
|
v9fs_string_copy(&vs->fidp->path, &vs->fullname);
|
||||||
stat_to_qid(&vs->stbuf, &vs->qid);
|
stat_to_qid(&vs->stbuf, &vs->qid);
|
||||||
vs->offset += pdu_marshal(vs->pdu, vs->offset, "Qd", &vs->qid,
|
vs->offset += pdu_marshal(vs->pdu, vs->offset, "Qd", &vs->qid,
|
||||||
&vs->iounit);
|
vs->iounit);
|
||||||
err = vs->offset;
|
err = vs->offset;
|
||||||
} else {
|
} else {
|
||||||
vs->fidp->fid_type = P9_FID_NONE;
|
vs->fidp->fid_type = P9_FID_NONE;
|
|
@ -6,7 +6,7 @@
|
||||||
#include <sys/time.h>
|
#include <sys/time.h>
|
||||||
#include <utime.h>
|
#include <utime.h>
|
||||||
|
|
||||||
#include "file-op-9p.h"
|
#include "fsdev/file-op-9p.h"
|
||||||
|
|
||||||
/* The feature bitmap for virtio 9P */
|
/* The feature bitmap for virtio 9P */
|
||||||
/* The mount point is specified in a config variable */
|
/* The mount point is specified in a config variable */
|
||||||
|
@ -282,7 +282,7 @@ typedef struct V9fsStatStateDotl {
|
||||||
typedef struct V9fsWalkState {
|
typedef struct V9fsWalkState {
|
||||||
V9fsPDU *pdu;
|
V9fsPDU *pdu;
|
||||||
size_t offset;
|
size_t offset;
|
||||||
int16_t nwnames;
|
uint16_t nwnames;
|
||||||
int name_idx;
|
int name_idx;
|
||||||
V9fsQID *qids;
|
V9fsQID *qids;
|
||||||
V9fsFidState *fidp;
|
V9fsFidState *fidp;
|
54
vl.c
54
vl.c
|
@ -2447,9 +2447,8 @@ int main(int argc, char **argv, char **envp)
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case QEMU_OPTION_virtfs: {
|
case QEMU_OPTION_virtfs: {
|
||||||
char *arg_fsdev = NULL;
|
QemuOpts *fsdev;
|
||||||
char *arg_9p = NULL;
|
QemuOpts *device;
|
||||||
int len = 0;
|
|
||||||
|
|
||||||
olist = qemu_find_opts("virtfs");
|
olist = qemu_find_opts("virtfs");
|
||||||
if (!olist) {
|
if (!olist) {
|
||||||
|
@ -2468,45 +2467,28 @@ int main(int argc, char **argv, char **envp)
|
||||||
qemu_opt_get(opts, "security_model") == NULL) {
|
qemu_opt_get(opts, "security_model") == NULL) {
|
||||||
fprintf(stderr, "Usage: -virtfs fstype,path=/share_path/,"
|
fprintf(stderr, "Usage: -virtfs fstype,path=/share_path/,"
|
||||||
"security_model=[mapped|passthrough|none],"
|
"security_model=[mapped|passthrough|none],"
|
||||||
"mnt_tag=tag.\n");
|
"mount_tag=tag.\n");
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
len = strlen(",id=,path=,security_model=");
|
fsdev = qemu_opts_create(qemu_find_opts("fsdev"),
|
||||||
len += strlen(qemu_opt_get(opts, "fstype"));
|
qemu_opt_get(opts, "mount_tag"), 1);
|
||||||
len += strlen(qemu_opt_get(opts, "mount_tag"));
|
if (!fsdev) {
|
||||||
len += strlen(qemu_opt_get(opts, "path"));
|
fprintf(stderr, "duplicate fsdev id: %s\n",
|
||||||
len += strlen(qemu_opt_get(opts, "security_model"));
|
qemu_opt_get(opts, "mount_tag"));
|
||||||
arg_fsdev = qemu_malloc((len + 1) * sizeof(*arg_fsdev));
|
|
||||||
|
|
||||||
snprintf(arg_fsdev, (len + 1) * sizeof(*arg_fsdev),
|
|
||||||
"%s,id=%s,path=%s,security_model=%s",
|
|
||||||
qemu_opt_get(opts, "fstype"),
|
|
||||||
qemu_opt_get(opts, "mount_tag"),
|
|
||||||
qemu_opt_get(opts, "path"),
|
|
||||||
qemu_opt_get(opts, "security_model"));
|
|
||||||
|
|
||||||
len = strlen("virtio-9p,fsdev=,mount_tag=");
|
|
||||||
len += 2*strlen(qemu_opt_get(opts, "mount_tag"));
|
|
||||||
arg_9p = qemu_malloc((len + 1) * sizeof(*arg_9p));
|
|
||||||
|
|
||||||
snprintf(arg_9p, (len + 1) * sizeof(*arg_9p),
|
|
||||||
"virtio-9p,fsdev=%s,mount_tag=%s",
|
|
||||||
qemu_opt_get(opts, "mount_tag"),
|
|
||||||
qemu_opt_get(opts, "mount_tag"));
|
|
||||||
|
|
||||||
if (!qemu_opts_parse(qemu_find_opts("fsdev"), arg_fsdev, 1)) {
|
|
||||||
fprintf(stderr, "parse error [fsdev]: %s\n", optarg);
|
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
qemu_opt_set(fsdev, "fstype", qemu_opt_get(opts, "fstype"));
|
||||||
|
qemu_opt_set(fsdev, "path", qemu_opt_get(opts, "path"));
|
||||||
|
qemu_opt_set(fsdev, "security_model",
|
||||||
|
qemu_opt_get(opts, "security_model"));
|
||||||
|
|
||||||
if (!qemu_opts_parse(qemu_find_opts("device"), arg_9p, 1)) {
|
device = qemu_opts_create(qemu_find_opts("device"), NULL, 0);
|
||||||
fprintf(stderr, "parse error [device]: %s\n", optarg);
|
qemu_opt_set(device, "driver", "virtio-9p-pci");
|
||||||
exit(1);
|
qemu_opt_set(device, "fsdev",
|
||||||
}
|
qemu_opt_get(opts, "mount_tag"));
|
||||||
|
qemu_opt_set(device, "mount_tag",
|
||||||
qemu_free(arg_fsdev);
|
qemu_opt_get(opts, "mount_tag"));
|
||||||
qemu_free(arg_9p);
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case QEMU_OPTION_serial:
|
case QEMU_OPTION_serial:
|
||||||
|
|
Loading…
Reference in New Issue