Commit Graph

546 Commits

Author SHA1 Message Date
attilio
184538e270 Add the options DEADLKRES (introducing the deadlock resolver thread) in
the 'debugging' section of any HEAD kernel and enable for the mainstream
ones, excluding the embedded architectures.
It may, of course, enabled on a case-by-case basis.

Sponsored by:	Sandvine Incorporated
Requested by:	emaste
Discussed with:	kib
2010-02-10 16:30:04 +00:00
rrs
1fff76b217 If a mbuf is split across two pages, we
have code that detects this and makes two
transmit descriptors. However its possible
that the algorithm detects when the second
page is not used (when the data aligns perfectly
to the bottom of the page). This caused a 0
len descriptor to be added which locks up the
rge device. Skip such things with a continue.

JC provided this patch... Thanks JC :-)
Obtained from:	JC (c.jayachandran@gmail.com)
2010-02-10 13:48:34 +00:00
neel
5087b7bd59 Code cleanup:
- make some variables static
- remove unused variables.
2010-02-10 06:57:05 +00:00
neel
823d0c1a02 Call profclock() and statclock() explicitly on all cpus. Prior to this
change these functions were called only on the BSP indirectly via hardclock().

top -P now shows usage statistics of all cpus.
2010-02-10 06:29:43 +00:00
neel
ae237abf20 Enable interrupts before doing AST processing to avoid a deadlock.
Specifically on an SMP kernel it was observed that if both the
processors are doing an exit1() via ast()->postsig()->sigexit()
then we will deadlock.

This happens because exit1() calls vmspace_exit() that in turn
calls pmap_invalidate_all(). This function tries to do a
smp_rendezvous() which blocks because the other processor is not
responding to IPIs - because it too is doing AST processing with
interrupts disabled.
2010-02-10 05:43:31 +00:00
neel
91212ae23c SMP support for the mips port.
The platform that supports SMP currently is a SWARM with a dual-core Sibyte
processor. The kernel config file to use is SWARM_SMP.

Reviewed by: imp, rrs
2010-02-09 06:24:43 +00:00
neel
f6bab2156a Correct a comment - we are not setting the exception level but rather are
disabling interrupts.

Simplify register usage - we can directly load 'curpcb' into 'k1' after
interrupts are disabled. There is no need to do so indirectly through 'a1'.
2010-02-05 06:36:03 +00:00
neel
0178318026 Initialize interrupt controller early on. 2010-02-05 03:22:04 +00:00
neel
5b7a1d2513 Reimplement all functions to access the system control unit in C.
The only reason we need to have the sb_load64() and sb_store64()
functions in assembly is to cheat the compiler and generate the
'ld' and 'sd' instructions which it otherwise will not do when
compiling for a 32-bit architecture. There are some 64-bit
registers in the SCD unit that must be accessed using 64-bit
load and store instructions.
2010-02-05 03:20:47 +00:00
neel
39dbfe1f76 style: don't need to use braces for single line control statements. 2010-02-05 02:40:42 +00:00
neel
aaf539f687 Compile SWARM with KTRACE support. 2010-02-04 06:44:42 +00:00
neel
c111af420c Get system call tracing using ktrace working for mips. 2010-02-04 06:42:30 +00:00
neel
61210c7a07 Clean up all places in exception.S that fiddle with 'pcpup' directly. We now
use the GET_CPU_PCPU() macro exclusively.

This isolates the users of pcpu data from its implementation details.

Reviewed by: imp
2010-02-04 05:25:59 +00:00
neel
1638fb996a Reduce the size of the array used to store the TLB mappings for the kernel
stack from 3 to 2.

We only map in 2 pages for the kernel stack.

Approved by: imp (mentor)
2010-02-03 04:09:36 +00:00
neel
f0bf9d2db5 Provide access to pcpu structures for SMP kernels.
The basic idea is to use a the same virtual address as a window onto
distinct physical memory locations - one per processor. The physical
address that you access through this mapping depends on which cpu you
are currently executing on. We can now use the same virtual address
on any processor to access its per-cpu area.

The details are:

- The virtual address for 'struct pcpu *pcpup' is obtained by
  stealing 2 pages worth of KVA in pmap_bootstrap().

- The mapping from the constant virtual address to a distinct
  physical page is done in cpu_pcpu_init() through a wired TLB entry.

- A side-effect of this is that we reserve 2 pages worth of memory
  for the pcpu but in reality it needs much less than that. The unused
  memory is now used as the boot stack for the BSP and APs.

Remove SMP-specific bits from locore.S. The plan is to use a separate
mpboot.S for AP bootstrap.

Discussed on: freebsd-mips

