dragonfly.git
18 years agoCleanup:
Sascha Wildner [Sun, 6 Nov 2005 12:34:21 +0000 (12:34 +0000)]
Cleanup:

- Remove 'register' storage class specifiers.

18 years agoCleanup:
Sascha Wildner [Sun, 6 Nov 2005 12:32:56 +0000 (12:32 +0000)]
Cleanup:

- In function definitions, move the type on a line of its own.

18 years agoCleanup:
Sascha Wildner [Sun, 6 Nov 2005 12:29:11 +0000 (12:29 +0000)]
Cleanup:

- In function definitions, move the type on a line of its own.
- Ansify function definitions.

18 years agoCleanup:
Sascha Wildner [Sun, 6 Nov 2005 12:23:40 +0000 (12:23 +0000)]
Cleanup:

- Remove 'register' storage class specifiers.

18 years agoCleanup:
Sascha Wildner [Sun, 6 Nov 2005 12:21:42 +0000 (12:21 +0000)]
Cleanup:

- In function definitions, move the type on a line of its own.
- Remove (void) casts for discarded return values.

18 years agoCleanup:
Sascha Wildner [Sun, 6 Nov 2005 12:19:22 +0000 (12:19 +0000)]
Cleanup:

- Ansify function definitions.

18 years agoCleanup:
Sascha Wildner [Sun, 6 Nov 2005 12:16:44 +0000 (12:16 +0000)]
Cleanup:

- Remove 'register' storage class specifiers.

18 years agoCleanup:
Sascha Wildner [Sun, 6 Nov 2005 12:13:53 +0000 (12:13 +0000)]
Cleanup:

- Remove 'register' storage class specifiers.
- Ansify function definitions.

18 years agoCleanup:
Sascha Wildner [Sun, 6 Nov 2005 12:09:06 +0000 (12:09 +0000)]
Cleanup:

- Remove 'register' storage class specifiers.

18 years agoCleanup:
Sascha Wildner [Sun, 6 Nov 2005 12:06:03 +0000 (12:06 +0000)]
Cleanup:

- Ansify function definitions.

18 years agoCleanup:
Sascha Wildner [Sun, 6 Nov 2005 12:03:15 +0000 (12:03 +0000)]
Cleanup:

- In function definitions, move the type on a line of its own.

18 years agoCleanup:
Sascha Wildner [Sun, 6 Nov 2005 11:44:02 +0000 (11:44 +0000)]
Cleanup:

- In function definitions, move the type on a line of its own.
- Ansify function definitions.
- Remove (void) casts for discarded return values.

18 years agoClean up the CPU_AMD64X2_INTR_SPAM option to check the cpu_id and provide
Matthew Dillon [Sun, 6 Nov 2005 07:28:50 +0000 (07:28 +0000)]
Clean up the CPU_AMD64X2_INTR_SPAM option to check the cpu_id and provide
positive feedback to the console when the bit is adjusted.  Also clear
the configuration register after we finish messing with it.

18 years agoAnsify function definitions that take no parameters.
Sascha Wildner [Sat, 5 Nov 2005 15:35:10 +0000 (15:35 +0000)]
Ansify function definitions that take no parameters.

18 years agoin mii_layer/ruephy.c
Sepherosa Ziehau [Sat, 5 Nov 2005 10:01:54 +0000 (10:01 +0000)]
in mii_layer/ruephy.c
- in ruephy_attach(), nuke unused macro ADD()
- in ruephy_reset(), only turn on BMCR_AUTOEN after mii_phy_reset(), since
  BMCR_S100 and BMCR_FDX are ignored if BMCR_AUTOEN is turned on.

in rue/if_rue.c
- in rue_miibus_statchg(), nuke "#if 0"ed code and comment, since
  1) when auto-negotiation is not enabled, BMCR_S100 or BMCR_FDX will be turned
     on/off before rue_miibus_statchg() is called (in ruephy_service())
  2) when auto-negotiation is enabled, BMCR_S100 and BMCR_FDX are ignored

18 years agoWhen operating in SMP+ICU mode, try to disconnect the 8259 from the cpu
Matthew Dillon [Sat, 5 Nov 2005 01:55:48 +0000 (01:55 +0000)]
When operating in SMP+ICU mode, try to disconnect the 8259 from the cpu
by programming the IMCR (if it is present), so we can route it through
the LAPIC instead.

18 years agoMake sure that the apic error, performance counter, and timer local
Matthew Dillon [Sat, 5 Nov 2005 01:30:26 +0000 (01:30 +0000)]
Make sure that the apic error, performance counter, and timer local
interrupts are masked.

18 years agoSolve the continuous stream of spurious IRQ 7's that occur on machines
Matthew Dillon [Fri, 4 Nov 2005 23:20:35 +0000 (23:20 +0000)]
Solve the continuous stream of spurious IRQ 7's that occur on machines
with AMDX2 (dual core) cpus.  It's a BIOS bug.  If a BIOS running this cpu
does not set the LINTEN bit in the Hyper Transport Transaction Control
Register, incoming interrupts from the 8259 will go the INTR/NMI pins for
BOTH cpus, causing *TWO* interrupt ack cycles (one from each cpu).  The
second cycle usually results in a spurious interrupt vector (typically IRQ 7)
getting hit.  The spurious interrupt vector is not subject to the 8259's
interrupt masks.

At the moment the fix requires specifying a cpu option in your kernel config:

