[segment] Add "Requested memory not available" error message
authorMichael Brown <mcb30@etherboot.org>
Tue, 31 Mar 2009 03:38:48 +0000 (04:38 +0100)
committerMichael Brown <mcb30@etherboot.org>
Tue, 31 Mar 2009 03:38:48 +0000 (04:38 +0100)
prep_segment() can sometimes fail because an image requests memory
that is already in use by gPXE.  This will happen if
e.g. undionly.kpxe is used to boot memtest86; the memtest86 image is
an old-format kernel that needs to be loaded at 9000:0000, but this
area of memory may well already be in use by the underlying PXE stack.

Add a human-friendly error message, so that the cause is more
immediately visible.

src/hci/strerror.c
src/image/segment.c

index 30532b3..8e7d878 100644 (file)
@@ -115,5 +115,6 @@ struct errortab common_errors[] __errortab = {
        { ENOSPC, "No space left on device" },
        { ENOTSUP, "Not supported" },
        { EPERM, "Operation not permitted" },
+       { ERANGE, "Out of range" },
        { ETIMEDOUT, "Connection timed out" },
 };
index 9bd60f9..3d2b8a4 100644 (file)
@@ -26,6 +26,7 @@
 #include <errno.h>
 #include <gpxe/uaccess.h>
 #include <gpxe/memmap.h>
+#include <gpxe/errortab.h>
 #include <gpxe/segment.h>
 
 /**
@@ -72,3 +73,13 @@ int prep_segment ( userptr_t segment, size_t filesz, size_t memsz ) {
              start, mid, end );
        return -ERANGE;
 }
+
+/**
+ * Segment-specific error messages
+ *
+ * This error happens sufficiently often to merit a user-friendly
+ * description.
+ */
+struct errortab segment_errors[] __errortab = {
+       { ERANGE, "Requested memory not available" },
+};