+ add-iscsi-ibft-support-v046.patch added to -mm tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



The patch titled
     Add iSCSI iBFT support (v0.4.6)
has been added to the -mm tree.  Its filename is
     add-iscsi-ibft-support-v046.patch

Before you just go and hit "reply", please:
   a) Consider who else should be cc'ed
   b) Prefer to cc a suitable mailing list as well
   c) Ideally: find the original patch on the mailing list and do a
      reply-to-all to that, adding suitable additional cc's

*** Remember to use Documentation/SubmitChecklist when testing your code ***

See http://www.zip.com.au/~akpm/linux/patches/stuff/added-to-mm.txt to find
out what to do about this

The current -mm tree may be found at http://userweb.kernel.org/~akpm/mmotm/

------------------------------------------------------
Subject: Add iSCSI iBFT support (v0.4.6)
From: Konrad Rzeszutek <konrad@xxxxxxxxxx>

This patch (v0.4.6) adds /sysfs/firmware/ibft/[initiator|targetX|ethernetX]
directories along with text properties which export the the iSCSI
Boot Firmware Table (iBFT) structure.

What is iSCSI Boot Firmware Table? It is a mechanism for the iSCSI
tools to extract from the machine NICs the iSCSI connection information
so that they can automagically mount the iSCSI share/target. Currently
the iSCSI information is hard-coded in the initrd. The /sysfs entries
are read-only one-name-and-value fields.

The usual set of data exposed is:

# for a in `find /sys/firmware/ibft/ -type f -print`; do  echo -n "$a: ";  cat $a; done
/sys/firmware/ibft/target0/target-name: iqn.2007.com.intel-sbx44:storage-10gb
/sys/firmware/ibft/target0/nic-assoc: 0
/sys/firmware/ibft/target0/chap-type: 0
/sys/firmware/ibft/target0/lun: 00000000
/sys/firmware/ibft/target0/port: 3260
/sys/firmware/ibft/target0/ip-addr: 192.168.79.116
/sys/firmware/ibft/target0/flags: 3
/sys/firmware/ibft/target0/index: 0
/sys/firmware/ibft/ethernet0/mac: 00:11:25:9d:8b:01
/sys/firmware/ibft/ethernet0/vlan: 0
/sys/firmware/ibft/ethernet0/gateway: 192.168.79.254
/sys/firmware/ibft/ethernet0/origin: 0
/sys/firmware/ibft/ethernet0/subnet-mask: 255.255.252.0
/sys/firmware/ibft/ethernet0/ip-addr: 192.168.77.41
/sys/firmware/ibft/ethernet0/flags: 7
/sys/firmware/ibft/ethernet0/index: 0
/sys/firmware/ibft/initiator/initiator-name: iqn.2007-07.com:konrad.initiator
/sys/firmware/ibft/initiator/flags: 3
/sys/firmware/ibft/initiator/index: 0

For full details of the IBFT structure please take a look at:
ftp://ftp.software.ibm.com/systems/support/system_x_pdf/ibm_iscsi_boot_firmware_table_v1.02.pdf

Signed-off-by: Konrad Rzeszutek <konradr@xxxxxxxxxxxxxxxxxx>
Cc: Mike Christie <michaelc@xxxxxxxxxxx>
Cc: Peter Jones <pjones@xxxxxxxxxx>
Cc: James Bottomley <James.Bottomley@xxxxxxxxxxxxxxxxxxxxx>
Signed-off-by: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx>
---

 arch/x86/kernel/setup_32.c    |   14 ---------
 arch/x86/kernel/setup_64.c    |   14 ---------
 drivers/firmware/Kconfig      |    1 
 drivers/firmware/iscsi_ibft.c |   48 +++++++++++++++++++++-----------
 include/linux/iscsi_ibft.h    |   16 ++++++++++
 5 files changed, 48 insertions(+), 45 deletions(-)

diff -puN arch/x86/kernel/setup_32.c~add-iscsi-ibft-support-v046 arch/x86/kernel/setup_32.c
--- a/arch/x86/kernel/setup_32.c~add-iscsi-ibft-support-v046
+++ a/arch/x86/kernel/setup_32.c
@@ -226,20 +226,6 @@ static inline void copy_edd(void)
 }
 #endif
 
