]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/log
FreeBSD/FreeBSD.git
12 years agoCorrect function name in comment.
jhb [Fri, 3 Aug 2012 18:40:44 +0000 (18:40 +0000)]
Correct function name in comment.

Submitted by: alc

12 years agoParse notes only after object structure had been allocated.
kan [Fri, 3 Aug 2012 17:04:41 +0000 (17:04 +0000)]
Parse notes only after object structure had been allocated.

Reported by: kargl
Reviewed by: kib (sans whitespace)

12 years agoMicrooptimize LAPIC timer routines to avoid reading from hardware during
mav [Fri, 3 Aug 2012 15:19:59 +0000 (15:19 +0000)]
Microoptimize LAPIC timer routines to avoid reading from hardware during
programming using earlier cached values. This makes respective routines to
disappear from PMC top and reduces total number of active CPU cycles on idle
24-core system by 10%.

12 years agoNew command "gmultipath prefer" to force selection of a specified
thomas [Fri, 3 Aug 2012 14:55:35 +0000 (14:55 +0000)]
New command "gmultipath prefer" to force selection of a specified
provider in an Active/Passive configuration.

Reviewed by: mav
MFC after: 4 weeks

12 years agoOops. We only do allocate room for extended commands
mjacob [Fri, 3 Aug 2012 14:25:35 +0000 (14:25 +0000)]
Oops. We only do allocate room for extended commands
and responses for 2300 cards are newer.

Sponsored by: Spectralogic
Noticed by: Our Friend Manfred
MFC after: 1 month
X-MFC: 238869

12 years agosupport building vtnet as an embedded driver
luigi [Fri, 3 Aug 2012 14:00:26 +0000 (14:00 +0000)]
support building vtnet as an embedded driver

12 years agoImprove the handling of static DMA buffers that use non-default memory
jhb [Fri, 3 Aug 2012 13:50:29 +0000 (13:50 +0000)]
Improve the handling of static DMA buffers that use non-default memory
attributes (currently just BUS_DMA_NOCACHE):
- Don't call pmap_change_attr() on the returned address, instead use
  kmem_alloc_contig() to ask the VM system for memory with the requested
  attribute.
- As a result, always use kmem_alloc_contig() for non-default memory
  attributes, even for sub-page allocations.  This requires adjusting
  bus_dmamem_free()'s logic for determining which free routine to use.
- For x86, add a new dummy bus_dmamap that is used for static DMA
  buffers allocated via kmem_alloc_contig().  bus_dmamem_free() can then
  use the map pointer to determine which free routine to use.
- For powerpc, add a new flag to the allocated map (bus_dmamem_alloc()
  always creates a real map on powerpc) to indicate which free routine
  should be used.

Note that the BUS_DMA_NOCACHE handling in powerpc is currently #ifdef'd out.
I have left it disabled but updated it to match x86.

Reviewed by: scottl
MFC after: 1 month

12 years agoRemove duplicate check.
mav [Fri, 3 Aug 2012 12:55:31 +0000 (12:55 +0000)]
Remove duplicate check.

Submitted by: Dmitry Luhtionov <dmitryluhtionov@gmail.com>

12 years agoMicrooptimize time math. As soon as our event periods are always below ome
mav [Fri, 3 Aug 2012 09:08:20 +0000 (09:08 +0000)]
Microoptimize time math.  As soon as our event periods are always below ome
second we may not add intereger parts by using bintime_addx() instead of
bintime_add().  Profiling shows handleevents() time redction by 15%.

12 years agoInline vm_page_aflags_clear() and vm_page_aflags_set().
alc [Fri, 3 Aug 2012 01:48:15 +0000 (01:48 +0000)]
Inline vm_page_aflags_clear() and vm_page_aflags_set().

Add comments stating that neither these functions nor the flags that they
are used to manipulate are part of the KBI.

12 years agoCorrect a typo.
delphij [Fri, 3 Aug 2012 00:11:13 +0000 (00:11 +0000)]
Correct a typo.

Reported by: Sascha Wildner <swildner dragonflybsd org>
Reviewed by: scottl
MFC after: 3 days

12 years agoFix an issue that crept in with the previous descriptor tidyup.
adrian [Thu, 2 Aug 2012 20:14:45 +0000 (20:14 +0000)]
Fix an issue that crept in with the previous descriptor tidyup.

When forming aggregates, the last descriptor was now not being
correctly setup - instead, the "setuplasttxdesc" call was being
handed the first descriptor in the last subframe, rather than the
last descriptor in the last subframe.

This showed up as "bad series0 hwrate" messages, as the final
descriptor just didn't have any of the rate control information
squirreled away.

Tested:
* AR9280 STA -> 11n AP, iperf TCP

12 years agoDisallow sectorsize larger than MAXPHYS and mediasize smaller than
jh [Thu, 2 Aug 2012 15:05:34 +0000 (15:05 +0000)]
Disallow sectorsize larger than MAXPHYS and mediasize smaller than
sectorsize.

PR: 169947
Submitted by: Filip Palian (original version)
Reviewed by: kib

12 years agoFix races between in_lltable_prefix_free(), lla_lookup(),
glebius [Thu, 2 Aug 2012 13:57:49 +0000 (13:57 +0000)]
Fix races between in_lltable_prefix_free(), lla_lookup(),
llentry_free() and arptimer():

o Use callout_init_rw() for lle timeout, this allows us safely
  disestablish them.
  - This allows us to simplify the arptimer() and make it
    race safe.
o Consistently use ifp->if_afdata_lock to lock access to
  linked lists in the lle hashes.
o Introduce new lle flag LLE_LINKED, which marks an entry that
  is attached to the hash.
  - Use LLE_LINKED to avoid double unlinking via consequent
    calls to llentry_free().
  - Mark lle with LLE_DELETED via |= operation istead of =,
    so that other flags won't be lost.
o Make LLE_ADDREF(), LLE_REMREF() and LLE_FREE_LOCKED() more
  consistent and provide more informative KASSERTs.

The patch is a collaborative work of all submitters and myself.

PR: kern/165863
Submitted by: Andrey Zonov <andrey zonov.org>
Submitted by: Ryan Stone <rysto32 gmail.com>
Submitted by: Eric van Gyzen <eric_van_gyzen dell.com>