options CPU_AMD64X2_INTR_SPAM

This problem can occur when the kernel is operating in ICU (8259) mode,
in an SMP configuration, or if you are attempting to route
one or more ISA interrupts, such as the 8254 clock, through the 8259 in
an SMP configuration.

When the bit is set, the incoming INTR/NMI is routed to both LAPIC's
LINT0/LINT1, which is what we expect.  When the bit is not set, INTR/NMI
goes to both cpus simultaniously, which is bad.  In addition, having both
the LAPIC and the 8259 responding to the INTA bus cycle can create serious
general interrupt routing issues.

Symptoms of the problem:

* The 8259 never gets routed through to LINT0/LINT1, no matter how the
  IMCR is set or what the MPTable reports.
* Every 8259 interrupt causes an additional spurious interrupt to occur.
* Interrupt routing in general is more severely broken then usual.
* The kernel is unable to get the 8254 clock interrupt routed.

PS: This took 30 man hours to locate, so give me credit if you transplant
it please!

18 years agoICU/APIC cleanup part 11/many.
Matthew Dillon [Fri, 4 Nov 2005 21:16:59 +0000 (21:16 +0000)]
ICU/APIC cleanup part 11/many.

Cleanup unused macro arguments and rename the ICU's INTR() to SLOW_INTR().

Properly increment gd->gd_cnt.v_intr for SLOW interrupts (the fast interrupt
handler deals with it for FAST interrupts).

18 years agoThe 'picmode' variable was mis-named. The MPTable is actually simply
Matthew Dillon [Fri, 4 Nov 2005 19:46:09 +0000 (19:46 +0000)]
The 'picmode' variable was mis-named.  The MPTable is actually simply
indicating whether an IMCR (Interrupt Mode Control Register) is available
or not.  Rename the variable and identifiers to match.

When operating in ICU mode, program the IMCR if it is indicated present.
Do not try to read the register, just write 0x00 or 0x01 depending on whether
we want the PIC (8259) directly connected to the BSP or whether we want it
connected via LAPIC0 LINT0.

18 years agoMark our fine-grained interrupt timer as being INTR_MPSAFE, because it is.
Matthew Dillon [Fri, 4 Nov 2005 19:42:36 +0000 (19:42 +0000)]
Mark our fine-grained interrupt timer as being INTR_MPSAFE, because it is.

18 years agoFix a comment. The slave is connected to IRQ 2 on the first 8259, not
Matthew Dillon [Fri, 4 Nov 2005 19:39:25 +0000 (19:39 +0000)]
Fix a comment.  The slave is connected to IRQ 2 on the first 8259, not
IRQ 7.

18 years agoFix the cpu the softclock thread(s) are created on. The softclock threads
Matthew Dillon [Fri, 4 Nov 2005 19:28:21 +0000 (19:28 +0000)]
Fix the cpu the softclock thread(s) are created on.  The softclock threads
for cpus > 0 were being created on the wrong cpu.

18 years agoSwitch to the BSP when doing a normal shutdown. ACPI can't power the machine
Matthew Dillon [Fri, 4 Nov 2005 09:38:15 +0000 (09:38 +0000)]
Switch to the BSP when doing a normal shutdown.  ACPI can't power the machine
down unless it's called from cpu #0.

18 years agoFix a symbol not found problem by not including madt.c in the ACPI module.
Matthew Dillon [Fri, 4 Nov 2005 09:23:01 +0000 (09:23 +0000)]
Fix a symbol not found problem by not including madt.c in the ACPI module.
The enumerators for the interrupt routing code are not supported yet.

18 years agoAllow 'options SMP' *WITHOUT* 'options APIC_IO'. That is, an ability to
Matthew Dillon [Fri, 4 Nov 2005 08:57:31 +0000 (08:57 +0000)]
Allow 'options SMP' *WITHOUT* 'options APIC_IO'.  That is, an ability to
produce an SMP-capable kernel that uses the PIC/ICU instead of the IO APICs
for interrupt routing.

SMP boxes with broken BIOSes (namely my Shuttle XPC SN95G5) could very well
have serious interrupt routing problems when operating in IO APIC mode.
One solution is to not use the IO APICs.  That is, to run only the Local
APICs for the SMP management.

* Don't conditionalize NIDT.  Just set it to 256

* Make the ICU interrupt code MP SAFE.  This primarily means using the
  imen_spinlock to protect accesses to icu_imen.

* When running SMP without APIC_IO, set the LAPIC TPR to prevent unintentional
  interrupts.  Leave LINT0 enabled (normally with APIC_IO LINT0 is disabled
  when the IO APICs are activated).  LINT0 is the virtual wire between the
  8259 and LAPIC 0.

* Get rid of NRSVIDT.  Just use IDT_OFFSET instead.

* Clean up all the APIC_IO tests which should have been SMP tests, and all
  the SMP tests which should have been APIC_IO tests.  Explicitly #ifdef
  out all code related to the IO APICs when APIC_IO is not set.

18 years agoWe are already serialized when nv_ospackettx() is called, so it must
Matthew Dillon [Fri, 4 Nov 2005 08:44:47 +0000 (08:44 +0000)]
We are already serialized when nv_ospackettx() is called, so it must
call nv_ifstart_serialized() instead of nv_ifstart().  This fixes a
lockup.

The serializer is intentionally non-reentrant in order to catch these sorts
of issues.

