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...
Andrey V. Elsukov
ae at FreeBSD.org
Thu Jan 26 15:37:56 UTC 2017
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 at Free
rafan [label="Rong-En Fan\nrafan at FreeBSD.org\n2006/06/23"]
rakuco [label="Raphael Kubo da Costa\nrakuco at FreeBSD.org\n2011/08/22"]
rene [label="Rene Ladan\nrene at FreeBSD.org\n2010/04/11"]
+rezny [label="Matthew Rezny\nrezny at FreeBSD.org\n2017/01/09"]
riggs [label="Thomas Zander\nriggs at FreeBSD.org\n2014/01/09"]
rm [label="Ruslan Makhmatkhanov\nrm at FreeBSD.org\n2011/11/06"]
rnoland [label="Robert Noland\nrnoland at 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 ***
More information about the svn-src-projects
mailing list