Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 26 Jan 2017 15:37:53 +0000 (UTC)
From:      "Andrey V. Elsukov" <ae@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-projects@freebsd.org
Subject:   svn commit: r312817 - in projects/ipsec: contrib/elftoolchain/strings contrib/ipfilter/lib contrib/ipfilter/tools contrib/llvm/include/llvm/Analysis contrib/llvm/lib/Analysis lib/libthr/thread libe...
Message-ID:  <201701261537.v0QFbr0P067027@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: ae
Date: Thu Jan 26 15:37:53 2017
New Revision: 312817
URL: https://svnweb.freebsd.org/changeset/base/312817

Log:
  Merge from head/

Added:
  projects/ipsec/sys/arm/mv/armada/
     - copied from r312816, head/sys/arm/mv/armada/
  projects/ipsec/sys/dev/ahci/ahci_mv_fdt.c
     - copied unchanged from r312816, head/sys/dev/ahci/ahci_mv_fdt.c
Modified:
  projects/ipsec/contrib/elftoolchain/strings/strings.c
  projects/ipsec/contrib/ipfilter/lib/rwlock_emul.c
  projects/ipsec/contrib/ipfilter/tools/ipf.c
  projects/ipsec/contrib/llvm/include/llvm/Analysis/ScalarEvolution.h
  projects/ipsec/contrib/llvm/include/llvm/Analysis/ScalarEvolutionExpander.h
  projects/ipsec/contrib/llvm/lib/Analysis/ScalarEvolution.cpp
  projects/ipsec/contrib/llvm/lib/Analysis/ScalarEvolutionExpander.cpp
  projects/ipsec/lib/libthr/thread/thr_exit.c
  projects/ipsec/libexec/rtld-elf/aarch64/reloc.c
  projects/ipsec/share/misc/committers-ports.dot
  projects/ipsec/share/misc/scsi_modes
  projects/ipsec/sys/arm/arm/pmap-v6.c
  projects/ipsec/sys/arm/conf/ARMADA38X
  projects/ipsec/sys/arm/include/pcpu.h
  projects/ipsec/sys/arm/mv/armada38x/files.armada38x
  projects/ipsec/sys/arm/mv/files.mv
  projects/ipsec/sys/arm/mv/mv_common.c
  projects/ipsec/sys/arm/mv/mvwin.h
  projects/ipsec/sys/cam/cam_iosched.c
  projects/ipsec/sys/cam/ctl/ctl.h
  projects/ipsec/sys/cam/ctl/ctl_io.h
  projects/ipsec/sys/cam/ctl/ctl_ioctl.h
  projects/ipsec/sys/cam/ctl/ctl_private.h
  projects/ipsec/sys/cddl/dev/dtrace/dtrace_ioctl.c
  projects/ipsec/sys/contrib/ipfilter/netinet/ip_compat.h
  projects/ipsec/sys/contrib/ipfilter/netinet/ip_frag.c
  projects/ipsec/sys/dev/ahci/ahci.c
  projects/ipsec/sys/dev/ahci/ahci.h
  projects/ipsec/sys/dev/ahci/ahci_pci.c
  projects/ipsec/sys/dev/cesa/cesa.c
  projects/ipsec/sys/dev/cesa/cesa.h
  projects/ipsec/sys/dev/e1000/em_txrx.c
  projects/ipsec/sys/dev/fdt/fdt_common.h
  projects/ipsec/sys/dev/ofw/ofw_bus_subr.c
  projects/ipsec/sys/dev/ofw/ofw_bus_subr.h
  projects/ipsec/sys/dev/qlxgbe/ql_def.h
  projects/ipsec/sys/dev/qlxgbe/ql_glbl.h
  projects/ipsec/sys/dev/qlxgbe/ql_hw.c
  projects/ipsec/sys/dev/qlxgbe/ql_hw.h
  projects/ipsec/sys/dev/qlxgbe/ql_isr.c
  projects/ipsec/sys/dev/qlxgbe/ql_os.c
  projects/ipsec/sys/dev/qlxgbe/ql_os.h
  projects/ipsec/sys/dev/qlxgbe/ql_ver.h
  projects/ipsec/sys/kern/kern_ntptime.c
  projects/ipsec/sys/kern/subr_gtaskqueue.c
  projects/ipsec/sys/kern/uipc_usrreq.c
  projects/ipsec/sys/net/if.c
  projects/ipsec/sys/net/if_bridge.c
  projects/ipsec/sys/net/if_bridgevar.h
  projects/ipsec/sys/net/iflib.c
  projects/ipsec/sys/netinet/in.c
  projects/ipsec/sys/netinet/ip_carp.c
  projects/ipsec/sys/netinet/ip_carp.h
  projects/ipsec/sys/netinet6/in6.c
  projects/ipsec/sys/sys/capability.h
  projects/ipsec/sys/sys/gtaskqueue.h
Directory Properties:
  projects/ipsec/   (props changed)
  projects/ipsec/contrib/elftoolchain/   (props changed)
  projects/ipsec/contrib/ipfilter/   (props changed)
  projects/ipsec/contrib/llvm/   (props changed)
  projects/ipsec/sys/contrib/ipfilter/   (props changed)

Modified: projects/ipsec/contrib/elftoolchain/strings/strings.c
==============================================================================
--- projects/ipsec/contrib/elftoolchain/strings/strings.c	Thu Jan 26 13:50:09 2017	(r312816)
+++ projects/ipsec/contrib/elftoolchain/strings/strings.c	Thu Jan 26 15:37:53 2017	(r312817)
@@ -189,7 +189,7 @@ main(int argc, char **argv)
 	if (!min_len)
 		min_len = 4;
 	if (!*argv)