18 years agoFix a bug in the last commit. The wrong argument was being passed to
Matthew Dillon [Fri, 4 Nov 2005 08:17:19 +0000 (08:17 +0000)]
Fix a bug in the last commit.  The wrong argument was being passed to
the fast interrupt forwarding function.

18 years agoDisplay warnings for any configured IO APIC pins that do not actually exist.
Matthew Dillon [Fri, 4 Nov 2005 01:44:18 +0000 (01:44 +0000)]
Display warnings for any configured IO APIC pins that do not actually exist.

18 years agoICU/APIC cleanup part 10/many. Be a lot more careful programming the IO APIC.
Matthew Dillon [Fri, 4 Nov 2005 01:21:39 +0000 (01:21 +0000)]
ICU/APIC cleanup part 10/many.  Be a lot more careful programming the IO APIC.

* During initial pin programming, unprogrammed pins are placed in as
  disconnected a state as possible by not only masking them, but
  completely resetting their configuration.

* When programming or reprogramming an IO APIC pin, always place it into
  edge-triggered mode before placing it into the actual mode.  This will
  hopefully ensure that the IRR bit gets cleared just in case an interrupt
  had been queued to an LAPIC and not yet EOI'd.  Otherwise, just
  changing the vector can cause the EOI to get lost (my best understanding
  of the IO APIC is that EOIs are based on the vector number).

* Use imen_lock/unlock around all IO APIC reprogramming sections.

18 years agoICU/APIC cleanup part 9/many.
Matthew Dillon [Thu, 3 Nov 2005 23:45:16 +0000 (23:45 +0000)]
ICU/APIC cleanup part 9/many.

Get rid of machine/smptests.h, remove or implement the related #defines.

Distinguish between boot-time vector initialization and interrupt setup and
teardown in MACHINTR ABI.

Get rid of the ISR test for APIC-generated interrupts and all related
support code.  Just generate the EOI and pray.

Document more of the IO APIC redirection register(s).  Intel sure screwed up
the LAPIC and IO APIC royally.  There is no simple way to poll the actual
signal level on a pin, no simple way to manually EOI interrupts or EOI them
in the order we desire, no simple way to poll the LAPIC for the vector that
will be EOI'd when we send the EOI.  We can't mask the interrupt on the IO
APIC without triggering stupid legacy code on some machines.  We can't even
program the IO APIC linearly, it uses a stupid register/data sequence that
makes it impossible for access on an SMP system without serialization.
It's a goddamn mess, and it is all Intel's fault.

18 years agoDe-confuse the IO APIC mapping code by creating a helper procedure to
Matthew Dillon [Thu, 3 Nov 2005 20:10:55 +0000 (20:10 +0000)]
De-confuse the IO APIC mapping code by creating a helper procedure to
map the apic physical address space (or any core memory mapped I/O) into KVA.

Instead of assuming that the SMPpg[] page table page has room for the
mappings, actually check and assert that it does, in fact, have room.

18 years agoAdd more documentation for the APIC registers and rename some of the
Matthew Dillon [Thu, 3 Nov 2005 20:07:23 +0000 (20:07 +0000)]
Add more documentation for the APIC registers and rename some of the
registers to make them more human-readable.

18 years agoICU/APIC cleanup part 8/many.
Matthew Dillon [Thu, 3 Nov 2005 05:24:54 +0000 (05:24 +0000)]
ICU/APIC cleanup part 8/many.

Write a generic fastunpend procedure in assembly for doreti and splz and
remove the ICU and APIC-specific versions.

This also removes one of the few remaining duplicate symbols between
the APIC and the ICU machintr ABI.

18 years agoReimplement IPI forwarding of FAST interrupts to the cpu owning the BGL
Matthew Dillon [Thu, 3 Nov 2005 04:54:02 +0000 (04:54 +0000)]
Reimplement IPI forwarding of FAST interrupts to the cpu owning the BGL
(if the FAST interrupt requires the BGL).  This was temporarily removed
when the interrupt dispatch code was revamped and has now been resurrected.

18 years agoRemove a redundant tls_get_curthread() call.
David Xu [Wed, 2 Nov 2005 23:41:17 +0000 (23:41 +0000)]
Remove a redundant tls_get_curthread() call.
In raise(), use a shortcut to send signal to current thread.

18 years agoMake rndcontrol use the new ioctl so it can properly list interrupt sources
Matthew Dillon [Wed, 2 Nov 2005 23:06:05 +0000 (23:06 +0000)]
Make rndcontrol use the new ioctl so it can properly list interrupt sources
used for randomness.

18 years agoICU/APIC cleanup part 7/many.
Matthew Dillon [Wed, 2 Nov 2005 22:59:49 +0000 (22:59 +0000)]
ICU/APIC cleanup part 7/many.

Get rid of most of the dependancies on ICU_LEN, NSWI, and NHWI, by
creating a generous system standard maximum for hardware and software
interrupts in the MI sys/interrupt.h.  The interrupt architecture can
then further limit available hardware and software interrupts.  For
example, i386 uses 32 bit masks and so is limited to 32 hardware interrupts
and 32 software interrupts.

The name ICU_OFFSET is confusing, rename it to IDT_OFFSET, which is what
it really is.

Note that this separation is possible due to recent work on the MI interrupt
layer.

Separate the software interrupt mask from the hardware interrupt mask
in the i386 code.

