summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Brown2009-03-31 05:38:48 +0200
committerMichael Brown2009-03-31 05:38:48 +0200
commitf7d2168c8eb23108e159a03416966b0f3c983320 (patch)
tree8d6dff5af83cfa23b5786a10e696d36c6088cc68
parent[resolv] Simplify xfer_redirect() logic (diff)
downloadipxe-f7d2168c8eb23108e159a03416966b0f3c983320.tar.gz
ipxe-f7d2168c8eb23108e159a03416966b0f3c983320.tar.xz
ipxe-f7d2168c8eb23108e159a03416966b0f3c983320.zip
[segment] Add "Requested memory not available" error message
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.
-rw-r--r--src/hci/strerror.c1
-rw-r--r--src/image/segment.c11
2 files changed, 12 insertions, 0 deletions
diff --git a/src/hci/strerror.c b/src/hci/strerror.c
index 30532b398..8e7d878b6 100644
--- a/src/hci/strerror.c
+++ b/src/hci/strerror.c
@@ -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" },
};
diff --git a/src/image/segment.c b/src/image/segment.c
index 9bd60f9c4..3d2b8a4b3 100644
--- a/src/image/segment.c
+++ b/src/image/segment.c
@@ -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" },
+};