Approved by: imp (mentor)
2010-01-30 01:54:29 +00:00
rrs
c449575654 Follow Neel's suggestion and switch to using
restoreint() in combination with saving off the
old level. That way we don't blast out the old
level.
2010-01-29 05:38:41 +00:00
rrs
1a77a4ef9a For our memory re-mapping trick to work
interrupts must be disabled through the
page_zero's or copys etc. Note that the
temporary mapping used by panic's may
cause us pain since int's may not be disabled.
When we get dumps working we may have to revist
this. Note that with this fix the build got
much much further.. until it hung on disk IO (I
would imagine thats the rge/msgring driver acting
up).
2010-01-29 04:07:38 +00:00
rrs
74e6490161 Its possible that our RMI box has memory extending
above 4Gig. If so when we add the base address with
the size we will wrap. So for now we just ignore
such memory and only use what we can. When we
get 64 bit working then we will be much better ;->
2010-01-29 04:05:17 +00:00
rrs
644ee9feb9 Move ID up into comment block.. per bsdimp 2010-01-29 04:03:36 +00:00
gonzo
f9b5b5cdd2 - Increase timeouts to 100 milliseconds, 1 millisecond is definitely not
enough for PCI controller to get into shape

Thanks to: adrian@
2010-01-28 21:55:56 +00:00
imp
8f2999d880 Add Cavium's standard copyright to those files that are currently
lacking a copyright/license statement.  All these files were in the
Cavium FreeBSD source drop and appear to be written by Cavium (some
are nearly verbatim copies of files from the cnusers' 1.9.0 SDK, which
also uses this copyright).
2010-01-28 20:46:40 +00:00
imp
1056a1e9f5 We make it to single user well, but not so well to multi-user. Force
single user for the moment since that's a better experience for people
trying this code out...
2010-01-28 20:39:50 +00:00
imp
bb75574462 trim unused members of the softc. 2010-01-28 20:38:52 +00:00
cognet
b007106a58 Comment out any reference to ALCHEMY.hints until it's committed, to unbreak
make universe.

Spotted out by:	gahr
2010-01-28 14:59:16 +00:00
rrs
b8876b1cbe Fix two of the extended memory hacks. The copy pages
routine in one place was setting the valid2 bit to
2 not 1. This meant the PTE was NOT valid and so
you would crash.

In Zero Page there was a incorrect setting of
the valid bit AFTER the actual zero (opps)..

Hopefully this will fix the 0xc0000000 crashes
that I have been seeing (unless of course there are
other problems with these old hacks of mine to get
to memory above 512Meg)
2010-01-28 14:09:16 +00:00
rrs
7fa7beba1e Adds additional hacks for proper bits so that
the RMI/XLR has the COP0 and COP2 bits enabled
Plus it needs SX too. Thanks again for JC in
catching this ;-)

Submitted by:	JC (jayachandranc@netlogicmicro.com
2010-01-28 14:03:06 +00:00
rrs
c764df610e Make compilable.. i.e. the FreeBSD id I added must
be in comments.
2010-01-28 14:01:47 +00:00
rrs
35fcb712f9 Changes the msg ring so its a filter not a
handler. Somehow rrs missed this.. Thanks
to JC for catching this ;-)

Obtained from:	JC (jayachandranc@netlogicmicro.com
2010-01-28 14:01:16 +00:00
kan
5f3c60fd26 Do not leave dirty cache lines behind if bus_dmamap_sync was called
to invalidate memory chunk that starts or ends in the middle of
cache line.

This was responsible for one half of the problem preventing umass
to work reliably on some MIPS32 platforms. USBng needs to stop
sharing cache lines between DMA-able memory and other structures
to cure the other half.

Discussed with: imp, gonzo
2010-01-27 17:15:17 +00:00
imp
df636c5061 Make a note that this file is the 64-bit version and experimental and
point people at the OCTEON1-32 file instead.
2010-01-27 16:21:32 +00:00
imp
ce43c11d59 Move back to physical address 0x01000000. 0x00100000 seems to have
problems sometimes for reasons I haven't tracked down.
2010-01-27 16:15:19 +00:00
rrs
8ebfc85b25 Spacing changes in pic_ack and pic_delayed_ack 2010-01-26 14:33:57 +00:00
rrs
af6640b78e My current conf, that comes up but
locks up in make buildworld.

You need to follow the mips wiki for building
the nfs partition and setup things to mount there
(in the conf and in your bootp setup).
2010-01-26 05:17:03 +00:00
rrs
1998b27896 1) Make sure static is init'd to 0
2) In one place make sure we call the backup
   startup routine (from the timer).