12 years agoThe llentry_update() is used only by flowtable and the latter
glebius [Thu, 2 Aug 2012 13:20:44 +0000 (13:20 +0000)]
The llentry_update() is used only by flowtable and the latter
always passes NULL pointer to it. Thus, code can be simplified
and function renamed to llentry_alloc() to match rtalloc().

12 years agoreplace __unused with a portable construct;
luigi [Thu, 2 Aug 2012 12:45:13 +0000 (12:45 +0000)]
replace __unused with a portable construct;
fix a couple of signed/unsigned warnings.

12 years agoRemove trailing whitespace.
joel [Thu, 2 Aug 2012 12:17:52 +0000 (12:17 +0000)]
Remove trailing whitespace.

12 years agomdoc: remove superfluous paragraph macro.
joel [Thu, 2 Aug 2012 12:16:46 +0000 (12:16 +0000)]
mdoc: remove superfluous paragraph macro.

12 years agofix some signed/unsigned warnings in the netmap code.
luigi [Thu, 2 Aug 2012 11:59:43 +0000 (11:59 +0000)]
fix some signed/unsigned warnings in the netmap code.
Unfortunately the original drivers still have a lot of
sign conversion/comparison warnings.

12 years agofsck_ffs shall accept the configured journal size, and not refuse to
kib [Thu, 2 Aug 2012 10:39:54 +0000 (10:39 +0000)]
fsck_ffs shall accept the configured journal size, and not refuse to
operate on it if journal size is greater then SUJ_MAX. The later
constant is only to select maximal journal size when user did not
specified size explicitely.

Submitted by: Andrey Zonov <andrey@zonov.org>
Reviewed by: mckusick
MFC after: 1 week

12 years agoUpdate netmap page, fixing the API documentation and usage example.
luigi [Thu, 2 Aug 2012 08:46:08 +0000 (08:46 +0000)]
Update netmap page, fixing the API documentation and usage example.

Add a new manpage for the vale switch

12 years agoAdd a newline on an error message;
luigi [Thu, 2 Aug 2012 07:35:40 +0000 (07:35 +0000)]
Add a newline on an error message;
rename linux functions to avoid confusion;
fix error reporting on linux

12 years agoCPU_NEXT() already handles wrapping around to the beginning. Also, in a
sbruno [Thu, 2 Aug 2012 00:00:34 +0000 (00:00 +0000)]
CPU_NEXT() already handles wrapping around to the beginning.  Also, in a
system with sparse CPU IDs, you can have a valid CPU ID > mp_ncpus (e.g. if
you have two CPUs 0 and 4, with mp_maxid == 4 and mp_ncpus == 2).

Introduced at svn r235210

Submitted by: jhb@
Reviewed by: jfv@

12 years ago Just like the other file systems found in /sys/fs, g_vfs_open()
avatar [Wed, 1 Aug 2012 23:05:57 +0000 (23:05 +0000)]
  Just like the other file systems found in /sys/fs, g_vfs_open()
should be paried with g_vfs_close().  Though g_vfs_close() is a wrapper
around g_wither_geom_close(), r206130 added the following test in
g_vfs_open():

if (bo->bo_private != vp)
return (EBUSY);

  Which will cause a 'Device busy' error inside reiserfs_mountfs() if
the same file system is re-mounted again after umount or mounting failure:

(case 1, /dev/ad4s3 is not a valid REISERFS partition)
# mount -t reiserfs -o ro /dev/ad4s3 /mnt
mount: /dev/ad4s3: Invalid argument
# mount -t msdosfs -o ro /dev/ad4s3 /mnt
mount: /dev/ad4s3: Device busy

(case 2, /dev/ad4s3 is a valid REISERFS partition)
# mount -t reiserfs -o ro /dev/ad4s3 /mnt
# umount /mnt
# mount -t reiserfs -o ro /dev/ad4s3 /mnt
mount: /dev/ad4s3: Device busy

  On the other hand, g_vfs_close() 'fixed' the above cases by doing an
extra step to keep 'sc->sc_bo->bo_private' and 'cp->private' pointers
synchronised.

Reviewed by: kib
MFC after: 1 month

12 years agoWhen we return with an error we cannot unlock the mutex, because
gnn [Wed, 1 Aug 2012 19:27:12 +0000 (19:27 +0000)]
When we return with an error we cannot unlock the mutex, because
it's been freed.  Protect against that, hopefully unlikely, case.

Reviewed by: rpaulo
MFC after: 2 weeks

12 years agoreplace inet_ntoa_r with the more standard inet_ntop().
luigi [Wed, 1 Aug 2012 18:52:07 +0000 (18:52 +0000)]
replace inet_ntoa_r with the more standard inet_ntop().
As discussed on -current, inet_ntoa_r() is non standard,
has different arguments in userspace and kernel, and
almost unused (no clients in userspace, only
net/flowtable.c, net/if_llatbl.c, netinet/in_pcb.c, netinet/tcp_subr.c
in the kernel)