-#if defined(CONFIG_ISCSI_IBFT_FIND)
-static void __init reserve_ibft_region(void)
-{
-	unsigned int ibft_len;
-
-	ibft_len = find_ibft();
-	if (ibft_len)
-		reserve_bootmem((unsigned int)ibft_phys,
-				PAGE_ALIGN(ibft_len));
-}
-#else
-static void __init reserve_ibft_region(void) { }
-#endif
-
 int __initdata user_defined_memmap = 0;
 
 /*
diff -puN arch/x86/kernel/setup_64.c~add-iscsi-ibft-support-v046 arch/x86/kernel/setup_64.c
--- a/arch/x86/kernel/setup_64.c~add-iscsi-ibft-support-v046
+++ a/arch/x86/kernel/setup_64.c
@@ -219,20 +219,6 @@ static inline void copy_edd(void)
 }
 #endif
 
-#if defined(CONFIG_ISCSI_IBFT_FIND)
-static void __init reserve_ibft_region(void)
-{
-	unsigned int ibft_len;
-
-	ibft_len = find_ibft();
-	if (ibft_len)
-		reserve_bootmem_generic((unsigned long)ibft_phys,
-					PAGE_ALIGN(ibft_len));
-}
-#else
-static void __init reserve_ibft_region(void) { }
-#endif
-
 #ifdef CONFIG_KEXEC
 static void __init reserve_crashkernel(void)
 {
diff -puN drivers/firmware/Kconfig~add-iscsi-ibft-support-v046 drivers/firmware/Kconfig
--- a/drivers/firmware/Kconfig~add-iscsi-ibft-support-v046
+++ a/drivers/firmware/Kconfig
@@ -95,6 +95,7 @@ config DMIID
 
 config ISCSI_IBFT_FIND
 	bool "iSCSI Boot Firmware Table Attributes"
+	depends on X86 || IA64
 	default n
 	help
 	  This option enables the kernel to find the region of memory
diff -puN drivers/firmware/iscsi_ibft.c~add-iscsi-ibft-support-v046 drivers/firmware/iscsi_ibft.c
--- a/drivers/firmware/iscsi_ibft.c~add-iscsi-ibft-support-v046
+++ a/drivers/firmware/iscsi_ibft.c
@@ -17,8 +17,11 @@
  *
  * Changelog:
  *
+ *  30 Jan 2008 - Konrad Rzeszutek <konradr@xxxxxxxxxxxxxxxxxx>
+ *   Added logic to handle IPv6 addresses. (v0.4.6)
+ *
  *  25 Jan 2008 - Konrad Rzeszutek <konradr@xxxxxxxxxxxxxxxxxx>
- *   Added logic to handle badly not-to-spec iBFTs. (v0.4.5)
+ *   Added logic to handle badly not-to-spec iBFT. (v0.4.5)
  *
  *   4 Jan 2008 - Konrad Rzeszutek <konradr@xxxxxxxxxxxxxxxxxx>
  *   Added __init to function declarations. (v0.4.4)
@@ -64,8 +67,8 @@
 #include <linux/string.h>
 #include <linux/types.h>
 
-#define IBFT_ISCSI_VERSION "0.4.5"
-#define IBFT_ISCSI_DATE "2008-Jan-25"
+#define IBFT_ISCSI_VERSION "0.4."
+#define IBFT_ISCSI_DATE "2008-Jan-30"
 
 MODULE_AUTHOR("Peter Jones <pjones@xxxxxxxxxx> and \
 Konrad Rzeszutek <konradr@xxxxxxxxxx>");
@@ -272,16 +275,26 @@ static struct ibft_table_header *ibft_de
  */
 static ssize_t sprintf_ipaddr(char *buf, u8 *ip)
 {
+	char *str = buf;
+
 	if (ip[0] == 0 && ip[1] == 0 && ip[2] == 0 && ip[3] == 0 &&
 	    ip[4] == 0 && ip[5] == 0 && ip[6] == 0 && ip[7] == 0 &&
 	    ip[8] == 0 && ip[9] == 0 && ip[10] == 0xff && ip[11] == 0xff) {
 		/*
 		 * IPV4
 		 */
-		return sprintf(buf, "%d.%d.%d.%d\n", ip[12],
+		str += sprintf(buf, NIPQUAD_FMT, ip[12],
 			       ip[13], ip[14], ip[15]);
-	} else
-		return 0;
+	} else {
+		/*
+		 * IPv6
+		 */
+		str += sprintf(str, NIP6_FMT, ntohs(ip[0]), ntohs(ip[1]),
+			       ntohs(ip[2]), ntohs(ip[3]), ntohs(ip[4]),
+			       ntohs(ip[5]), ntohs(ip[6]), ntohs(ip[7]));
+	}
+	str += sprintf(str, "\n");
+	return str - buf;
 }
 
 static ssize_t sprintf_string(char *str, int len, char *buf)