2010-01-26 05:14:50 +00:00
rrs
5db9bca76f To prevent a LOR we need to pass in
a lock flag in the pic routines. In
some places we hold the pic lock, others
we do not.
2010-01-26 05:11:48 +00:00
rrs
c7c33d974e Fix up the msg ring driver a bit tighter
so that we don't loose an interrupt which
we appeared to be doing.
2010-01-26 05:10:10 +00:00
rrs
7fcbb3e319 Fixes setup of clock. It was not properly
initialized, thus backward time warnings
were being spewed to the console.
2010-01-26 05:07:41 +00:00
neel
481c7be91d Install the XTLB exception handler for Sibyte processors.
This is a workaround for the fact that the CFE is compiled as a 64-bit
application and therefore sets the SR_KX bit every time we call into
it (for e.g. console).

A TLB miss for any address above 0xc0000000 with the SR_KX bit set will
end up at the XTLB exception vector. We workaround this by copying the
standard TLB handler at the XTLB exception vector.

Approved by: imp (mentor)
2010-01-26 03:39:10 +00:00
neel
ff32b1a57a Add a DDB command "show trapframe" to dump out contents of the trapframe
specified by the first argument.

Approved by: imp (mentor)
2010-01-26 03:29:52 +00:00
neel
a7e2122422 Print the address of the base of the stackframe in DDB backtrace output.
Approved by: imp (mentor)
2010-01-26 03:24:11 +00:00
imp
15b870b9d9 Doh. Remove extra pcpu initialization that I thought was needed, but
isn't needed since we moved all that into mips_pcpu0_init.
2010-01-26 02:39:14 +00:00
neel
c282e9faa8 Fix a problem seen when a new process was returning to userland
through fork_trampoline.

This was caused because we were clearing the SR_INT_IE and setting
SR_EXL bits of the status register at the same time. This meant
that if an interrupt happened while this MTC0 was making its way
through the pipeline the exception processing would see the
status register with SR_EXL bit set. This in turn would mean that
the COP_0_EXC_PC would not be updated so the return from exception
would be to an incorrect address.

It is easy to verify this fix by a program that forks in a loop
and the child just exits:

	while (1) {
	pid_t pid = vfork();
	if (pid == 0)
	       _exit(0);
	if (pid != -1)
	       waitpid(pid, NULL, 0);
	}

Also remove two instances where we set SR_EXL bit gratuitously in exception.S.

Approved by: imp (mentor)
2010-01-26 02:26:04 +00:00
imp
4ac34cbf90 Export knowledge of the special bus space we use for the console to
obio.  Take advantage of the fact that obio only really supports uart
at the moment to use the uart bus tag always for IOPORT allocations.

# this needs to be redone to conform to FreeBSD standards and allow for
# additional drivers for SoC hardware to attach
2010-01-25 19:27:20 +00:00
imp
894160498a Turn on debugging on the fpa unit. Fix some printfs that were only
enabled for debugging.  This should be turned off before we release,
but we need it for the moment.
2010-01-25 19:25:21 +00:00
imp
7adf9507d9 Store the mutex in the correct location. Before, we were storing it
in the pcb at the td_lock offset, rather than in the struct thread at
the td_lock offset.  And we were storing a pointer to the old thread
rather than to the mutex.  Why this didn't always kill us, I'll never
know.

Fix an obsolete comment and update the prototype in the comments.
Also note what variables are in what registers since this function is
a little complex...

neel@ found this problem and proposed this fix.  This cures a number
of different problem reports out there, and gets us booting octeon to
the login prompt...

Submitted by:	neel@
Reviewed by:	rrs@, gonzo@
2010-01-25 19:01:38 +00:00
imp
0367f51ba3 Fix device name for root....
Indent rgmii correctly.
Remove stale comments.
2010-01-25 16:55:31 +00:00
imp
99646c7cca Comment out the led wheel code for the moment. Likely it shouldn't
even be here in the first place, but it is cool to see FreeBSD
scrolling on the LED pannel of the octeon board when we're running...
2010-01-25 16:44:18 +00:00
gonzo
8a360e9b89 - Call post-boot fixup function in order to get proper static
symbols resolving in DDB
- When zeroing .bss/.sbss do not round end address to page boundary,
    it's not neccessary and might destroy data pased by trampoline or
    boot loader
2010-01-25 00:44:05 +00:00
imp
f02d63f346 o Write the soft reset bit in the cavium core to reset. [1]
o panic if the board boot descriptor is too old...

Obtained from:	[1] looking at the cavium sdk's executive code
2010-01-24 18:05:38 +00:00
gonzo
a5fe9358cb - Introduce kernel_kseg0_end variable that marks first address in KSEG0
available for use. All data below this address considered to be used
    by kernel. Along with kernel own data it might be symbol tables
    prepeared by trampoline code, boot loader service data passed for
    further analysis by kernel, etc... By default kernel_kseg0_end points
    to the end of loaded kernel.

- Introduce mips_postboot_fixup function. It checks for symbol information
    copied by ELF trampoline and passes it to KDB
2010-01-24 03:10:48 +00:00