12 years agoadd a cast to avoid a signed/unsigned warning (to be removed
luigi [Wed, 1 Aug 2012 18:49:00 +0000 (18:49 +0000)]
add a cast to avoid a signed/unsigned warning (to be removed
when we will have TUNABLE_UINT constructors)

12 years ago- Add myself to calendar.freebsd
bdrewery [Wed, 1 Aug 2012 17:48:38 +0000 (17:48 +0000)]
- Add myself to calendar.freebsd
- Add my mentor relationships to committers-ports.dot

Approved by: eadler (mentor)

12 years agoDo a trivial reformatting of the comment, to record the proper commit
kib [Wed, 1 Aug 2012 17:34:43 +0000 (17:34 +0000)]
Do a trivial reformatting of the comment, to record the proper commit
message for r238973:

Rdtsc instruction is not synchronized, it seems on some Intel cores it
can bypass even the locked instructions.  As a result, rdtsc executed
on different cores may return unordered TSC values even when the rdtsc
appearance in the instruction sequences is provably ordered.

Similarly to what has been done in r238755 for TSC synchronization
test, add explicit fences right before rdtsc in the timecounters 'get'
functions.  Intel recommends to use LFENCE, while AMD refers to
MFENCE. For VIA follow what Linux does and use LFENCE.  With this
change, I see no reordered reads of TSC on Nehalem.

Change the rmb() to inlined CPUID in the SMP TSC synchronization test.
On i386, locked instruction is used for rmb(), and as noted earlier,
it is not enough. Since i386 machine may not support SSE2, do simplest
possible synchronization with CPUID.

MFC after:   1 week
Discussed with:   avg, bde, jkim

12 years agoSeveral fixes to allow firmware/BIOS flash access from user-level:
mav [Wed, 1 Aug 2012 17:31:31 +0000 (17:31 +0000)]
Several fixes to allow firmware/BIOS flash access from user-level:
 - remove special handling of zero length transfers in mpi_pre_fw_upload();
 - add missing MPS_CM_FLAGS_DATAIN flag in mpi_pre_fw_upload();
 - move mps_user_setup_request() call into proper place;
 - increase user command timeout from 30 to 60 seconds;
 - avoid NULL dereference panic in case of firmware crash.
Set max DMA segment size to 24bit, as MPI SGE supports it.
Use mps_add_dmaseg() to add empty SGE instead of custom code.
Tune endianness safety.

Reviewed by: Desai, Kashyap <Kashyap.Desai@lsi.com>
Sponsored by: iXsystems, Inc.

12 years agodiff --git a/sys/x86/x86/tsc.c b/sys/x86/x86/tsc.c
kib [Wed, 1 Aug 2012 17:26:22 +0000 (17:26 +0000)]
diff --git a/sys/x86/x86/tsc.c b/sys/x86/x86/tsc.c
index c253a96..3d8bd30 100644
--- a/sys/x86/x86/tsc.c
+++ b/sys/x86/x86/tsc.c
@@ -82,7 +82,11 @@ static void tsc_freq_changed(void *arg, const struct cf_level *level,
 static void tsc_freq_changing(void *arg, const struct cf_level *level,
     int *status);
 static unsigned tsc_get_timecount(struct timecounter *tc);
-static unsigned tsc_get_timecount_low(struct timecounter *tc);
+static inline unsigned tsc_get_timecount_low(struct timecounter *tc);
+static unsigned tsc_get_timecount_lfence(struct timecounter *tc);
+static unsigned tsc_get_timecount_low_lfence(struct timecounter *tc);
+static unsigned tsc_get_timecount_mfence(struct timecounter *tc);
+static unsigned tsc_get_timecount_low_mfence(struct timecounter *tc);
 static void tsc_levels_changed(void *arg, int unit);

 static struct timecounter tsc_timecounter = {
@@ -262,6 +266,10 @@ probe_tsc_freq(void)
      (vm_guest == VM_GUEST_NO &&
      CPUID_TO_FAMILY(cpu_id) >= 0x10))
  tsc_is_invariant = 1;
+ if (cpu_feature & CPUID_SSE2) {
+ tsc_timecounter.tc_get_timecount =
+     tsc_get_timecount_mfence;
+ }
  break;
  case CPU_VENDOR_INTEL:
  if ((amd_pminfo & AMDPM_TSC_INVARIANT) != 0 ||
@@ -271,6 +279,10 @@ probe_tsc_freq(void)
      (CPUID_TO_FAMILY(cpu_id) == 0xf &&
      CPUID_TO_MODEL(cpu_id) >= 0x3))))
  tsc_is_invariant = 1;
+ if (cpu_feature & CPUID_SSE2) {
+ tsc_timecounter.tc_get_timecount =
+     tsc_get_timecount_lfence;
+ }
  break;
  case CPU_VENDOR_CENTAUR:
  if (vm_guest == VM_GUEST_NO &&
@@ -278,6 +290,10 @@ probe_tsc_freq(void)
      CPUID_TO_MODEL(cpu_id) >= 0xf &&
      (rdmsr(0x1203) & 0x100000000ULL) == 0)
  tsc_is_invariant = 1;
+ if (cpu_feature & CPUID_SSE2) {
+ tsc_timecounter.tc_get_timecount =
+     tsc_get_timecount_lfence;
+ }
  break;
  }

@@ -328,16 +344,31 @@ init_TSC(void)

 #ifdef SMP