@@ -294,16 +307,19 @@ static ssize_t sprintf_string(char *str,
  */
 static int ibft_verify_hdr(char *t, struct ibft_hdr *hdr, int id, int length)
 {
-#define IBFT_VERIFY_HDR_FIELD(val, name) \
-	if (hdr->val != val) { \
-		printk(KERN_ERR \
-		       "iBFT error: In structure %s field %s expected %d but" \
-		       " found %d!\n", \
-		       t, name, val, hdr->val); \
-		return -ENODEV; \
+	if (hdr->id != id) {
+		printk(KERN_ERR "iBFT error: The field header.id is " \
+				"expected %d but found %d!\n", \
+				id, hdr->id);
+		return -ENODEV;
+	}
+	if (hdr->length != length) {
+		printk(KERN_ERR "iBFT error: The field header.length is " \
+				"expected %d but found %d!\n", \
+				length, hdr->length);
+		return -ENODEV;
 	}
-	IBFT_VERIFY_HDR_FIELD(id, "id");
-	IBFT_VERIFY_HDR_FIELD(length, "length");
+
 	return 0;
 }
 
@@ -542,7 +558,7 @@ static int __init ibft_check_and_alloc_d
 				"while this is %d.\n", hdr->revision);
 		return 1;
 	}
-	for (pos = (u8 *)hdr; pos < (u8 *)hdr + len; pos ++)
+	for (pos = (u8 *)hdr; pos < (u8 *)hdr + len; pos++)
 		csum += *pos;
 
 	if (csum) {
diff -puN include/linux/iscsi_ibft.h~add-iscsi-ibft-support-v046 include/linux/iscsi_ibft.h
--- a/include/linux/iscsi_ibft.h~add-iscsi-ibft-support-v046
+++ a/include/linux/iscsi_ibft.h
@@ -19,7 +19,8 @@
 #ifndef ISCSI_IBFT_H
 #define ISCSI_IBFT_H
 
-#if defined(CONFIG_ISCSI_IBFT_FIND)
+#include <linux/bootmem.h>
+#include <asm/mmzone.h>
 
 /*
  * Physical location of iSCSI Boot Format Table.
@@ -33,6 +34,19 @@ extern void *ibft_phys;
  */
 extern ssize_t find_ibft(void);
 
+
+#ifdef CONFIG_ISCSI_IBFT_FIND
+static inline void __init reserve_ibft_region(void)
+{
+	unsigned int ibft_len;
+
+	ibft_len = find_ibft();
+	if (ibft_len)
+		reserve_bootmem((unsigned int)ibft_phys,
+				PAGE_ALIGN(ibft_len));
+}
+#else
+static inline void __init reserve_ibft_region(void) { }
 #endif
 
 #endif /* ISCSI_IBFT_H */
_

Patches currently in -mm which might be from konrad@xxxxxxxxxx are

add-iscsi-ibft-support-v045.patch
add-iscsi-ibft-support-v046.patch
add-iscsi-ibft-support-v046-fix.patch

-
To unsubscribe from this list: send the line "unsubscribe mm-commits" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Kernel Newbies FAQ]     [Kernel Archive]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [Bugtraq]     [Photo]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]

  Powered by Linux