-ifeq ($(CONFIG_REALLY_VIRTFS),y)
-common-obj-y = qemu-fsdev.o virtio-9p-marshal.o
+# Lots of the fsdev/9pcode is pulled in by vl.c via qemu_fsdev_add.
+# only pull in the actual 9p backend if we also enabled virtio or xen.
+common-obj-$(call land,$(CONFIG_VIRTFS),$(call lor,$(CONFIG_VIRTIO),$(CONFIG_XEN))) = qemu-fsdev.o 9p-marshal.o 9p-iov-marshal.o
+common-obj-$(call lnot,$(call land,$(CONFIG_VIRTFS),$(call lor,$(CONFIG_VIRTIO),$(CONFIG_XEN)))) = qemu-fsdev-dummy.o
+common-obj-y += qemu-fsdev-opts.o qemu-fsdev-throttle.o
# Toplevel always builds this; targets without virtio will put it in
# common-obj-y
-extra-obj-y = qemu-fsdev-dummy.o
-else
-common-obj-y = qemu-fsdev-dummy.o
-endif
+common-obj-$(CONFIG_ALL) += qemu-fsdev-dummy.o