-/* rmb is required here because rdtsc is not a serializing instruction. */
-#define TSC_READ(x) \
-static void \
-tsc_read_##x(void *arg) \
-{ \
- uint32_t *tsc = arg; \
- u_int cpu = PCPU_GET(cpuid); \
- \
- rmb(); \
- tsc[cpu * 3 + x] = rdtsc32(); \
+/*
+ * RDTSC is not a serializing instruction, and does not drain
+ * instruction stream, so we need to drain the stream before executing
+ * it.  It could be fixed by use of RDTSCP, except the instruction is
+ * not available everywhere.
+ *
+ * Use CPUID for draining in the boot-time SMP constistency test.  The
+ * timecounters use MFENCE for AMD CPUs, and LFENCE for others (Intel
+ * and VIA) when SSE2 is present, and nothing on older machines which
+ * also do not issue RDTSC prematurely.  There, testing for SSE2 and
+ * vendor is too cumbersome, and we learn about TSC presence from
+ * CPUID.
+ *
+ * Do not use do_cpuid(), since we do not need CPUID results, which
+ * have to be written into memory with do_cpuid().
+ */
+#define TSC_READ(x) \
+static void \
+tsc_read_##x(void *arg) \
+{ \
+ uint32_t *tsc = arg; \
+ u_int cpu = PCPU_GET(cpuid); \
+ \
+ __asm __volatile("cpuid" : : : "eax", "ebx", "ecx", "edx"); \
+ tsc[cpu * 3 + x] = rdtsc32(); \
 }
 TSC_READ(0)
 TSC_READ(1)
@@ -487,7 +518,16 @@ init:
  for (shift = 0; shift < 31 && (tsc_freq >> shift) > max_freq; shift++)
  ;
  if (shift > 0) {
- tsc_timecounter.tc_get_timecount = tsc_get_timecount_low;
+ if (cpu_feature & CPUID_SSE2) {
+ if (cpu_vendor_id == CPU_VENDOR_AMD) {
+ tsc_timecounter.tc_get_timecount =
+     tsc_get_timecount_low_mfence;
+ } else {
+ tsc_timecounter.tc_get_timecount =
+     tsc_get_timecount_low_lfence;
+ }
+ } else
+ tsc_timecounter.tc_get_timecount = tsc_get_timecount_low;
  tsc_timecounter.tc_name = "TSC-low";
  if (bootverbose)
  printf("TSC timecounter discards lower %d bit(s)\n",
@@ -599,16 +639,48 @@ tsc_get_timecount(struct timecounter *tc __unused)
  return (rdtsc32());
 }

-static u_int
+static inline u_int
 tsc_get_timecount_low(struct timecounter *tc)
 {
  uint32_t rv;

  __asm __volatile("rdtsc; shrd %%cl, %%edx, %0"
- : "=a" (rv) : "c" ((int)(intptr_t)tc->tc_priv) : "edx");
+     : "=a" (rv) : "c" ((int)(intptr_t)tc->tc_priv) : "edx");
  return (rv);
 }

+static u_int
+tsc_get_timecount_lfence(struct timecounter *tc __unused)
+{
+
+ lfence();
+ return (rdtsc32());
+}
+
+static u_int
+tsc_get_timecount_low_lfence(struct timecounter *tc)
+{
+
+ lfence();
+ return (tsc_get_timecount_low(tc));
+}
+
+static u_int
+tsc_get_timecount_mfence(struct timecounter *tc __unused)
+{
+
+ mfence();
+ return (rdtsc32());
+}
+
+static u_int
+tsc_get_timecount_low_mfence(struct timecounter *tc)
+{
+
+ mfence();
+ return (tsc_get_timecount_low(tc));
+}
+
 uint32_t
 cpu_fill_vdso_timehands(struct vdso_timehands *vdso_th)
 {

12 years agoAdd lfence().
kib [Wed, 1 Aug 2012 17:24:53 +0000 (17:24 +0000)]
Add lfence().

MFC after: 1 week

12 years agoRevise pmap_enter()'s handling of mapping updates that change the
alc [Wed, 1 Aug 2012 16:04:13 +0000 (16:04 +0000)]
Revise pmap_enter()'s handling of mapping updates that change the
PTE's PG_M and PG_RW bits but not the physical page frame.  First,
only perform vm_page_dirty() on a managed vm_page when the PG_M bit is
being cleared.  If the updated PTE continues to have PG_M set, then
there is no requirement to perform vm_page_dirty().  Second, flush the
mapping from the TLB when PG_M alone is cleared, not just when PG_M
and PG_RW are cleared.  Otherwise, a stale TLB entry may stop PG_M
from being set again on the next store to the virtual page.  However,
since the vm_page's dirty field already shows the physical page as
being dirty, no actual harm comes from the PG_M bit not being set.
Nonetheless, it is potentially confusing to someone expecting to see
the PTE change after a store to the virtual page.

12 years agoFix kernel panic on `camcontrol reset` for specific target, caused by
mav [Wed, 1 Aug 2012 12:24:13 +0000 (12:24 +0000)]
Fix kernel panic on `camcontrol reset` for specific target, caused by
uninitialized cm_targ in mpssas_action_resetdev().

Reviewed by: Desai, Kashyap <Kashyap.Desai@lsi.com>
Sponsored by: iXsystems, Inc.
MFC after: 3 days

12 years agoRestore a piece of BSD history.
des [Wed, 1 Aug 2012 09:10:21 +0000 (09:10 +0000)]
Restore a piece of BSD history.

PR: 169127
Submitted by: Ruben de Groot <ruben@hacktor.com>
MFC after: 1 week

12 years agoSome more whitespace cleanup.
glebius [Wed, 1 Aug 2012 09:00:26 +0000 (09:00 +0000)]
Some more whitespace cleanup.

12 years agoAdd the chip select glue.
imp [Wed, 1 Aug 2012 01:18:36 +0000 (01:18 +0000)]
Add the chip select glue.

12 years agoTeach md5(1) about sha512.
delphij [Wed, 1 Aug 2012 00:36:12 +0000 (00:36 +0000)]
Teach md5(1) about sha512.

MFC after: 1 month

12 years agoUse calloc().
delphij [Wed, 1 Aug 2012 00:21:55 +0000 (00:21 +0000)]
Use calloc().

12 years agoFix a case of "mis-located braces".
adrian [Wed, 1 Aug 2012 00:18:02 +0000 (00:18 +0000)]
Fix a case of "mis-located braces".

PR: kern/170302

12 years agoAllow 802.11n hardware to support multi-rate retry when RTS/CTS is
adrian [Tue, 31 Jul 2012 23:54:15 +0000 (23:54 +0000)]
Allow 802.11n hardware to support multi-rate retry when RTS/CTS is
enabled.

The legacy (pre-802.11n) hardware doesn't support this - although
the AR5212 era hardware supports MRR, it doesn't have all the bits
needed to support MRR + RTS/CTS.  The AR5416 and later support
a packet duration and RTS/CTS flags per rate scenario, so we should
support it.

Tested:

* AR9280, STA

PR: kern/170302

12 years agoIn case of IPsec he have to do delayed checksum calculations before
bz [Tue, 31 Jul 2012 23:34:06 +0000 (23:34 +0000)]
In case of IPsec he have to do delayed checksum calculations before
adding any extension header, or rather before calling into IPsec
processing as we may send the packet and not return to IPv6 output
processing here.

PR: kern/170116
MFC After: 3 days

12 years agoPrefer ate over macb. macb doesn't work anymore, and ate has more
imp [Tue, 31 Jul 2012 19:41:12 +0000 (19:41 +0000)]
Prefer ate over macb.  macb doesn't work anymore, and ate has more
errata workarounds in it.

12 years agoNote about where we can boot this.
imp [Tue, 31 Jul 2012 19:39:21 +0000 (19:39 +0000)]
Note about where we can boot this.

12 years agoAllow chip selects other than 0. The SAM9260EK board
imp [Tue, 31 Jul 2012 19:14:22 +0000 (19:14 +0000)]
Allow chip selects other than 0.  The SAM9260EK board
has its dataflash on CS1.

12 years agoRestore the PCI bridge configuration upon resume.
adrian [Tue, 31 Jul 2012 18:47:17 +0000 (18:47 +0000)]
Restore the PCI bridge configuration upon resume.

This allows my TI1510 cardbus/PCI bridge to work after a suspend/resume,
without having to unload/reload the cbb driver.

I've also tested this on stable/9.  I'll MFC it shortly.

PR: kern/170058
Reviewed by: jhb
MFC after: 1 day

12 years agoClean up some unused leftover code from em
jfv [Tue, 31 Jul 2012 18:44:10 +0000 (18:44 +0000)]
Clean up some unused leftover code from em
Make IRQ style a tuneable
Fix lock handling in the interrupt handler

MFC after:3 days

12 years agoReorder the managament of advisory locks on open files so that the advisory
jhb [Tue, 31 Jul 2012 18:25:00 +0000 (18:25 +0000)]
Reorder the managament of advisory locks on open files so that the advisory
lock is obtained before the write count is increased during open() and the
lock is released after the write count is decreased during close().

The first change closes a race where an open() that will block with O_SHLOCK
or O_EXLOCK can increase the write count while it waits.  If the process
holding the current lock on the file then tries to call exec() on the file
it has locked, it can fail with ETXTBUSY even though the advisory lock is
preventing other threads from succesfully completeing a writable open().

The second change closes a race where a read-only open() with O_SHLOCK or
O_EXLOCK may return successfully while the write count is non-zero due to
another descriptor that had the advisory lock and was blocking the open()
still being in the process of closing.  If the process that completed the
open() then attempts to call exec() on the file it locked, it can fail with
ETXTBUSY even though the other process that held a write lock has closed
the file and released the lock.

Reviewed by: kib
MFC after: 1 month

12 years agoFix wrong indent according to style(9)
mm [Tue, 31 Jul 2012 17:32:28 +0000 (17:32 +0000)]
Fix wrong indent according to style(9)

MFC after: 2 weeks
> Description of fields to fill in above:                     76 columns --|
> PR:            If a GNATS PR is affected by the change.
> Submitted by:  If someone else sent in the change.
> Reviewed by:   If someone else reviewed your modification.
> Approved by:   If you needed approval for this commit.
> Obtained from: If the change is from a third party.
> MFC after:     N [day[s]|week[s]|month[s]].  Request a reminder email.
> Security:      Vulnerability reference (one per line) or description.
> Empty fields above will be automatically removed.

M    zpool_main.c

12 years agoFix reporting of root pool upgrade notice.
mm [Tue, 31 Jul 2012 17:28:28 +0000 (17:28 +0000)]
Fix reporting of root pool upgrade notice.

MFC after: 2 weeks

12 years agoShuffle the call to ath_hal_setuplasttxdesc() to _after_ the rate control
adrian [Tue, 31 Jul 2012 17:08:29 +0000 (17:08 +0000)]
Shuffle the call to ath_hal_setuplasttxdesc() to _after_ the rate control
code is called and remove it from ath_buf_set_rate().

For the legacy (non-11n API) TX routines, ath_hal_filltxdesc() takes care
of setting up the intermediary and final descriptors right, complete
with copying the rate control info into the final descriptor so the
rate modules can grab it.

The 11n version doesn't do this - ath_hal_chaintxdesc() doesn't
copy the rate control bits over, nor does it clear isaggr/moreaggr/
pad delimiters.  So the call to setuplasttxdesc() is needed here.

So:

* legacy NICs - never call the 11n rate control stuff, so filltxdesc
  copies the rate control info right;
* 11n NICs transmitting legacy or 11n non-aggregate frames -
  ath_hal_set11nratescenario() is called to setup rate control and
  then ath_hal_filltxdesc() chains them together - so the rate control
  info is right;
* 11n aggregate frames - set11nratescenario() is called, then
  ath_hal_chaintxdesc() is called to chain a list of aggregate and subframes
  together. This requires a call to ath_hal_setuplasttxdesc() to complete
  things.

Tested:

* AR9280 in station mode

TODO:

* I really should make sure that the descriptor contents get blanked
  out correctly or garbage left over from aggregate frames may show
  up in non-aggregate frames, leading to badness.

12 years agofind: Remove unnecessary and inconsistent initialization.
jilles [Tue, 31 Jul 2012 16:55:41 +0000 (16:55 +0000)]
find: Remove unnecessary and inconsistent initialization.

Submitted by: jhb

12 years agoPush the rate control and descriptor chaining into the descriptor "set"
adrian [Tue, 31 Jul 2012 16:41:09 +0000 (16:41 +0000)]
Push the rate control and descriptor chaining into the descriptor "set"
functions, for both legacy and 802.11n.

This will simplify supporting the EDMA chipsets as these two descriptor
setup functions can just be overridden in their entirety, hiding all of
the subtle differences in setting things up.

It's not a permanent solution, as eventually the AR5416 HAL should grow
similar versions of the 11n descriptor functions and then those can be
used.

TODO:

* Push the "clr11naggr" call into the legacy setds, just to ensure
  that retried frames don't end up with the aggregate bits set
  inappropriately;
* Remove the "setlasttxdesc" call from the 11n TX path and push it
  into setds_11n.
* Ensure that setds_11n will work correctly for non-aggregate frames;
* .. and then when it does, just unconditionally call "setds_11n" for
  11n NICs and "setds" for non-11n NICs.

12 years agoSome style(9) and whitespace changes.
glebius [Tue, 31 Jul 2012 11:31:12 +0000 (11:31 +0000)]
Some style(9) and whitespace changes.

Together with: Andrey Zonov <andrey zonov.org>

12 years agoAdd several performance optimizations to acpi_cpu_idle().
mav [Tue, 31 Jul 2012 10:58:50 +0000 (10:58 +0000)]
Add several performance optimizations to acpi_cpu_idle().

For C1 and C2 states use cpu_ticks() to measure sleep time instead of much
slower ACPI timer. We can't do it for C3, as TSC may stop there. But it is
less important there as wake up latency is high any way.

For C1 and C2 states do not check/clear bus mastering activity status, as
it is important only for C3. As side effect it can make CPU enter C2 instead
of C3 if last BM activity was two sleeps back (unlike one before), but
that may be even good because of collecting more statistics. Premature BM
wakeup from C3, entered because of overestimation, can easily be worse then
entering C2 from both performance and power consumption points of view.

Together on dual Xeon E5645 system on sequential 512 bytes read test this
change makes cpu_idle_acpi() as fast as simplest cpu_idle_hlt() and only
few percents slower then cpu_idle_mwait(), while deeper states are still
actively used during idle periods.

To help with diagnostics, add C-state type into dev.cpu.X.cx_supported.

Sponsored by: iXsystems, Inc.

12 years agoFixed some debug output in hwmp_recv_prep.
monthadar [Tue, 31 Jul 2012 08:05:40 +0000 (08:05 +0000)]
Fixed some debug output in hwmp_recv_prep.

12 years agonobody uses this file except the userspace ipfw code, but the cast
luigi [Tue, 31 Jul 2012 08:04:49 +0000 (08:04 +0000)]
nobody uses this file except the userspace ipfw code, but the cast
of a pointer to an integer needs a cast to prevent a warning for
size mismatch.

MFC after: 1 week

12 years agoFix a PREQ comparison error in 11s HWMP.
monthadar [Tue, 31 Jul 2012 07:36:27 +0000 (07:36 +0000)]
Fix a PREQ comparison error in 11s HWMP.

* Earlier we compared two not equal metrics, one was what we recevied
in the 'new PREQ' while the other was what we already have saved which
was 'old PREQ' + link metric for the last hop;
* Fixed by adding 'new PREQ' + link metric for the last hop in a
temporary variable;

12 years agoFix bugs in net80211s found with wtap simulator.
monthadar [Tue, 31 Jul 2012 07:31:47 +0000 (07:31 +0000)]
Fix bugs in net80211s found with wtap simulator.

For description of the test scripts refer to projects/net80211_testsuite/wtap.

* Test 007 showed a bug in intermediate PREP for a proxy entry. Resolved;
* Test 002 showed a bug in the Addressing Mode flag for a PREQ. Resolved;

12 years agoFix wtap to not panic in wtap_beacon_intrp.
monthadar [Tue, 31 Jul 2012 07:22:50 +0000 (07:22 +0000)]
Fix wtap to not panic in wtap_beacon_intrp.

* Changed KASSERT to be debug printf (DWTAP_PRINTF). If state is not
IEEE80211_S_RUN we return without scheduling a new callout;
* When net80211 stack changes state to IEEE802_11_INIT we stop the
beacon callout task;

12 years agoremove a redundant MALLOC_DECLARE
luigi [Tue, 31 Jul 2012 05:51:48 +0000 (05:51 +0000)]
remove a redundant MALLOC_DECLARE

12 years agoI am comparing current pipe code with the one in 8.3-STABLE r236165,
davidxu [Tue, 31 Jul 2012 05:48:35 +0000 (05:48 +0000)]
I am comparing current pipe code with the one in 8.3-STABLE r236165,
I found 8.3 is a history BSD version using socket to implement FIFO
pipe, it uses per-file seqcount to compare with writer generation
stored in per-pipe object. The concept is after all writers are gone,
the pipe enters next generation, all old readers have not closed the
pipe should get the indication that the pipe is disconnected, result
is they should get EPIPE, SIGPIPE or get POLLHUP in poll().
But newcomer should not know that previous writters were gone, it
should treat it as a fresh session.
I am trying to bring back FIFO pipe to history behavior. It is still
unclear that if single EOF flag can represent SBS_CANTSENDMORE and
SBS_CANTRCVMORE which socket-based version is using, but I have run
the poll regression test in tool directory, output is same as the one
on 8.3-STABLE now.
I think the output "not ok 18 FIFO state 6b: poll result 0 expected 1.
expected POLLHUP; got 0" might be bogus, because newcomer should not
know that old writers were gone. I got the same behavior on Linux.
Our implementation always return POLLIN for disconnected pipe even it
should return POLLHUP, but I think it is not wise to remove POLLIN for
compatible reason, this is our history behavior.

Regression test: /usr/src/tools/regression/poll

12 years agoProperly apply #ifdef INET and leave a comment that we are (will) apply
bz [Tue, 31 Jul 2012 05:44:03 +0000 (05:44 +0000)]
Properly apply #ifdef INET and leave a comment that we are (will) apply
delayed IPv6 checksum processing in ip6_output.c when doing IPsec.

PR: kern/170116
MFC after: 3 days

12 years agoImprove the should-never-hit printf to ease debugging in case we'd ever hit
bz [Tue, 31 Jul 2012 05:34:54 +0000 (05:34 +0000)]
Improve the should-never-hit printf to ease debugging in case we'd ever hit
it again when doing the delayed IPv6 checksum calculations.

MFC after: 3 days

12 years ago- Change back "d_ofs" to int8_t to not pessimize padding and size of "struct puc_cfg".
fjoe [Tue, 31 Jul 2012 05:23:23 +0000 (05:23 +0000)]
- Change back "d_ofs" to int8_t to not pessimize padding and size of "struct puc_cfg".
- Use "puc_config_moxa" for Moxa boards that need d_ofs greater than 0x7f

Prodded by: marcel@, gavin@
MFC after: 3 days

12 years agomacb doesn't work, switch to ate.
imp [Tue, 31 Jul 2012 04:09:27 +0000 (04:09 +0000)]
macb doesn't work, switch to ate.

12 years agoMigrate some more TX side setup routines to be methods.
adrian [Tue, 31 Jul 2012 03:09:48 +0000 (03:09 +0000)]
Migrate some more TX side setup routines to be methods.

12 years agoBreak out the hardware handoff and TX DMA restart code into methods.
adrian [Tue, 31 Jul 2012 02:28:32 +0000 (02:28 +0000)]
Break out the hardware handoff and TX DMA restart code into methods.

These (and a few others) will differ based on the underlying DMA
implementation.

For the EDMA NICs, simply stub them out in a fashion which will let
me focus on implementing the necessary descriptor API changes.

12 years agoPlaceholder ioctl for an upcoming rate control statistics API change.
adrian [Tue, 31 Jul 2012 02:18:10 +0000 (02:18 +0000)]
Placeholder ioctl for an upcoming rate control statistics API change.

12 years agoWhen a thread is blocked in direct write state, it only sets PIPE_DIRECTW
davidxu [Tue, 31 Jul 2012 02:00:37 +0000 (02:00 +0000)]
When a thread is blocked in direct write state, it only sets PIPE_DIRECTW
flag but not PIPE_WANTW, but FIFO pipe code does not understand this internal
state, when a FIFO peer reader closes the pipe, it wants to notify the writer,
it checks PIPE_WANTW, if not set, it skips calling wakeup(), so blocked writer
never noticed the case, but in general, the writer should return from the
syscall with EPIPE error code and may get SIGPIPE signal. Setting the
PIPE_WANTW fixed problem, or you can turn off direct write, it should fix the
problem too. This bug is found by PR/170203.

Another bug in FIFO pipe code is when peer closes the pipe, another end which
is being blocked in select() or poll() is not notified, it missed to call
pipeselwakeup().

Third problem is found in poll regression test, the existing code can not
pass 6b,6c,6d tests, but FreeBSD-4 works. This commit does not fix the
problem, I still need to study more to find the cause.

PR: 170203
Tested by: Garrett Copper &lt; yanegomi at gmail dot com &gt;

12 years agoPartial MFV (illumos-gate 13753:2aba784c276b)
mm [Mon, 30 Jul 2012 23:14:24 +0000 (23:14 +0000)]
Partial MFV (illumos-gate 13753:2aba784c276b)
2762 zpool command should have better support for feature flags

References:
https://www.illumos.org/issues/2762

MFC after: 2 weeks

12 years agoUntil now KTR_ENTRIES, which defines the size of circular buffer used in
davide [Mon, 30 Jul 2012 22:46:42 +0000 (22:46 +0000)]
Until now KTR_ENTRIES, which defines the size of circular buffer used in
ktr(4), was constrained to be a power of two. Remove this constraint and
update sys/conf/NOTES accordingly.

Reviewed by: jhb
Approved by: gnn (mentor)
Sponsored by: Google Summer of Code 2012

12 years agoieeefp.h is only needed on i386 class hardware.
kargl [Mon, 30 Jul 2012 21:58:28 +0000 (21:58 +0000)]
ieeefp.h is only needed on i386 class hardware.

Submitted by: bde
Approved by: das (pre-approved)

12 years agoWhitespace.
kargl [Mon, 30 Jul 2012 21:55:49 +0000 (21:55 +0000)]
Whitespace.

Submitted by: bde
Approved by: das (pre-approved)

12 years agoThese files will support the whole at91sam9x5 family when done,
imp [Mon, 30 Jul 2012 21:30:43 +0000 (21:30 +0000)]
These files will support the whole at91sam9x5 family when done,
so rename them now before they get copied further afield...

12 years agoList the members of the AT91SAM9G45 family.
imp [Mon, 30 Jul 2012 21:19:19 +0000 (21:19 +0000)]
List the members of the AT91SAM9G45 family.

12 years agoRemove trailing whitespace.
joel [Mon, 30 Jul 2012 21:02:44 +0000 (21:02 +0000)]
Remove trailing whitespace.

12 years agoAdd more locale-specific functions to the relevant man pages and Makefile:
issyl0 [Mon, 30 Jul 2012 20:56:19 +0000 (20:56 +0000)]
Add more locale-specific functions to the relevant man pages and Makefile:
  - lib/libc/locale/islower.3
  - lib/libc/locale/ispunct.3
  - lib/libc/locale/nl_langinfo.3
  - lib/libc/locale/isgraph.3
  - lib/libc/locale/isspace.3

Reviewed by: bz
Approved by: theraven
MFC after: 5 days

12 years agoRegen.
jhb [Mon, 30 Jul 2012 20:45:17 +0000 (20:45 +0000)]
Regen.

12 years agoThe linux_lstat() system call accepts a pointer to a 'struct l_stat', not a
jhb [Mon, 30 Jul 2012 20:44:45 +0000 (20:44 +0000)]
The linux_lstat() system call accepts a pointer to a 'struct l_stat', not a
'struct ostat'.

12 years agoEliminate an unneeded declaration. (I should have removed this as part
alc [Mon, 30 Jul 2012 20:38:37 +0000 (20:38 +0000)]
Eliminate an unneeded declaration.  (I should have removed this as part
of r227568.)

12 years agoChange (unused) prototype for stmxcsr() to match reality.
kib [Mon, 30 Jul 2012 19:26:02 +0000 (19:26 +0000)]
Change (unused) prototype for stmxcsr() to match reality.

Noted by: jhb
MFC after: 1 week

12 years ago- move the inclusion of netmap headers to the common part of the code;
luigi [Mon, 30 Jul 2012 18:21:48 +0000 (18:21 +0000)]
- move the inclusion of netmap headers to the common part of the code;
- more portable annotations for unused arguments;

12 years agoBackport NFSv4 ACL fix from libarchive master branch.
mm [Mon, 30 Jul 2012 14:47:35 +0000 (14:47 +0000)]
Backport NFSv4 ACL fix from libarchive master branch.

Source:
https://github.com/libarchive/libarchive/commit/f67370d5

Obtained from: libarchive (master branch)

12 years agoremove the last __unused instance in sbin/ipfw.
luigi [Mon, 30 Jul 2012 11:02:22 +0000 (11:02 +0000)]
remove the last __unused instance in sbin/ipfw.
This particular function (show_prerequisites() ) we should actually
remove the argument from the callers as well, but i'll do it at a
later time.

12 years agoFix some compile errors at high WARNS, including one
luigi [Mon, 30 Jul 2012 10:55:23 +0000 (10:55 +0000)]
Fix some compile errors at high WARNS, including one
for an uninitialized variable.

unused parameters and variables are annotated with
(void)foo; /* UNUSED */
instead of __unused, because this code needs to build
also on linux and windows.

12 years agoRemove trailing whitespace.
joel [Mon, 30 Jul 2012 10:14:37 +0000 (10:14 +0000)]
Remove trailing whitespace.

12 years agoReturn back double spacing.
glebius [Mon, 30 Jul 2012 08:56:56 +0000 (08:56 +0000)]
Return back double spacing.

12 years agoMention when -d, -p and -r first hit FreeBSD.
brian [Mon, 30 Jul 2012 08:06:00 +0000 (08:06 +0000)]
Mention when -d, -p and -r first hit FreeBSD.

Bump the document date to when the change was made (rather than when the PR
was submitted).

Suggested by: pluknet

12 years agoAdd d, p and r switches for recording script sessions with timing data
brian [Mon, 30 Jul 2012 07:13:06 +0000 (07:13 +0000)]
Add d, p and r switches for recording script sessions with timing data
and playing sessions back with or without time delays.

PR: 114465
Submitted by: ighighi at gmail dot com
MFC after: 3 weeks

12 years agoFix a couple of comments about the rm9200, and fix a couple of indentation
imp [Mon, 30 Jul 2012 06:00:31 +0000 (06:00 +0000)]
Fix a couple of comments about the rm9200, and fix a couple of indentation
issues.  Add note that we need to implement at91sam9260 erratum workaround.

12 years agoRemove opt_enc.h from files committed with r235911. enc(4) is the
bz [Mon, 30 Jul 2012 03:00:58 +0000 (03:00 +0000)]
Remove opt_enc.h from files committed with r235911.  enc(4) is the
'encapsulating interface' used with IPsec and has nothing to do with
storage 'enclosure' services.

MFC after: 3 days
Noticed while: debugging why enc(4) is no longer automatically created

12 years agoBreak out the parsing code from main() and modularise things a little.
adrian [Mon, 30 Jul 2012 01:42:22 +0000 (01:42 +0000)]
Break out the parsing code from main() and modularise things a little.

The eventual aim will be to support listing "one" and "all" stations for
the given ath device.

12 years agoPartially revert r238886 in part of GEOM_VFS spoiling.
mav [Sun, 29 Jul 2012 20:04:09 +0000 (20:04 +0000)]
Partially revert r238886 in part of GEOM_VFS spoiling.

This change triggered interesting foot shooting condition in GEOM when
RW access to root partition by fsck spoils VFS geom there, which has it
opened RO at the same time.  Seems spoiling concept needs some rework.

12 years agoShave off a few more cycles from pmap_enter()'s critical section. In
alc [Sun, 29 Jul 2012 18:20:49 +0000 (18:20 +0000)]
Shave off a few more cycles from pmap_enter()'s critical section.  In
particular, do a little less work with the PV list lock held.

12 years agosh: Fix EINTR race condition in "wait" and "set -T" using sigsuspend().
jilles [Sun, 29 Jul 2012 18:04:38 +0000 (18:04 +0000)]
sh: Fix EINTR race condition in "wait" and "set -T" using sigsuspend().

When waiting for child processes using "wait" or if "set -T" is in effect, a
signal interrupts the wait. Make sure there is no window where the signal
handler may be invoked (setting a flag) just before going to sleep.

There is a similar race condition in the shell language, but scripts can
avoid it by exiting from the trap handler or enforcing synchronization using
a fifo.

If SIGCHLD is not trapped, a signal handler must be installed for it. Only
install this handler for the duration of the wait to avoid triggering
unexpected [EINTR] errors elsewhere.

Note that for some reason only SIGINT and SIGQUIT interrupt a "wait"
command. This remains the case.

12 years agoGrr.!$()!$$ I missed checking this in even though I *did* run
mjacob [Sun, 29 Jul 2012 14:21:42 +0000 (14:21 +0000)]
Grr.!$()!$$ I missed checking this in even though I *did* run
a tinderbox myself and caught the error.

Change to isp_send_cmd needs a final ecmd argument.

Sponsored by: Spectralogic
MFC after: 1 month
X-MFC: 238869

12 years agoImplement media change notification for DA and CD removable media devices.
mav [Sun, 29 Jul 2012 11:51:48 +0000 (11:51 +0000)]
Implement media change notification for DA and CD removable media devices.
It includes three parts:
 1) Modifications to CAM to detect media media changes and report them to
disk(9) layer. For modern SATA (and potentially UAS) devices it utilizes
Asynchronous Notification mechanism to receive events from hardware.
Active polling with TEST UNIT READY commands with 3 seconds period is used
for incapable hardware. After that both CD and DA drivers work the same way,
detecting two conditions: "NOT READY: Medium not present" after medium was
detected previously, and "UNIT ATTENTION: Not ready to ready change, medium
may have changed". First one reported to disk(9) as media removal, second
as media insert/change. To reliably receive second event new
AC_UNIT_ATTENTION async added to make UAs broadcasted to all periphs by
generic error handling code in cam_periph_error().
 2) Modifications to GEOM core to handle media remove and change events.
Media removal handled by spoiling all consumers attached to the provider.
Media change event also schedules provider retaste after spoiling to probe
new media. New flag G_CF_ORPHAN was added to consumers to reflect that
consumer is in process of destruction. It allows retaste to create new
geom instance of the same class, while previous one is still dying.
 3) Modifications to some GEOM classes: DEV -- to report media change