Get rid of rndcontrol's 16 irq limit by creating a new ioctl to iterate
through interrupt numbers.

18 years agoICU/APIC cleanup part 6/many.
Matthew Dillon [Wed, 2 Nov 2005 20:23:23 +0000 (20:23 +0000)]
ICU/APIC cleanup part 6/many.

Move the APIC and ICU vector arrays into the new machine interrupt ABI.

Move the interrupt vector setup and teardown code into the new ABI.

Make FAST_HI the default and remove the #define.

Add a vector control function to the machine interrupt ABI.

Start changing names of globals so we can eventually link both ICU and
APIC interrupt code into the same binary.  Note that 'fastunpend' has not
yet been renamed.

18 years agoICU/APIC cleanup part 5/many.
Matthew Dillon [Wed, 2 Nov 2005 18:42:11 +0000 (18:42 +0000)]
ICU/APIC cleanup part 5/many.

Start migrating the ICU and APIC interrupt interfaces to a new machine
level interrupt ABI.  This ABI will eventually be tied into the BUS
architecture.

Move INTRDIS/INTREN to the new API: machintr_intrdis(irq) and
machintr_intren(irq).

Get rid of ithread_unmask().  Have the interrupt thread code call
machintr_intrdis(irq) directly.

18 years agoICU/APIC cleanup part 4/many.
Matthew Dillon [Wed, 2 Nov 2005 17:47:33 +0000 (17:47 +0000)]
ICU/APIC cleanup part 4/many.

INTRDIS/INTREN only always take a single bit.  Change the argument
from a mask to a bit number to improve flexibility.  Relabel the
ICU IRQ's (IRQ0, IRQ1, ...) to ICU_IRQ* while we are at it.

18 years agoICU/APIC cleanup part 3/many.
Matthew Dillon [Wed, 2 Nov 2005 17:20:11 +0000 (17:20 +0000)]
ICU/APIC cleanup part 3/many.

Separate out the vector and ipl assembly.

18 years agoICU/APIC cleanup part 2/many.
Matthew Dillon [Wed, 2 Nov 2005 09:35:09 +0000 (09:35 +0000)]
ICU/APIC cleanup part 2/many.

Break the long chain of #include's based at exception.s.

18 years agoICU/APIC cleanup part 2/many.
Matthew Dillon [Wed, 2 Nov 2005 09:15:02 +0000 (09:15 +0000)]
ICU/APIC cleanup part 2/many.

Break the long chain of #include's based at exception.s.

18 years agoICU/APIC cleanup part 1/many.
Matthew Dillon [Wed, 2 Nov 2005 08:33:30 +0000 (08:33 +0000)]
ICU/APIC cleanup part 1/many.

Move ICU and APIC support files into their own subdirectory, bump the
required config version for the build since this move also requires the
use of the new arch/ symlink.

18 years agoBump config to 400022. Added an 'arch' softlink. 'machine' goes into
Matthew Dillon [Wed, 2 Nov 2005 08:28:48 +0000 (08:28 +0000)]
Bump config to 400022.  Added an 'arch' softlink.  'machine' goes into
<arch>/include, 'arch' goes into <arch>, in preparation for some major
cleaning up of header files in i386/.

18 years agoadd an acpi_enabled() function, invert the "pci" logic and require that
Matthew Dillon [Tue, 1 Nov 2005 23:36:32 +0000 (23:36 +0000)]
add an acpi_enabled() function, invert the "pci" logic and require that
debug.acpi.enabled contain "pci" to enable ACPI based PCI routing.  Interlock
against pcib_owner.  Continue to leave the pci code commented out in the
Makefile.

18 years agoMove the freebsd package system from /usr/sbin to /usr/freebsd_pkg/sbin
Matthew Dillon [Tue, 1 Nov 2005 20:50:30 +0000 (20:50 +0000)]
Move the freebsd package system from /usr/sbin to /usr/freebsd_pkg/sbin
and the manual pages to /usr/freebsd_pkg/man.

Adjust the upgrade target to remove the old pkg_* binaries and manual pages
from their original locations.

Adjust the nrelease build to access the FreeBSD packaging tools via
/usr/freebsd_pkg/sbin.

18 years agoSync atol(3) manpage with FreeBSD's rev. 1.13 to include documentation
Sascha Wildner [Tue, 1 Nov 2005 18:16:52 +0000 (18:16 +0000)]
Sync atol(3) manpage with FreeBSD's rev. 1.13 to include documentation
of atoll(). Adjust Makefile to create a symlink.

18 years agoAdd missing atoll.
Joerg Sonnenberger [Tue, 1 Nov 2005 16:34:58 +0000 (16:34 +0000)]
Add missing atoll.

18 years agoAn exclusive lock on the vnode is required when running vm_object_page_clean(),
Matthew Dillon [Mon, 31 Oct 2005 21:48:53 +0000 (21:48 +0000)]
An exclusive lock on the vnode is required when running vm_object_page_clean(),
otherwise a balloc may occur without the vnode/inode held locked.

There is a possibility that this bug was responsible for some filesystem
corrupted.

Reported-by: numerous people after a sanity assertion was committed to the
     ffs_balloc code.

18 years ago- hide ukphy_probe(), since it is not intended to be used outside of ukphy.c
Sepherosa Ziehau [Mon, 31 Oct 2005 13:08:35 +0000 (13:08 +0000)]
- hide ukphy_probe(), since it is not intended to be used outside of ukphy.c
- staticize ukphy_service(), which is only used in ukphy.c
- ANSIfy