-		rc = handle_file("{standard input}");
+		rc = find_strings("{standard input}", 0, 0);
 	else while (*argv) {
 		if (handle_file(*argv) != 0)
 			rc = 1;
@@ -205,13 +205,9 @@ handle_file(const char *name)
 
 	if (name == NULL)
 		return (1);
-	if (strcmp("{standard input}", name) != 0) {
-		if (freopen(name, "rb", stdin) == NULL) {
-			warnx("'%s': %s", name, strerror(errno));
-			return (1);
-		}
-	} else {
-		return (find_strings(name, (off_t)0, (off_t)0));
+	if (freopen(name, "rb", stdin) == NULL) {
+		warnx("'%s': %s", name, strerror(errno));
+		return (1);
 	}
 
 	fd = fileno(stdin);

Modified: projects/ipsec/contrib/ipfilter/lib/rwlock_emul.c
==============================================================================
--- projects/ipsec/contrib/ipfilter/lib/rwlock_emul.c	Thu Jan 26 13:50:09 2017	(r312816)
+++ projects/ipsec/contrib/ipfilter/lib/rwlock_emul.c	Thu Jan 26 15:37:53 2017	(r312817)
@@ -56,6 +56,27 @@ void eMrwlock_write_enter(rw, file, line
 }
 
 
+void eMrwlock_try_upgrade(rw, file, line)
+	eMrwlock_t *rw;
+	char *file;
+	int line;
+{
+	if (rw->eMrw_magic != EMM_MAGIC) {
+		fprintf(stderr, "%s:eMrwlock_write_enter(%p): bad magic: %#x\n",
+			rw->eMrw_owner, rw, rw->eMrw_magic);
+		abort();
+	}
+	if (rw->eMrw_read != 0 || rw->eMrw_write != 0) {
+		fprintf(stderr,
+			"%s:eMrwlock_try_upgrade(%p): already locked: %d/%d\n",
+			rw->eMrw_owner, rw, rw->eMrw_read, rw->eMrw_write);
+		abort();
+	}
+	rw->eMrw_write++;
+	rw->eMrw_heldin = file;
+	rw->eMrw_heldat = line;
+}
+
 void eMrwlock_downgrade(rw, file, line)
 	eMrwlock_t *rw;
 	char *file;

Modified: projects/ipsec/contrib/ipfilter/tools/ipf.c
==============================================================================
--- projects/ipsec/contrib/ipfilter/tools/ipf.c	Thu Jan 26 13:50:09 2017	(r312816)
+++ projects/ipsec/contrib/ipfilter/tools/ipf.c	Thu Jan 26 15:37:53 2017	(r312817)
@@ -408,14 +408,16 @@ static void flushfilter(arg, filter)
 		}
 		closedevice();
 		return;
-	}
-
-	if (strchr(arg, 'i') || strchr(arg, 'I'))
+	} else if (strchr(arg, 'i') || strchr(arg, 'I'))
 		fl = FR_INQUE;
-	if (strchr(arg, 'o') || strchr(arg, 'O'))
+	else if (strchr(arg, 'o') || strchr(arg, 'O'))
 		fl = FR_OUTQUE;
-	if (strchr(arg, 'a') || strchr(arg, 'A'))
+	else if (strchr(arg, 'a') || strchr(arg, 'A'))
 		fl = FR_OUTQUE|FR_INQUE;
+	else {
+		fprintf(stderr, "Incorrect flush argument: %s\n", arg);
+		usage();
+	}
 	if (opts & OPT_INACTIVE)
 		fl |= FR_INACTIVE;
 	rem = fl;

