Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 7 Jun 2018 13:57:34 +0000 (UTC)
From:      Breno Leitao <leitao@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r334784 - in head/sys: conf dev/md
Message-ID:  <201806071357.w57DvYJn046385@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: leitao
Date: Thu Jun  7 13:57:34 2018
New Revision: 334784
URL: https://svnweb.freebsd.org/changeset/base/334784

Log:
  md: use prestaged mfs_root
  
  On PowerNV systems, the rootfs is passed through kexec, which loads the rootfs
  into memory and set two fdt entries to describe where the file is located in
  the memory;
  
  I need to pass this memory region to the md device as a mfs_root, but, current
  md driver does not support two things:
  
   * Just getting a pointer from an external (bootloader) memory. If I need to
  workaround it, I would need to declare a static array and memcopy from this
  external memory to this static variable.
  
   * The size of the image. The usage of mfs_root_end, which is not a pointer,
  seems to be not possible for this prestaged scenario.
  
  This patch simply adds a new way to load mfs_root from memory.
  
  Differential Revision: https://reviews.freebsd.org/D15625
  Approved by: kib, jhibbits (mentor)

Modified:
  head/sys/conf/NOTES
  head/sys/conf/options
  head/sys/dev/md/md.c

Modified: head/sys/conf/NOTES
==============================================================================
--- head/sys/conf/NOTES	Thu Jun  7 13:29:54 2018	(r334783)
+++ head/sys/conf/NOTES	Thu Jun  7 13:57:34 2018	(r334784)
@@ -1111,6 +1111,9 @@ options 	MD_ROOT
 # Write-protect the md root device so that it may not be mounted writeable.
 options 	MD_ROOT_READONLY
 
+# Allow to read MD image from external memory regions
+options		MD_ROOT_MEM
+
 # Disk quotas are supported when this option is enabled.
 options 	QUOTA			#enable disk quotas
 

Modified: head/sys/conf/options
==============================================================================
--- head/sys/conf/options	Thu Jun  7 13:29:54 2018	(r334783)
+++ head/sys/conf/options	Thu Jun  7 13:57:34 2018	(r334784)
@@ -168,6 +168,7 @@ MD_ROOT		opt_md.h
 MD_ROOT_FSTYPE	opt_md.h
 MD_ROOT_READONLY	opt_md.h
 MD_ROOT_SIZE	opt_md.h
+MD_ROOT_MEM	opt_md.h
 MFI_DEBUG	opt_mfi.h
 MFI_DECODE_LOG	opt_mfi.h
 MPROF_BUFFERS	opt_mprof.h

Modified: head/sys/dev/md/md.c
==============================================================================
--- head/sys/dev/md/md.c	Thu Jun  7 13:29:54 2018	(r334783)
+++ head/sys/dev/md/md.c	Thu Jun  7 13:57:34 2018	(r334784)
@@ -180,6 +180,10 @@ SYSCTL_INT(_vm, OID_AUTO, md_malloc_wait, CTLFLAG_RW, 
  */
 u_char mfs_root[MD_ROOT_SIZE*1024] __attribute__ ((section ("oldmfs")));
 const int mfs_root_size = sizeof(mfs_root);
+#elif defined(MD_ROOT_MEM)
+/* MD region already mapped in the memory */
+u_char *mfs_root;
+int mfs_root_size;
 #else
 extern volatile u_char __weak_symbol mfs_root;
 extern volatile u_char __weak_symbol mfs_root_end;
@@ -2074,8 +2078,12 @@ g_md_init(struct g_class *mp __unused)
 #ifdef MD_ROOT
 	if (mfs_root_size != 0) {
 		sx_xlock(&md_sx);
+#ifdef MD_ROOT_MEM
+		md_preloaded(mfs_root, mfs_root_size, NULL);
+#else
 		md_preloaded(__DEVOLATILE(u_char *, &mfs_root), mfs_root_size,
 		    NULL);
+#endif
 		sx_xunlock(&md_sx);
 	}
 #endif



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201806071357.w57DvYJn046385>