18 years ago- In mii_anar(), turn on ANAR_CSMA at beginning instead of doing this in almost
Sepherosa Ziehau [Mon, 31 Oct 2005 12:49:05 +0000 (12:49 +0000)]
- In mii_anar(), turn on ANAR_CSMA at beginning instead of doing this in almost
  every switch branch
- Turn on ANAR_CSMA for the return value of mii_bmsr_media_to_anar().  This
  makes mii_bmsr_media_to_anar() consistent with mii_anar() and eliminates code
  duplication.  Adjust mii_bmsr_media_to_anar() callers accordingly

18 years agonuke mii_data.mii_{readreg, writereg, statchg}, since we use Kobj instead of
Sepherosa Ziehau [Mon, 31 Oct 2005 10:09:11 +0000 (10:09 +0000)]
nuke mii_data.mii_{readreg, writereg, statchg}, since we use Kobj instead of
these callback function pointers

18 years ago- In rlphy_attach(), turn on BMCR_AUTOEN after mii_phy_reset(). This unbreaks
Sepherosa Ziehau [Mon, 31 Oct 2005 09:20:05 +0000 (09:20 +0000)]
- In rlphy_attach(), turn on BMCR_AUTOEN after mii_phy_reset().  This unbreaks
  auto-negotiation(*) before mii_mediachg() is called(in rl_init()).  Add
  comment on this change
- Staticize rlphy_{service, status}(), since they are only used in this file
- ANSIfy

(*)
The original broken auto-negotiation can easily be reproduced:
1) Comment out ifconfig_rl0 in /etc/rc.conf
2) Unplug wire from rl0
3) Restart DragonFly
4) Run `ifconfig rl0'

18 years agoFix style(9) issue: move * to the line specifying the function type.
Sascha Wildner [Sun, 30 Oct 2005 23:00:57 +0000 (23:00 +0000)]
Fix style(9) issue: move * to the line specifying the function type.

18 years agomsg_name and msg_control are void *, so no need to cast.
Sascha Wildner [Sun, 30 Oct 2005 12:53:41 +0000 (12:53 +0000)]
msg_name and msg_control are void *, so no need to cast.

18 years agoFix style(9) issue: move * to the line specifying the function type.
Sascha Wildner [Sun, 30 Oct 2005 10:07:10 +0000 (10:07 +0000)]
Fix style(9) issue: move * to the line specifying the function type.

18 years agoAdd another parameter to BUS_ADD_CHILD to allow children to inherit
Matthew Dillon [Sun, 30 Oct 2005 04:41:15 +0000 (04:41 +0000)]
Add another parameter to BUS_ADD_CHILD to allow children to inherit
code from grandparents.

Formalize and document the IDENTIFY mechanism and actually use it properly
to add PCI busses rather then the severe hacks that existed before.

Instead of attaching PCI busses (pcib) directly to nexus, create a pass-through
bus layer under nexus called 'legacypci' and attach the PCI busses to that.
Use the new BUS_ADD_CHILD and IVARS recursion capability to still allow
the pcib's under legacypci to get nexus generated IVARS.

NOTE ON IVARS:  These can be utterly confusing because a BUS device may
manage and control the IVARS attached to its children.  In addition, if the
BUS method for the device accessing the IVARs does not properly match up
with or recurse to the device that actually created the ivars, mass
confusion can result.  I have attempted to document the issue but XXX it
needs some sanity check code.

Add a 'pcib_owner' global that is used to determine which of the several
possible PCI mainbus subsystems actually own the PCI mainbus.  This is not
yet tied into ACPI but will be soon.  No longer add legacy "pcib" busses
if it is detected that another subsystem controls the mainbus.  Before
the busses were added but then simply not scanned later on, creating
confusing pcibX designations.  Now the busses aren't added... legacypci
stops cold if it doesn't own the PCI mainbus.  Get rid of the twisted
checks for "pci" devices that used to handle this job.

Document many aspects of the PCI code and redo some of the APIs slightly
to make them more obvious.  In particular, document the odd fact that
pci_*() accessor function actually operate on a pci function code based
sub-device of the "pci" driver and call device_get_parent() to get to the
pci" driver layer.  This sub layer really needs its own formal designation.

Change "pciX" attachments to "pcibY" busses.  Use the secondary bus id
for 'X' and require it to be unique.  Also reorder "pcibY" attachments
so the physical bus number tends to (but is not guarenteed to be) the
same 'Y' in pcibY.

Change IVARS access for bridges.  Require that the device representing the
"pcib" device be passed to pcib_get/set_*() routines instead of children
of said device.

Add a function devclass_find_unit() to shortcut the more complex operation
of locating the devclass by name and then getting the device relative to
the devclass.

Add numerous bus_generic_*() BUS methods which now recurse through the
parent instead of terminate with an error.

18 years ago- kill `unused variable' warning pointed out by sephe@
YONETANI Tomokazu [Sun, 30 Oct 2005 04:20:49 +0000 (04:20 +0000)]
- kill `unused variable' warning pointed out by sephe@
- kill `defined but not used' warning by #ifdef'ing out
  acpi_wake_set_sysctl() definition