Modified: projects/ipsec/contrib/llvm/include/llvm/Analysis/ScalarEvolution.h
==============================================================================
--- projects/ipsec/contrib/llvm/include/llvm/Analysis/ScalarEvolution.h	Thu Jan 26 13:50:09 2017	(r312816)
+++ projects/ipsec/contrib/llvm/include/llvm/Analysis/ScalarEvolution.h	Thu Jan 26 15:37:53 2017	(r312817)
@@ -495,10 +495,29 @@ namespace llvm {
 
     /// The typedef for ExprValueMap.
     ///
-    typedef DenseMap<const SCEV *, SetVector<Value *>> ExprValueMapType;
+    typedef std::pair<Value *, ConstantInt *> ValueOffsetPair;
+    typedef DenseMap<const SCEV *, SetVector<ValueOffsetPair>> ExprValueMapType;
 
     /// ExprValueMap -- This map records the original values from which
     /// the SCEV expr is generated from.
+    ///
+    /// We want to represent the mapping as SCEV -> ValueOffsetPair instead
+    /// of SCEV -> Value:
+    /// Suppose we know S1 expands to V1, and
+    ///  S1 = S2 + C_a
+    ///  S3 = S2 + C_b
+    /// where C_a and C_b are different SCEVConstants. Then we'd like to
+    /// expand S3 as V1 - C_a + C_b instead of expanding S2 literally.
+    /// It is helpful when S2 is a complex SCEV expr.
+    ///
+    /// In order to do that, we represent ExprValueMap as a mapping from
+    /// SCEV to ValueOffsetPair. We will save both S1->{V1, 0} and
+    /// S2->{V1, C_a} into the map when we create SCEV for V1. When S3
+    /// is expanded, it will first expand S2 to V1 - C_a because of
+    /// S2->{V1, C_a} in the map, then expand S3 to V1 - C_a + C_b.
+    ///
+    /// Note: S->{V, Offset} in the ExprValueMap means S can be expanded
+    /// to V - Offset.
     ExprValueMapType ExprValueMap;
 
     /// The typedef for ValueExprMap.
@@ -1181,7 +1200,7 @@ namespace llvm {
     bool containsAddRecurrence(const SCEV *S);
 
     /// Return the Value set from which the SCEV expr is generated.
-    SetVector<Value *> *getSCEVValues(const SCEV *S);
+    SetVector<ValueOffsetPair> *getSCEVValues(const SCEV *S);
 
     /// Erase Value from ValueExprMap and ExprValueMap.
     void eraseValueFromMap(Value *V);

Modified: projects/ipsec/contrib/llvm/include/llvm/Analysis/ScalarEvolutionExpander.h
==============================================================================
--- projects/ipsec/contrib/llvm/include/llvm/Analysis/ScalarEvolutionExpander.h	Thu Jan 26 13:50:09 2017	(r312816)
+++ projects/ipsec/contrib/llvm/include/llvm/Analysis/ScalarEvolutionExpander.h	Thu Jan 26 15:37:53 2017	(r312817)
@@ -325,7 +325,8 @@ namespace llvm {
                           PointerType *PTy, Type *Ty, Value *V);
 
     /// \brief Find a previous Value in ExprValueMap for expand.
-    Value *FindValueInExprValueMap(const SCEV *S, const Instruction *InsertPt);
+    ScalarEvolution::ValueOffsetPair
+    FindValueInExprValueMap(const SCEV *S, const Instruction *InsertPt);
 
     Value *expand(const SCEV *S);
 

Modified: projects/ipsec/contrib/llvm/lib/Analysis/ScalarEvolution.cpp
==============================================================================
--- projects/ipsec/contrib/llvm/lib/Analysis/ScalarEvolution.cpp	Thu Jan 26 13:50:09 2017	(r312816)
+++ projects/ipsec/contrib/llvm/lib/Analysis/ScalarEvolution.cpp	Thu Jan 26 15:37:53 2017	(r312817)
@@ -3378,8 +3378,28 @@ bool ScalarEvolution::containsAddRecurre
   return F.FoundOne;
 }
 
-/// Return the Value set from S.
-SetVector<Value *> *ScalarEvolution::getSCEVValues(const SCEV *S) {
+/// Try to split a SCEVAddExpr into a pair of {SCEV, ConstantInt}.
+/// If \p S is a SCEVAddExpr and is composed of a sub SCEV S' and an
+/// offset I, then return {S', I}, else return {\p S, nullptr}.
+static std::pair<const SCEV *, ConstantInt *> splitAddExpr(const SCEV *S) {
+  const auto *Add = dyn_cast<SCEVAddExpr>(S);
+  if (!Add)
+    return {S, nullptr};
+
+  if (Add->getNumOperands() != 2)
+    return {S, nullptr};
+
+  auto *ConstOp = dyn_cast<SCEVConstant>(Add->getOperand(0));
+  if (!ConstOp)
+    return {S, nullptr};
+
+  return {Add->getOperand(1), ConstOp->getValue()};
+}
+
+/// Return the ValueOffsetPair set for \p S. \p S can be represented
+/// by the value and offset from any ValueOffsetPair in the set.
+SetVector<ScalarEvolution::ValueOffsetPair> *
+ScalarEvolution::getSCEVValues(const SCEV *S) {
   ExprValueMapType::iterator SI = ExprValueMap.find_as(S);
   if (SI == ExprValueMap.end())
     return nullptr;
@@ -3387,24 +3407,31 @@ SetVector<Value *> *ScalarEvolution::get
   if (VerifySCEVMap) {
     // Check there is no dangling Value in the set returned.
     for (const auto &VE : SI->second)
-      assert(ValueExprMap.count(VE));
+      assert(ValueExprMap.count(VE.first));
   }
 #endif
   return &SI->second;
 }
 
-/// Erase Value from ValueExprMap and ExprValueMap.  If ValueExprMap.erase(V) is
-/// not used together with forgetMemoizedResults(S), eraseValueFromMap should be
-/// used instead to ensure whenever V->S is removed from ValueExprMap, V is also
-/// removed from the set of ExprValueMap[S].
+/// Erase Value from ValueExprMap and ExprValueMap. ValueExprMap.erase(V)
+/// cannot be used separately. eraseValueFromMap should be used to remove
+/// V from ValueExprMap and ExprValueMap at the same time.
 void ScalarEvolution::eraseValueFromMap(Value *V) {
   ValueExprMapType::iterator I = ValueExprMap.find_as(V);
   if (I != ValueExprMap.end()) {
     const SCEV *S = I->second;
-    SetVector<Value *> *SV = getSCEVValues(S);
-    // Remove V from the set of ExprValueMap[S]
-    if (SV)
-      SV->remove(V);
+    // Remove {V, 0} from the set of ExprValueMap[S]
+    if (SetVector<ValueOffsetPair> *SV = getSCEVValues(S))
+      SV->remove({V, nullptr});
+
+    // Remove {V, Offset} from the set of ExprValueMap[Stripped]
+    const SCEV *Stripped;
+    ConstantInt *Offset;
+    std::tie(Stripped, Offset) = splitAddExpr(S);
+    if (Offset != nullptr) {
+      if (SetVector<ValueOffsetPair> *SV = getSCEVValues(Stripped))
+        SV->remove({V, Offset});
+    }
     ValueExprMap.erase(V);
   }
 }
@@ -3419,11 +3446,26 @@ const SCEV *ScalarEvolution::getSCEV(Val
     S = createSCEV(V);
     // During PHI resolution, it is possible to create two SCEVs for the same
     // V, so it is needed to double check whether V->S is inserted into
-    // ValueExprMap before insert S->V into ExprValueMap.
+    // ValueExprMap before insert S->{V, 0} into ExprValueMap.
     std::pair<ValueExprMapType::iterator, bool> Pair =
         ValueExprMap.insert({SCEVCallbackVH(V, this), S});
-    if (Pair.second)
-      ExprValueMap[S].insert(V);
+    if (Pair.second) {
+      ExprValueMap[S].insert({V, nullptr});
+
+      // If S == Stripped + Offset, add Stripped -> {V, Offset} into
+      // ExprValueMap.
+      const SCEV *Stripped = S;
+      ConstantInt *Offset = nullptr;
+      std::tie(Stripped, Offset) = splitAddExpr(S);
+      // If stripped is SCEVUnknown, don't bother to save
+      // Stripped -> {V, offset}. It doesn't simplify and sometimes even
+      // increase the complexity of the expansion code.
+      // If V is GetElementPtrInst, don't save Stripped -> {V, offset}
+      // because it may generate add/sub instead of GEP in SCEV expansion.
+      if (Offset != nullptr && !isa<SCEVUnknown>(Stripped) &&
+          !isa<GetElementPtrInst>(V))
+        ExprValueMap[Stripped].insert({V, Offset});
+    }
   }
   return S;
 }
@@ -3436,8 +3478,8 @@ const SCEV *ScalarEvolution::getExisting
     const SCEV *S = I->second;
     if (checkValidity(S))
       return S;
+    eraseValueFromMap(V);
     forgetMemoizedResults(S);
-    ValueExprMap.erase(I);
   }
   return nullptr;
 }
@@ -3675,8 +3717,8 @@ void ScalarEvolution::forgetSymbolicName
       if (!isa<PHINode>(I) ||
           !isa<SCEVUnknown>(Old) ||
           (I != PN && Old == SymName)) {
+        eraseValueFromMap(It->first);
         forgetMemoizedResults(Old);
-        ValueExprMap.erase(It);
       }
     }
 
@@ -4055,7 +4097,7 @@ const SCEV *ScalarEvolution::createAddRe
     // to create an AddRecExpr for this PHI node. We can not keep this temporary
     // as it will prevent later (possibly simpler) SCEV expressions to be added
     // to the ValueExprMap.
-    ValueExprMap.erase(PN);
+    eraseValueFromMap(PN);
   }
 
   return nullptr;