events to devd; VFS -- to handle spoiling same as orphan to prevent
accessing replaced media. PART class already handles spoiling alike to
orphan.

Reviewed by: silence on geom@ and scsi@
Tested by: avg
Sponsored by: iXsystems, Inc. / PC-BSD
MFC after: 2 months

12 years agoShuffle the rate control call to be consistent with non-aggregate TX.
adrian [Sun, 29 Jul 2012 09:23:32 +0000 (09:23 +0000)]
Shuffle the rate control call to be consistent with non-aggregate TX.

The correct ordering for non-aggregate TX is:

* call ath_hal_setuptxdesc() to setup the first TX descriptor complete
  with the first TX rate/try count;
* call ath_hal_setupxtxdesc() to setup the multi-rate retry;
* .. or for 802.11n NICs, call ath_hal_set11nratescenario() for MRR and
  802.11n flags;
* then call ath_hal_filltxdesc() to setup intermediary descriptors
  in a multi-descriptor single frame.

The call to ath_hal_filltxdesc() routines seem to correctly (consistently?)
handle the intermediary descriptor flags, including copying the rate
control information to the final descriptor in the frame.  That's used
by the rate control module rather than the hardware.

Tested:

* Only on AR9280 STA mode, however it should work on other chips in
  both STA and AP mode.

12 years agoFix breakage introduced in r238824 - correctly calculate the descriptor
adrian [Sun, 29 Jul 2012 08:52:32 +0000 (08:52 +0000)]
Fix breakage introduced in r238824 - correctly calculate the descriptor
wrapping.

The previous code was only wrapping descriptor "block" boundaries rather
than individual descriptors.  It sounds equivalent but it isn't.

r238824 changed the descriptor allocation to enforce that an individual
descriptor doesn't wrap a 4KiB boundary rather than the whole block
of descriptors.  Eg, for TX descriptors, they're allocated in blocks
of 10 descriptors for each ath_buf (for scatter/gather DMA.)