18 years agoUnbreak `device pmtimer' for compiled-in acpi driver. It's only
YONETANI Tomokazu [Sun, 30 Oct 2005 04:05:09 +0000 (04:05 +0000)]
Unbreak `device pmtimer' for compiled-in acpi driver.  It's only
enabled when you compile the acpi driver in the kernel, since
for i386 case, acpi.ko contains pmtimer code, so you don't need it
in the kernel.

18 years ago- include <stdlib.h>
Sascha Wildner [Sat, 29 Oct 2005 12:05:27 +0000 (12:05 +0000)]
- include <stdlib.h>
- remove register keywords
- remove (void) casts before function calls
- ANSI function declarations
- proper variable initialization
- constify strings where necessary
- remove prototype macro
- style(9) issues
- bump WARNS to 6 (no longer override bin/Makefile.inc)

Submitted-by: sephe
18 years agoAlso install the new ftpd script.
Joerg Sonnenberger [Fri, 28 Oct 2005 18:14:41 +0000 (18:14 +0000)]
Also install the new ftpd script.

18 years agoAdd an option -H to override gethostname.
Joerg Sonnenberger [Fri, 28 Oct 2005 18:06:57 +0000 (18:06 +0000)]
Add an option -H to override gethostname.

18 years agoAdd rcng script to start ftpd stand-alone.
Joerg Sonnenberger [Fri, 28 Oct 2005 18:00:28 +0000 (18:00 +0000)]
Add rcng script to start ftpd stand-alone.

18 years ago- Update to new icmp_error signature
Liam J. Foy [Fri, 28 Oct 2005 16:01:04 +0000 (16:01 +0000)]
- Update to new icmp_error signature

18 years ago- Dont pass a complete interface struct to icmp_error, just pass the mtu.
Liam J. Foy [Fri, 28 Oct 2005 15:56:47 +0000 (15:56 +0000)]
- Dont pass a complete interface struct to icmp_error, just pass the mtu.

Obtained from: OpenBSD Camp
Ok'ed: dillon

18 years agoRemove DEC Alpha support.
Sascha Wildner [Fri, 28 Oct 2005 09:31:36 +0000 (09:31 +0000)]
Remove DEC Alpha support.

18 years agoCleanup some of the newbus infrastructure.
Matthew Dillon [Fri, 28 Oct 2005 03:25:57 +0000 (03:25 +0000)]
Cleanup some of the newbus infrastructure.

* Change the device_identify API to return success/failure, like
  most of the other newbus methods.  This may be used for conflict
  resolution in the future.

* Clearly document the device_identify method and formalize its use
  by adding discrimination between initial bus probes and bus rescans.
  Do not re-execute static identification code that has already been run
  every time a new driver is added at run-time.

* Clearly document the do-ISA-last hack.

* Provide generic routines for the most common device_identify operations
  (psueo or synthesized devices that operate under other devices, such as
  lpt operating under ppbus, which are not 'scanned' by the parent bus).

* Remove the hacks that install and initialize the nexus device.  Instead,
  use the existing DRIVER_MODULE infrastructure to install nexus under
  root_bus.

* Document the boot-time initialization path so it doesn't take the next
  guy 8 hours to figure out what code is actually being run when.

18 years agoSync zoneinfo database to tzdata2005n from elsie.
Sascha Wildner [Thu, 27 Oct 2005 14:38:57 +0000 (14:38 +0000)]
Sync zoneinfo database to tzdata2005n from elsie.

asia:           7.85 -> 7.86
australasia: 7.73 -> 7.74
northamerica:   7.79 -> 7.80
southamerica:   7.61 -> 7.62

18 years agoremove getdec() declaration, since this static function no longer exists or
Sepherosa Ziehau [Thu, 27 Oct 2005 14:03:56 +0000 (14:03 +0000)]
remove getdec() declaration, since this static function no longer exists or
is used in the file

18 years agoKill most of the "unused variable" warning
Sepherosa Ziehau [Thu, 27 Oct 2005 13:33:19 +0000 (13:33 +0000)]
Kill most of the "unused variable" warning

# The only survivor is in dev/acpica5/Osd/OsdSynch.c:AcpiOsDeleteSemaphore()

18 years agobug fixing:
Sepherosa Ziehau [Thu, 27 Oct 2005 03:51:55 +0000 (03:51 +0000)]
bug fixing:
BUS_SPACE_MAXADDR_32BIT should be the low address, while high address should
be BUS_SPACE_MAXADDR

18 years ago- convert {set, fill}_??regs() and ptrace_single_step() API to taking
Sepherosa Ziehau [Thu, 27 Oct 2005 03:15:47 +0000 (03:15 +0000)]
- convert {set, fill}_??regs() and ptrace_single_step() API to taking
  struct lwp instead of struct proc, change their caller accordingly
- in i386/include/md_var.h, add forward declaration of struct lwp and eliminate
  the no longer needed forward declaration of struct proc
- in i386/include/reg.h, add forward declaration of struct lwp and struct proc
- minor style and white space changes

Requested-and-Reviewed-by: corecode
18 years agoIncrease the MSGBUF_SIZE from 32K to 64K, boot verbose messages don't
Matthew Dillon [Thu, 27 Oct 2005 00:07:17 +0000 (00:07 +0000)]
Increase the MSGBUF_SIZE from 32K to 64K, boot verbose messages don't
fit in 32K anymore.

