Index: uspace/lib/virtio/virtio-pci.h
===================================================================
--- uspace/lib/virtio/virtio-pci.h	(revision d066259279e2e85ad364d7828aa3db232f394ec4)
+++ uspace/lib/virtio/virtio-pci.h	(revision d80fa0577aaa860c46aaab957555bb031418c4ef)
@@ -60,4 +60,7 @@
 
 #define VIRTIO_FEATURES_0_31	0
+#define VIRTIO_FEATURES_32_63	1
+
+#define VIRTIO_F_VERSION_1	1
 
 /** Common configuration structure layout according to VIRTIO version 1.0 */
Index: uspace/lib/virtio/virtio.c
===================================================================
--- uspace/lib/virtio/virtio.c	(revision d066259279e2e85ad364d7828aa3db232f394ec4)
+++ uspace/lib/virtio/virtio.c	(revision d80fa0577aaa860c46aaab957555bb031418c4ef)
@@ -319,5 +319,10 @@
 	uint32_t device_features = pio_read_le32(&cfg->device_feature);
 
-	ddf_msg(LVL_NOTE, "offered features %x", device_features);
+	uint32_t reserved_features = VIRTIO_F_VERSION_1;
+	pio_write_le32(&cfg->device_feature_select, VIRTIO_FEATURES_32_63);
+	uint32_t device_reserved_features = pio_read_le32(&cfg->device_feature);
+
+	ddf_msg(LVL_NOTE, "offered features %x, reserved features %x",
+	    device_features, device_reserved_features);
 
 	if (features != (features & device_features))
@@ -325,9 +330,16 @@
 	features &= device_features;
 
+	if (reserved_features != (reserved_features & device_reserved_features))
+		return ENOTSUP;
+	reserved_features &= device_reserved_features;
+
 	/* 4. Write the accepted feature flags */
 	pio_write_le32(&cfg->driver_feature_select, VIRTIO_FEATURES_0_31);
 	pio_write_le32(&cfg->driver_feature, features);
-
-	ddf_msg(LVL_NOTE, "accepted features %x", features);
+	pio_write_le32(&cfg->driver_feature_select, VIRTIO_FEATURES_32_63);
+	pio_write_le32(&cfg->driver_feature, reserved_features);
+
+	ddf_msg(LVL_NOTE, "accepted features %x, reserved features %x",
+	    features, reserved_features);
 
 	/* 5. Set FEATURES_OK */