@@ -5435,8 +5477,8 @@ ScalarEvolution::getBackedgeTakenInfo(co
         // case, createNodeForPHI will perform the necessary updates on its
         // own when it gets to that point.
         if (!isa<PHINode>(I) || !isa<SCEVUnknown>(Old)) {
+          eraseValueFromMap(It->first);
           forgetMemoizedResults(Old);
-          ValueExprMap.erase(It);
         }
         if (PHINode *PN = dyn_cast<PHINode>(I))
           ConstantEvolutionLoopExitValue.erase(PN);
@@ -5481,8 +5523,8 @@ void ScalarEvolution::forgetLoop(const L
     ValueExprMapType::iterator It =
       ValueExprMap.find_as(static_cast<Value *>(I));
     if (It != ValueExprMap.end()) {
+      eraseValueFromMap(It->first);
       forgetMemoizedResults(It->second);
-      ValueExprMap.erase(It);
       if (PHINode *PN = dyn_cast<PHINode>(I))
         ConstantEvolutionLoopExitValue.erase(PN);
     }
@@ -5515,8 +5557,8 @@ void ScalarEvolution::forgetValue(Value 
     ValueExprMapType::iterator It =
       ValueExprMap.find_as(static_cast<Value *>(I));
     if (It != ValueExprMap.end()) {
+      eraseValueFromMap(It->first);
       forgetMemoizedResults(It->second);
-      ValueExprMap.erase(It);
       if (PHINode *PN = dyn_cast<PHINode>(I))
         ConstantEvolutionLoopExitValue.erase(PN);
     }

Modified: projects/ipsec/contrib/llvm/lib/Analysis/ScalarEvolutionExpander.cpp
==============================================================================
--- projects/ipsec/contrib/llvm/lib/Analysis/ScalarEvolutionExpander.cpp	Thu Jan 26 13:50:09 2017	(r312816)
+++ projects/ipsec/contrib/llvm/lib/Analysis/ScalarEvolutionExpander.cpp	Thu Jan 26 15:37:53 2017	(r312817)
@@ -1625,9 +1625,10 @@ Value *SCEVExpander::expandCodeFor(const
   return V;
 }
 
-Value *SCEVExpander::FindValueInExprValueMap(const SCEV *S,
-                                             const Instruction *InsertPt) {
-  SetVector<Value *> *Set = SE.getSCEVValues(S);
+ScalarEvolution::ValueOffsetPair
+SCEVExpander::FindValueInExprValueMap(const SCEV *S,
+                                      const Instruction *InsertPt) {
+  SetVector<ScalarEvolution::ValueOffsetPair> *Set = SE.getSCEVValues(S);
   // If the expansion is not in CanonicalMode, and the SCEV contains any
   // sub scAddRecExpr type SCEV, it is required to expand the SCEV literally.
   if (CanonicalMode || !SE.containsAddRecurrence(S)) {
@@ -1636,21 +1637,21 @@ Value *SCEVExpander::FindValueInExprValu
       // Choose a Value from the set which dominates the insertPt.
       // insertPt should be inside the Value's parent loop so as not to break
       // the LCSSA form.
-      for (auto const &Ent : *Set) {
+      for (auto const &VOPair : *Set) {
+        Value *V = VOPair.first;
+        ConstantInt *Offset = VOPair.second;
         Instruction *EntInst = nullptr;
-        if (Ent && isa<Instruction>(Ent) &&
-            (EntInst = cast<Instruction>(Ent)) &&
-            S->getType() == Ent->getType() &&
+        if (V && isa<Instruction>(V) && (EntInst = cast<Instruction>(V)) &&
+            S->getType() == V->getType() &&
             EntInst->getFunction() == InsertPt->getFunction() &&
             SE.DT.dominates(EntInst, InsertPt) &&
             (SE.LI.getLoopFor(EntInst->getParent()) == nullptr ||
-             SE.LI.getLoopFor(EntInst->getParent())->contains(InsertPt))) {
-          return Ent;
-        }
+             SE.LI.getLoopFor(EntInst->getParent())->contains(InsertPt)))
+          return {V, Offset};
       }
     }
   }
-  return nullptr;
+  return {nullptr, nullptr};
 }
 
 // The expansion of SCEV will either reuse a previous Value in ExprValueMap,
@@ -1698,10 +1699,14 @@ Value *SCEVExpander::expand(const SCEV *
   Builder.SetInsertPoint(InsertPt);
 
   // Expand the expression into instructions.
-  Value *V = FindValueInExprValueMap(S, InsertPt);
+  ScalarEvolution::ValueOffsetPair VO = FindValueInExprValueMap(S, InsertPt);
+  Value *V = VO.first;
 
   if (!V)
     V = visit(S);
+  else if (VO.second) {
+    V = Builder.CreateSub(V, VO.second);
+  }
 
   // Remember the expanded value for this SCEV at this location.
   //
@@ -1914,7 +1919,7 @@ Value *SCEVExpander::findExistingExpansi
 
   // Use expand's logic which is used for reusing a previous Value in
   // ExprValueMap.
-  if (Value *Val = FindValueInExprValueMap(S, At))
+  if (Value *Val = FindValueInExprValueMap(S, At).first)
     return Val;
 
   // There is potential to make this significantly smarter, but this simple

Modified: projects/ipsec/lib/libthr/thread/thr_exit.c
==============================================================================
--- projects/ipsec/lib/libthr/thread/thr_exit.c	Thu Jan 26 13:50:09 2017	(r312816)
+++ projects/ipsec/lib/libthr/thread/thr_exit.c	Thu Jan 26 15:37:53 2017	(r312817)
@@ -240,9 +240,6 @@ _pthread_exit_mask(void *status, sigset_
 
 #ifdef PIC
 	thread_uw_init();
-#endif /* PIC */
-
-#ifdef PIC
 	if (uwl_forcedunwind != NULL) {
 #else
 	if (_Unwind_ForcedUnwind != NULL) {

Modified: projects/ipsec/libexec/rtld-elf/aarch64/reloc.c
==============================================================================
--- projects/ipsec/libexec/rtld-elf/aarch64/reloc.c	Thu Jan 26 13:50:09 2017	(r312816)
+++ projects/ipsec/libexec/rtld-elf/aarch64/reloc.c	Thu Jan 26 15:37:53 2017	(r312817)
@@ -184,6 +184,18 @@ rtld_tlsdesc_handle(struct tls_data *tls
 	return (tlsdesc->index);
 }
 
+static void
+reloc_tlsdesc(Obj_Entry *obj, const Elf_Rela *rela, Elf_Addr *where)
+{
+	if (ELF_R_SYM(rela->r_info) == 0) {
+		where[0] = (Elf_Addr)_rtld_tlsdesc;
+		where[1] = obj->tlsoffset + rela->r_addend;
+	} else {
+		where[0] = (Elf_Addr)_rtld_tlsdesc_dynamic;
+		where[1] = (Elf_Addr)reloc_tlsdesc_alloc(obj, rela);
+	}
+}
+
 /*
  * Process the PLT relocations.
  */
@@ -204,14 +216,7 @@ reloc_plt(Obj_Entry *obj)
 			*where += (Elf_Addr)obj->relocbase;
 			break;
 		case R_AARCH64_TLSDESC:
-			if (ELF_R_SYM(rela->r_info) == 0) {
-				where[0] = (Elf_Addr)_rtld_tlsdesc;
-				where[1] = obj->tlsoffset + rela->r_addend;
-			} else {
-				where[0] = (Elf_Addr)_rtld_tlsdesc_dynamic;
-				where[1] = (Elf_Addr)reloc_tlsdesc_alloc(obj,
-				    rela);
-			}
+			reloc_tlsdesc(obj, rela, where);
 			break;
 		default:
 			_rtld_error("Unknown relocation type %u in PLT",
@@ -362,6 +367,9 @@ reloc_non_plt(Obj_Entry *obj, Obj_Entry 
 				return (-1);
 			}
 			break;
+		case R_AARCH64_TLSDESC:
+			reloc_tlsdesc(obj, rela, where);
+			break;
 		case R_AARCH64_TLS_TPREL64:
 			def = find_symdef(symnum, obj, &defobj, flags, cache,
 			    lockstate);

Modified: projects/ipsec/share/misc/committers-ports.dot
==============================================================================
--- projects/ipsec/share/misc/committers-ports.dot	Thu Jan 26 13:50:09 2017	(r312816)
+++ projects/ipsec/share/misc/committers-ports.dot	Thu Jan 26 15:37:53 2017	(r312817)
@@ -195,6 +195,7 @@ philip [label="Philip Paeps\nphilip@Free
 rafan [label="Rong-En Fan\nrafan@FreeBSD.org\n2006/06/23"]
 rakuco [label="Raphael Kubo da Costa\nrakuco@FreeBSD.org\n2011/08/22"]
 rene [label="Rene Ladan\nrene@FreeBSD.org\n2010/04/11"]
+rezny [label="Matthew Rezny\nrezny@FreeBSD.org\n2017/01/09"]
 riggs [label="Thomas Zander\nriggs@FreeBSD.org\n2014/01/09"]
 rm [label="Ruslan Makhmatkhanov\nrm@FreeBSD.org\n2011/11/06"]
 rnoland [label="Robert Noland\nrnoland@FreeBSD.org\n2008/07/21"]
@@ -370,6 +371,7 @@ erwin -> simon
 
 feld -> brnrd
 feld -> junovitch
+feld -> rezny
 
 fjoe -> danfe
 fjoe -> flo
@@ -595,6 +597,7 @@ swills -> feld
 swills -> jrm
 swills -> milki
 swills -> pclin
+swills -> rezny
 swills -> robak
 swills -> rpaulo
 swills -> tz

Modified: projects/ipsec/share/misc/scsi_modes
==============================================================================
--- projects/ipsec/share/misc/scsi_modes	Thu Jan 26 13:50:09 2017	(r312816)
+++ projects/ipsec/share/misc/scsi_modes	Thu Jan 26 15:37:53 2017	(r312817)
@@ -478,4 +478,17 @@
 	{Current Write Speed Supported (kBps)} i2
 };
 
+0x1d "Timeout and Protect" {
+	{Reserved} *i2
+	{Reserved} *t4
+	{G3Enable} t1
+	{TMOE} t1
+	{DISP} t1
+	{SWPP} t1
+	{Reserved} *i1
+	{Group 1 Minimum Timeout} i2
+	{Group 2 Minimum Timeout} i2
+	{Group 3 Timeout} i2
+};
+
 0x00 "Vendor-Specific";

Modified: projects/ipsec/sys/arm/arm/pmap-v6.c
==============================================================================
--- projects/ipsec/sys/arm/arm/pmap-v6.c	Thu Jan 26 13:50:09 2017	(r312816)
+++ projects/ipsec/sys/arm/arm/pmap-v6.c	Thu Jan 26 15:37:53 2017	(r312817)
@@ -1160,11 +1160,11 @@ pmap_bootstrap(vm_offset_t firstaddr)
 	 * Local CMAP1/CMAP2 are used for zeroing and copying pages.
 	 * Local CMAP2 is also used for data cache cleaning.
 	 */
-	pc = pcpu_find(curcpu);
+	pc = get_pcpu();
 	mtx_init(&pc->pc_cmap_lock, "SYSMAPS", NULL, MTX_DEF);
 	SYSMAP(caddr_t, pc->pc_cmap1_pte2p, pc->pc_cmap1_addr, 1);
 	SYSMAP(caddr_t, pc->pc_cmap2_pte2p, pc->pc_cmap2_addr, 1);
-	SYSMAP(vm_offset_t, unused, pc->pc_qmap_addr, 1);
+	SYSMAP(vm_offset_t, pc->pc_qmap_pte2p, pc->pc_qmap_addr, 1);
 
 	/*
 	 * Crashdump maps.
@@ -1217,6 +1217,7 @@ pmap_init_reserved_pages(void)
 			panic("%s: unable to allocate KVA", __func__);
 		pc->pc_cmap1_pte2p = pt2map_entry(pages);
 		pc->pc_cmap2_pte2p = pt2map_entry(pages + PAGE_SIZE);
+		pc->pc_qmap_pte2p = pt2map_entry(pages + (PAGE_SIZE * 2));
 		pc->pc_cmap1_addr = (caddr_t)pages;
 		pc->pc_cmap2_addr = (caddr_t)(pages + PAGE_SIZE);
 		pc->pc_qmap_addr = pages + (PAGE_SIZE * 2);
@@ -1584,7 +1585,7 @@ pmap_pt2pg_zero(vm_page_t m)
 	 *      to sync it even if the sync is only DSB.
 	 */
 	sched_pin();
-	pc = pcpu_find(curcpu);
+	pc = get_pcpu();
 	cmap2_pte2p = pc->pc_cmap2_pte2p;
 	mtx_lock(&pc->pc_cmap_lock);
 	if (pte2_load(cmap2_pte2p) != 0)
@@ -5661,7 +5662,7 @@ pmap_page_set_memattr(vm_page_t m, vm_me
 	if (ma != oma) {
 		pa = VM_PAGE_TO_PHYS(m);
 		sched_pin();
-		pc = pcpu_find(curcpu);
+		pc = get_pcpu();
 		cmap2_pte2p = pc->pc_cmap2_pte2p;
 		mtx_lock(&pc->pc_cmap_lock);
 		if (pte2_load(cmap2_pte2p) != 0)
@@ -5754,7 +5755,7 @@ pmap_zero_page(vm_page_t m)
 	struct pcpu *pc;
 
 	sched_pin();
-	pc = pcpu_find(curcpu);
+	pc = get_pcpu();
 	cmap2_pte2p = pc->pc_cmap2_pte2p;
 	mtx_lock(&pc->pc_cmap_lock);
 	if (pte2_load(cmap2_pte2p) != 0)
@@ -5781,7 +5782,7 @@ pmap_zero_page_area(vm_page_t m, int off
 	struct pcpu *pc;
 
 	sched_pin();
-	pc = pcpu_find(curcpu);
+	pc = get_pcpu();
 	cmap2_pte2p = pc->pc_cmap2_pte2p;
 	mtx_lock(&pc->pc_cmap_lock);
 	if (pte2_load(cmap2_pte2p) != 0)
@@ -5811,7 +5812,7 @@ pmap_copy_page(vm_page_t src, vm_page_t 
 	struct pcpu *pc;
 
 	sched_pin();
-	pc = pcpu_find(curcpu);
+	pc = get_pcpu();
 	cmap1_pte2p = pc->pc_cmap1_pte2p;
 	cmap2_pte2p = pc->pc_cmap2_pte2p;
 	mtx_lock(&pc->pc_cmap_lock);
@@ -5846,7 +5847,7 @@ pmap_copy_pages(vm_page_t ma[], vm_offse
 	int cnt;
 
 	sched_pin();
-	pc = pcpu_find(curcpu);
+	pc = get_pcpu();
 	cmap1_pte2p = pc->pc_cmap1_pte2p;
 	cmap2_pte2p = pc->pc_cmap2_pte2p;
 	mtx_lock(&pc->pc_cmap_lock);
@@ -5885,34 +5886,34 @@ pmap_copy_pages(vm_page_t ma[], vm_offse
 vm_offset_t
 pmap_quick_enter_page(vm_page_t m)
 {
+	struct pcpu *pc;
 	pt2_entry_t *pte2p;
-	vm_offset_t qmap_addr;
 
 	critical_enter();
-	qmap_addr = PCPU_GET(qmap_addr);
-	pte2p = pt2map_entry(qmap_addr);
+	pc = get_pcpu();
+	pte2p = pc->pc_qmap_pte2p;
 
 	KASSERT(pte2_load(pte2p) == 0, ("%s: PTE2 busy", __func__));
 
 	pte2_store(pte2p, PTE2_KERN_NG(VM_PAGE_TO_PHYS(m), PTE2_AP_KRW,
 	    vm_page_pte2_attr(m)));
-	return (qmap_addr);
+	return (pc->pc_qmap_addr);
 }
 
 void
 pmap_quick_remove_page(vm_offset_t addr)
 {
+	struct pcpu *pc;
 	pt2_entry_t *pte2p;
-	vm_offset_t qmap_addr;
 
-	qmap_addr = PCPU_GET(qmap_addr);
-	pte2p = pt2map_entry(qmap_addr);
+	pc = get_pcpu();
+	pte2p = pc->pc_qmap_pte2p;
 
-	KASSERT(addr == qmap_addr, ("%s: invalid address", __func__));
+	KASSERT(addr == pc->pc_qmap_addr, ("%s: invalid address", __func__));
 	KASSERT(pte2_load(pte2p) != 0, ("%s: PTE2 not in use", __func__));
 
 	pte2_clear(pte2p);
-	tlb_flush(qmap_addr);
+	tlb_flush(pc->pc_qmap_addr);
 	critical_exit();
 }
 
@@ -6212,7 +6213,7 @@ pmap_dcache_wb_pou(vm_paddr_t pa, vm_siz
 	    ("%s: not on single page", __func__));
 
 	sched_pin();
-	pc = pcpu_find(curcpu);
+	pc = get_pcpu();
 	cmap2_pte2p = pc->pc_cmap2_pte2p;
 	mtx_lock(&pc->pc_cmap_lock);
 	if (pte2_load(cmap2_pte2p) != 0)
@@ -6477,7 +6478,7 @@ pmap_zero_page_check(vm_page_t m)
 	struct pcpu *pc;
 
 	sched_pin();
-	pc = pcpu_find(curcpu);
+	pc = get_pcpu();
 	cmap2_pte2p = pc->pc_cmap2_pte2p;
 	mtx_lock(&pc->pc_cmap_lock);
 	if (pte2_load(cmap2_pte2p) != 0)

Modified: projects/ipsec/sys/arm/conf/ARMADA38X
==============================================================================
--- projects/ipsec/sys/arm/conf/ARMADA38X	Thu Jan 26 13:50:09 2017	(r312816)
+++ projects/ipsec/sys/arm/conf/ARMADA38X	Thu Jan 26 15:37:53 2017	(r312817)
@@ -60,6 +60,9 @@ device		scbus
 device		pass
 device		da
 
+# SATA
+device		ahci
+
 # I2C
 device		iic
 device		iicbus

Modified: projects/ipsec/sys/arm/include/pcpu.h
==============================================================================
--- projects/ipsec/sys/arm/include/pcpu.h	Thu Jan 26 13:50:09 2017	(r312816)
+++ projects/ipsec/sys/arm/include/pcpu.h	Thu Jan 26 15:37:53 2017	(r312817)
@@ -54,15 +54,13 @@ struct vmspace;
 	caddr_t pc_cmap1_addr;						\
 	caddr_t pc_cmap2_addr;						\
 	vm_offset_t pc_qmap_addr;					\
-	void *pc_qmap_pte;						\
+	void *pc_qmap_pte2p;						\
 	unsigned int pc_dbreg[32];					\
 	int pc_dbreg_cmd;						\
 	char __pad[27]
 #else
 #define PCPU_MD_FIELDS							\
-	vm_offset_t qmap_addr;						\
-	void *pc_qmap_pte;						\
-	char __pad[149]
+	char __pad[157]
 #endif
 
 #ifdef _KERNEL

Modified: projects/ipsec/sys/arm/mv/armada38x/files.armada38x
==============================================================================
--- projects/ipsec/sys/arm/mv/armada38x/files.armada38x	Thu Jan 26 13:50:09 2017	(r312816)
+++ projects/ipsec/sys/arm/mv/armada38x/files.armada38x	Thu Jan 26 15:37:53 2017	(r312817)
@@ -1,6 +1,8 @@
 # $FreeBSD$
 arm/mv/mpic.c			standard
 
+arm/mv/armada/thermal.c		optional fdt
+
 arm/mv/armada38x/armada38x.c	standard
 arm/mv/armada38x/armada38x_mp.c	optional smp
 arm/mv/armada38x/pmsu.c		standard

Modified: projects/ipsec/sys/arm/mv/files.mv
==============================================================================
--- projects/ipsec/sys/arm/mv/files.mv	Thu Jan 26 13:50:09 2017	(r312816)
+++ projects/ipsec/sys/arm/mv/files.mv	Thu Jan 26 15:37:53 2017	(r312817)
@@ -29,5 +29,6 @@ dev/uart/uart_dev_ns8250.c	optional	uart
 dev/uart/uart_dev_snps.c	optional	uart
 dev/usb/controller/ehci_mv.c	optional	ehci
 dev/usb/controller/xhci_mv.c	optional	xhci
+dev/ahci/ahci_mv_fdt.c		optional	ahci
 
 kern/kern_clocksource.c		standard

Modified: projects/ipsec/sys/arm/mv/mv_common.c
==============================================================================
--- projects/ipsec/sys/arm/mv/mv_common.c	Thu Jan 26 13:50:09 2017	(r312816)
+++ projects/ipsec/sys/arm/mv/mv_common.c	Thu Jan 26 15:37:53 2017	(r312817)
@@ -98,6 +98,7 @@ static void decode_win_usb_setup(u_long)
 static void decode_win_usb3_setup(u_long);
 static void decode_win_eth_setup(u_long);
 static void decode_win_sata_setup(u_long);
+static void decode_win_ahci_setup(u_long);
 
 static void decode_win_idma_setup(u_long);
 static void decode_win_xor_setup(u_long);
@@ -107,6 +108,7 @@ static void decode_win_usb3_dump(u_long)
 static void decode_win_eth_dump(u_long base);
 static void decode_win_idma_dump(u_long base);
 static void decode_win_xor_dump(u_long base);
+static void decode_win_ahci_dump(u_long base);
 
 static int fdt_get_ranges(const char *, void *, int, int *, int *);
 #ifdef SOC_MV_ARMADA38X
@@ -139,6 +141,7 @@ static struct soc_node_spec soc_nodes[] 
 	{ "mrvl,ge", &decode_win_eth_setup, &decode_win_eth_dump },
 	{ "mrvl,usb-ehci", &decode_win_usb_setup, &decode_win_usb_dump },
 	{ "marvell,armada-380-xhci", &decode_win_usb3_setup, &decode_win_usb3_dump },
+	{ "marvell,armada-380-ahci", &decode_win_ahci_setup, &decode_win_ahci_dump },
 	{ "mrvl,sata", &decode_win_sata_setup, NULL },
 	{ "mrvl,xor", &decode_win_xor_setup, &decode_win_xor_dump },
 	{ "mrvl,idma", &decode_win_idma_setup, &decode_win_idma_dump },
@@ -146,7 +149,12 @@ static struct soc_node_spec soc_nodes[] 
 	{ NULL, NULL, NULL },
 };
 
-struct fdt_pm_mask_entry fdt_pm_mask_table[] = {
+struct fdt_pm_mask_entry {
+	char		*compat;
+	uint32_t	mask;
+};
+
+static struct fdt_pm_mask_entry fdt_pm_mask_table[] = {
 	{ "mrvl,ge",		CPU_PM_CTRL_GE(0) },
 	{ "mrvl,ge",		CPU_PM_CTRL_GE(1) },
 	{ "mrvl,usb-ehci",	CPU_PM_CTRL_USB(0) },
@@ -660,6 +668,11 @@ WIN_REG_BASE_IDX_RD(win_sata, cr, MV_WIN
 WIN_REG_BASE_IDX_RD(win_sata, br, MV_WIN_SATA_BASE);
 WIN_REG_BASE_IDX_WR(win_sata, cr, MV_WIN_SATA_CTRL);
 WIN_REG_BASE_IDX_WR(win_sata, br, MV_WIN_SATA_BASE);
+#if defined(SOC_MV_ARMADA38X)
+WIN_REG_BASE_IDX_RD(win_sata, sz, MV_WIN_SATA_SIZE);
+WIN_REG_BASE_IDX_WR(win_sata, sz, MV_WIN_SATA_SIZE);
+#endif
+
 #ifndef SOC_MV_DOVE
 WIN_REG_IDX_RD(ddr, br, MV_WIN_DDR_BASE, MV_DDR_CADR_BASE)
 WIN_REG_IDX_RD(ddr, sz, MV_WIN_DDR_SIZE, MV_DDR_CADR_BASE)
@@ -1999,6 +2012,75 @@ decode_win_sata_setup(u_long base)
 		}
 }
 
+#ifdef SOC_MV_ARMADA38X
+/*
+ * Configure AHCI decoding windows
+ */
+static void
+decode_win_ahci_setup(u_long base)
+{
+	uint32_t br, cr, sz;
+	int i, j;
+
+	for (i = 0; i < MV_WIN_SATA_MAX; i++) {
+		win_sata_cr_write(base, i, 0);
+		win_sata_br_write(base, i, 0);
+		win_sata_sz_write(base, i, 0);
+	}
+
+	for (i = 0; i < MV_WIN_DDR_MAX; i++) {
+		if (ddr_is_active(i)) {
+			cr = (ddr_attr(i) << IO_WIN_ATTR_SHIFT) |
+			    (ddr_target(i) << IO_WIN_TGT_SHIFT) |
+			    IO_WIN_ENA_MASK;
+			br = ddr_base(i);
+			sz = (ddr_size(i) - 1) &
+			    (IO_WIN_SIZE_MASK << IO_WIN_SIZE_SHIFT);
+
+			/* Use first available SATA window */
+			for (j = 0; j < MV_WIN_SATA_MAX; j++) {
+				if (win_sata_cr_read(base, j) & IO_WIN_ENA_MASK)
+					continue;
+
+				/* BASE is set to DRAM base (0x00000000) */
+				win_sata_br_write(base, j, br);
+				/* CTRL targets DRAM ctrl with 0x0E or 0x0D */
+				win_sata_cr_write(base, j, cr);
+				/* SIZE is set to 16MB - max value */
+				win_sata_sz_write(base, j, sz);
+				break;
+			}
+		}
+	}
+}
+
+static void
+decode_win_ahci_dump(u_long base)
+{
+	int i;
+
+	for (i = 0; i < MV_WIN_SATA_MAX; i++)
+		printf("SATA window#%d: cr 0x%08x, br 0x%08x, sz 0x%08x\n", i,
+		    win_sata_cr_read(base, i), win_sata_br_read(base, i),
+		    win_sata_sz_read(base,i));
+}
+
+#else
+/*
+ * Provide dummy functions to satisfy the build
+ * for SoC's not equipped with AHCI controller
+ */
+static void
+decode_win_ahci_setup(u_long base)
+{
+}
+
+static void
+decode_win_ahci_dump(u_long base)
+{
+}
+#endif
+
 static int
 decode_win_sata_valid(void)
 {
@@ -2172,6 +2254,10 @@ fdt_win_setup(void)
 
 			soc_node = &soc_nodes[i];
 
+			/* Setup only for enabled devices */
+			if (ofw_bus_node_status_okay(child) == 0)
+				continue;
+
 			if (!ofw_bus_node_is_compatible(child,soc_node->compat))
 				continue;
 

Modified: projects/ipsec/sys/arm/mv/mvwin.h
==============================================================================
--- projects/ipsec/sys/arm/mv/mvwin.h	Thu Jan 26 13:50:09 2017	(r312816)
+++ projects/ipsec/sys/arm/mv/mvwin.h	Thu Jan 26 15:37:53 2017	(r312817)
@@ -324,9 +324,16 @@
 #define MV_PCIE_CONTROL			(0x1a00)
 #define MV_PCIE_ROOT_CMPLX		(1 << 1)
 
+#if defined(SOC_MV_ARMADA38X)
+#define	MV_WIN_SATA_CTRL(n)		(0x10 * (n) + 0x60)
+#define	MV_WIN_SATA_BASE(n)		(0x10 * (n) + 0x64)
+#define	MV_WIN_SATA_SIZE(n)		(0x10 * (n) + 0x68)
+#define	MV_WIN_SATA_MAX			4
+#else
 #define	MV_WIN_SATA_CTRL(n)		(0x10 * (n) + 0x30)
 #define	MV_WIN_SATA_BASE(n)		(0x10 * (n) + 0x34)
 #define	MV_WIN_SATA_MAX			4
+#endif
 
 #if defined(SOC_MV_ARMADA38X)
 #define	MV_BOOTROM_MEM_ADDR	0xFFF00000

Modified: projects/ipsec/sys/cam/cam_iosched.c
==============================================================================
--- projects/ipsec/sys/cam/cam_iosched.c	Thu Jan 26 13:50:09 2017	(r312816)
+++ projects/ipsec/sys/cam/cam_iosched.c	Thu Jan 26 15:37:53 2017	(r312817)
@@ -112,7 +112,7 @@ typedef enum {
 	bandwidth,			/* Limit bandwidth to the drive */
 	limiter_max
 } io_limiter;
-	
+
 static const char *cam_iosched_limiter_names[] =
     { "none", "queue_depth", "iops", "bandwidth" };
 
@@ -131,7 +131,7 @@ typedef int l_tick_t(struct iop_stats *)
  * Called to see if the limiter thinks this IOP can be allowed to
  * proceed. If so, the limiter assumes that the while IOP proceeded
  * and makes any accounting of it that's needed.
- */ 
+ */
 typedef int l_iop_t(struct iop_stats *, struct bio *);
 
 /*
@@ -157,8 +157,7 @@ static l_tick_t cam_iosched_bw_tick;
 static l_iop_t cam_iosched_bw_caniop;
 static l_iop_t cam_iosched_bw_iop;
 
-struct limswitch 
-{
+struct limswitch {
 	l_init_t	*l_init;
 	l_tick_t	*l_tick;
 	l_iop_t		*l_iop;
@@ -195,8 +194,7 @@ struct limswitch 
 	},
 };
 
-struct iop_stats 
-{
+struct iop_stats {
 	/*
 	 * sysctl state for this subnode.
 	 */
@@ -212,7 +210,6 @@ struct iop_stats 
 	int		current;	/* Current rate limiter */
 	int		l_value1;	/* per-limiter scratch value 1. */
 	int		l_value2;	/* per-limiter scratch value 2. */
-	
 
 	/*
 	 * Debug information about counts of I/Os that have gone through the
@@ -223,7 +220,7 @@ struct iop_stats 
 	int		total;		/* Total for all time -- wraps */
 	int		in;		/* number queued all time -- wraps */
 	int		out;		/* number completed all time -- wraps */
-	
+
 	/*
 	 * Statistics on different bits of the process.
 	 */
@@ -251,8 +248,7 @@ typedef enum {
 static const char *cam_iosched_control_type_names[] =
     { "set_max", "read_latency" };
 
-struct control_loop
-{
+struct control_loop {
 	/*
 	 * sysctl state for this subnode.
 	 */
@@ -272,8 +268,7 @@ struct control_loop
 
 #endif
 
-struct cam_iosched_softc
-{
+struct cam_iosched_softc {
 	struct bio_queue_head bio_queue;
 	struct bio_queue_head trim_queue;
 				/* scheduler flags < 16, user flags >= 16 */
@@ -385,7 +380,7 @@ cam_iosched_limiter_iodone(struct iop_st
 static int
 cam_iosched_qd_iop(struct iop_stats *ios, struct bio *bp)
 {
-		
+
 	if (ios->current <= 0 || ios->pending < ios->current)
 		return 0;
 
@@ -395,7 +390,7 @@ cam_iosched_qd_iop(struct iop_stats *ios
 static int
 cam_iosched_qd_caniop(struct iop_stats *ios, struct bio *bp)
 {
-		
+
 	if (ios->current <= 0 || ios->pending < ios->current)
 		return 0;
 
@@ -405,7 +400,7 @@ cam_iosched_qd_caniop(struct iop_stats *
 static int
 cam_iosched_qd_iodone(struct iop_stats *ios, struct bio *bp)
 {
-		
+
 	if (ios->current <= 0 || ios->pending != ios->current)
 		return 0;
 
@@ -773,7 +768,7 @@ cam_iosched_limiter_sysctl(SYSCTL_HANDLE
 	struct cam_iosched_softc *isc;
 	int value, i, error;
 	const char *p;
-	
+
 	ios = arg1;
 	isc = ios->softc;
 	value = ios->limiter;
@@ -781,7 +776,7 @@ cam_iosched_limiter_sysctl(SYSCTL_HANDLE
 		p = "UNKNOWN";
 	else
 		p = cam_iosched_limiter_names[value];
-	
+
 	strlcpy(buf, p, sizeof(buf));
 	error = sysctl_handle_string(oidp, buf, sizeof(buf), req);
 	if (error != 0 || req->newptr == NULL)
@@ -819,7 +814,7 @@ cam_iosched_control_type_sysctl(SYSCTL_H
 	struct cam_iosched_softc *isc;
 	int value, i, error;
 	const char *p;
-	
+
 	clp = arg1;
 	isc = clp->softc;
 	value = clp->type;
@@ -827,7 +822,7 @@ cam_iosched_control_type_sysctl(SYSCTL_H
 		p = "UNKNOWN";
 	else
 		p = cam_iosched_control_type_names[value];
-	
+
 	strlcpy(buf, p, sizeof(buf));
 	error = sysctl_handle_string(oidp, buf, sizeof(buf), req);
 	if (error != 0 || req->newptr == NULL)
@@ -852,7 +847,7 @@ cam_iosched_sbintime_sysctl(SYSCTL_HANDL
 	sbintime_t value;
 	int error;
 	uint64_t us;
-	
+
 	value = *(sbintime_t *)arg1;
 	us = (uint64_t)value / SBT_1US;
 	snprintf(buf, sizeof(buf), "%ju", (intmax_t)us);
@@ -969,7 +964,7 @@ cam_iosched_cl_sysctl_init(struct cam_io
 	struct sysctl_oid_list *n;
 	struct sysctl_ctx_list *ctx;
 	struct control_loop *clp;
-	
+
 	clp = &isc->cl;
 	clp->sysctl_tree = SYSCTL_ADD_NODE(&isc->sysctl_ctx,
 	    SYSCTL_CHILDREN(isc->sysctl_tree), OID_AUTO, "control",
@@ -1007,7 +1002,7 @@ cam_iosched_cl_sysctl_fini(struct contro
 			printf("can't remove iosched sysctl control loop context\n");
 }
 #endif
-	    
+
 /*
  * Allocate the iosched structure. This also insulates callers from knowing
  * sizeof struct cam_iosched_softc.
@@ -1069,7 +1064,6 @@ cam_iosched_fini(struct cam_iosched_soft
 			callout_drain(&isc->ticker);
 			isc->flags &= ~ CAM_IOSCHED_FLAG_CALLOUT_ACTIVE;
 		}
-			
 #endif
 		free(isc, M_CAMSCHED);
 	}

*** DIFF OUTPUT TRUNCATED AT 1000 LINES ***



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