18 years agoAdd a redundant double-check in ffs_reallocblks and assert that the number
Matthew Dillon [Wed, 26 Oct 2005 17:15:03 +0000 (17:15 +0000)]
Add a redundant double-check in ffs_reallocblks and assert that the number
of blockmaps in the span does not exceed 2.

18 years agoAssert that the vnode is locked when modifying an inode inside ffs_balloc.
Matthew Dillon [Wed, 26 Oct 2005 17:13:40 +0000 (17:13 +0000)]
Assert that the vnode is locked when modifying an inode inside ffs_balloc.

18 years agoFix a bug in the ppbus code where an interrupt cookie might be torn down
Matthew Dillon [Wed, 26 Oct 2005 17:12:32 +0000 (17:12 +0000)]
Fix a bug in the ppbus code where an interrupt cookie might be torn down
twice.  This didn't matter before when cookies were tested against a
list, but it matters now that they are treated as pointers to interrupt
descriptors.

18 years agoWe have INTR_ENTROPY in sys/bus.h for ~20 months
Sepherosa Ziehau [Wed, 26 Oct 2005 14:19:08 +0000 (14:19 +0000)]
We have INTR_ENTROPY in sys/bus.h for ~20 months
This shuts up /dev/raid/twe/{twe.c, twe_freebsd.c} compile time gcc warning

18 years agoadd forward declaration to shut up dev/usbmisc/umass/umass.c compile time
Sepherosa Ziehau [Wed, 26 Oct 2005 13:59:41 +0000 (13:59 +0000)]
add forward declaration to shut up dev/usbmisc/umass/umass.c compile time
gcc warning

18 years agounbreak kernel building by
Sepherosa Ziehau [Wed, 26 Oct 2005 10:46:45 +0000 (10:46 +0000)]
unbreak kernel building by
- add arg2 to logipiq()
- adjust caller of logipiq()

18 years agoFix a long-standing bug in the livelock code. An interrupt thread normally
Matthew Dillon [Wed, 26 Oct 2005 01:16:04 +0000 (01:16 +0000)]
Fix a long-standing bug in the livelock code.  An interrupt thread normally
unmasks the hardware interrupt source when it is through.  However, if a
livelock occurs the interrupt thread may be polled long after a device has
terminated operations and torn down its interrupt.  To solve this problem,
only unmask the hardware interrupt if the IRQ still has device handlers
installed.  This fixes a weird problem with the parallel port driver
(which installs and tears-down IRQ 7 on each write() for some unfathomable
reason).

18 years agoRedo the interrupt livelock code. Simplify the frequency calculations
Matthew Dillon [Wed, 26 Oct 2005 00:55:20 +0000 (00:55 +0000)]
Redo the interrupt livelock code.  Simplify the frequency calculations
and add a 1-second stabilization requirement before a livelock is removed.
Fix a bug that prevented the code from actually limiting the interrupt rate
properly.

Greatly simplify ithread_done() and rename it to ithread_unmask().  It is
no longer responsible for putting the interrupt thread to sleep.

There is one issue left and that is the livelock code must re-enable the
interrupt at the limit frequency in order to detect when the actual
interrupt rate falls below the low water mark.  In a livelocked situation
the actual interrupt rate will be about 2x the livelock limit because
both the systimer interrupt and the livelocked interrupt will be running.

18 years agoTemporary hack until corecode can fix it. There is a p_rtprio and also
Matthew Dillon [Wed, 26 Oct 2005 00:47:17 +0000 (00:47 +0000)]
Temporary hack until corecode can fix it.  There is a p_rtprio and also
a lwp_rtprio.  The scheduler was using lwp_rtprio but proc0 only initialized
p_rtprio, so all processes wound up with RTP_PRIO_REALTIME instead of
RTP_PRIO_NORMAL.  This basically turned off the estcpu priority code and
made all runnable processes round robin equally.

18 years agoRemove the dummy IPI messaging routines for UP builds and properly
Matthew Dillon [Tue, 25 Oct 2005 17:26:58 +0000 (17:26 +0000)]
Remove the dummy IPI messaging routines for UP builds and properly
conditionalize the use of IPI messages in various core kernel modules.

Change the callback from func(arg, frameptr) to func(arg1, arg2, frameptr),
where the new argument (arg2) is an integer supplied by the originator.

Create wrappers for simpler versions of the callback: func(arg1), and
func(arg1, arg2) (for the moment we presume that GCC will generate code
for the full-sized three-argument callback which is compatible with one
and two-argument function pointers).

This extension to the IPI messaging code is needed to properly implement
MP-safe tsleep/wakeup code.  Although the extra argument is superfluous in
most cases, the overhead of doing an IPI is such that there should be no
noticeable impact on performance.

18 years agoMake usleep as a cancellation point.
David Xu [Tue, 25 Oct 2005 12:14:52 +0000 (12:14 +0000)]
Make usleep as a cancellation point.

18 years agoMake usleep as a weak symbol, so thread library can override it.
David Xu [Tue, 25 Oct 2005 12:14:15 +0000 (12:14 +0000)]
Make usleep as a weak symbol, so thread library can override it.

18 years agoExport following functions:
David Xu [Mon, 24 Oct 2005 23:59:21 +0000 (23:59 +0000)]
Export following functions:
_pthread_mutexattr_setpshared
_pthread_mutexattr_getpshared
pthread_mutexattr_setpshared
pthread_mutexattr_getpshared

