--- src/geometry.c.orig
+++ src/geometry.c
@@ -339,7 +339,7 @@ unsigned char max_partno[512] = {
  31, 31,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
 
-  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,   /*  Cx   */
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 15,  0,  0,  0,  0,  0,   /*  Cx   */
   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0
@@ -670,6 +670,7 @@ void geo_query_dev(GEOMETRY *geo,int device,int all)
 	case MAJOR_SD6:
 	case MAJOR_SD7:
 	case MAJOR_SD8:
+	case MAJOR_XVD:
 	MASK15:
 	    geo->device = 0x80 + last_dev(MAJOR_HD,64) + (MINOR(device) >> 4);
 	    if (!get_all) break;
--- src/lilo.h.orig
+++ src/lilo.h
@@ -148,6 +148,7 @@
 #define MAJOR_EMD	153 /* Enhanced multi-disk RAID sets */
 #define MAJOR_CARM1	160 /* Carmel SATA Disk on first 8-port controller */
 #define MAJOR_CARM2	161 /* Carmel SATA Disk on 2nd 8-port controller */
+#define MAJOR_XVD	202 /* xen xvd disks */
 
 /* don't use the following */
 #define MAJOR_MDP	254 /* Enhanced multi-disk RAID sets [experimental?] */