18 years agoAdd pthread_mutexattr_setpshared and pthread_mutexattr_getpshared.
David Xu [Mon, 24 Oct 2005 23:58:01 +0000 (23:58 +0000)]
Add pthread_mutexattr_setpshared and pthread_mutexattr_getpshared.

18 years agoBack out last change since Matt has issues will it. Will reimplement it using
Eirik Nygaard [Mon, 24 Oct 2005 22:31:35 +0000 (22:31 +0000)]
Back out last change since Matt has issues will it. Will reimplement it using
his ideas.

18 years agoMake wakeup, tsleep and friends MP-safe.
Eirik Nygaard [Mon, 24 Oct 2005 21:57:55 +0000 (21:57 +0000)]
Make wakeup, tsleep and friends MP-safe.

Reviewed by: hsu

18 years agoAdd a missing BUF_UNLOCK in the last commit.
Matthew Dillon [Mon, 24 Oct 2005 20:12:11 +0000 (20:12 +0000)]
Add a missing BUF_UNLOCK in the last commit.

18 years agoAvoid a recursive kernel fault and subsequent double fault if the VM fault
Matthew Dillon [Mon, 24 Oct 2005 20:02:09 +0000 (20:02 +0000)]
Avoid a recursive kernel fault and subsequent double fault if the VM fault
code gets a KVM map_entry with a NULL object.  Such entries exist in system
maps managed directly by the kernel, such as the buffer cache and kernel_map.
Instead, we check for the condition and panic immediately.  Programs which
access /dev/[k]mem can hit this race/failure.

Reported-by: =?ISO-8859-1?Q?Stefan_Kr=FCger?= <skrueger@meinberlikomm.de>
18 years agoTemporarily work around a race in the kernel. The kernel does a sanity check
Matthew Dillon [Mon, 24 Oct 2005 19:59:51 +0000 (19:59 +0000)]
Temporarily work around a race in the kernel.  The kernel does a sanity check
on the KVM memory range read via /dev/[k]mem.  However, if the user buffer
takes a VM fault and blocks the process, the related kernel memory could
become invalid while the process was blocked.  Try to avoid taking faults on
the user buffer by touching it first.

Reported-by: =?ISO-8859-1?Q?Stefan_Kr=FCger?= <skrueger@meinberlikomm.de>
18 years agoDocument kern.emergency_intr_{enable,freq} in loader.8.
Matthew Dillon [Mon, 24 Oct 2005 18:01:30 +0000 (18:01 +0000)]
Document kern.emergency_intr_{enable,freq} in loader.8.

18 years agoAdd two checks for potential buffer cache races.
Matthew Dillon [Mon, 24 Oct 2005 17:14:04 +0000 (17:14 +0000)]
Add two checks for potential buffer cache races.

"Warning buffer %p (vp %p lblkno %d) was recycled"
    Occurs if a buffer is recycled unexpectedly.  The code will print this
    warning and retry if it detects the case.

"Warning invalid buffer %p (vp %p lblkno %d) did not have cleared b_blkno cache"
    Occurs if a B_INVAL buffer's b_blkno cache has not been reset.  The
    code will reset the cache if it detects this case.

18 years agoPass mii_attach_args to mii_softc_init() rather then initializing the softc's
Matthew Dillon [Mon, 24 Oct 2005 16:55:40 +0000 (16:55 +0000)]
Pass mii_attach_args to mii_softc_init() rather then initializing the softc's
attach-args-related fields manually in each custom driver.  Have
mii_softc_init() automatically merge mii_attach_args->mii_flags into
mii_softc->mii_flags.

18 years agoAdd an mii_flags field to the attach arguments, to make it easier to create
Matthew Dillon [Mon, 24 Oct 2005 16:45:19 +0000 (16:45 +0000)]
Add an mii_flags field to the attach arguments, to make it easier to create
custom MII drivers without having to duplicate all of the generic
attach/detach code.

Add a simplified custom driver for nvidia/marvell which simply sets the
flag which allows the generic mii code to probe for GiGE.

18 years agoOnly check GiGE related flags in the generic code when MIIF_IS_1000X is set
Matthew Dillon [Mon, 24 Oct 2005 15:55:32 +0000 (15:55 +0000)]
Only check GiGE related flags in the generic code when MIIF_IS_1000X is set
in mii_softc->mii_flags.  This really only effects the generic MII code, as
the flags for GigE may not be compatible with all devices (such as xl(4)).

Change the mii_add_media() API to pass mii_softc instead of mii_data, and
derive the instance id from the softc instead of passing it.

Reported-by: Sepherosa Ziehau <sepherosa@gmail.com>
18 years ago- Move DEVICE_POLLING from opt_global.h to opt_polling.h(newly added),
Sepherosa Ziehau [Mon, 24 Oct 2005 08:06:16 +0000 (08:06 +0000)]
- Move DEVICE_POLLING from opt_global.h to opt_polling.h(newly added),
  so that polling(4) can be enabled in modules that are not built
  during kernel building
- Add opt_polling.h to files that depend on DEVICE_POLLING
- Change related netif modules' Makefile to enable polling(4) support
- Add comment in net/if_var.h to prevent DEVICE_POLLING related
  incompatibilities from being introduced
Suggested-by: dillon
NOTE: As of this commit, any file that will depend on DEVICE_POLLING
      *must* include opt_polling.h at its beginning

With-helps-from: joerg
Reviewed-by: dillon, submit@