Commit Graph

3850 Commits

Author SHA1 Message Date
Pawel Dziepak
0896565a6e kernel: Support sched_yield() properly
sched_yield() should not yield to the threads with lower priority.
2013-10-09 01:18:55 +02:00
Pawel Dziepak
ee69e53630 kernel: Minor improvements, separate priority and yield logic 2013-10-08 21:36:49 +02:00
Pawel Dziepak
9363e99b19 kernel: Remove Thread::next_priority 2013-10-08 20:21:35 +02:00
Pawel Dziepak
346e789a21 kernel: Fix style issues 2013-10-08 20:15:21 +02:00
Pawel Dziepak
94f4574d78 kernel: Move thread retrieving code to separate function 2013-10-08 20:13:10 +02:00
Pawel Dziepak
03e3a82953 kernel: Allow threads to yield CPU properly 2013-10-08 06:41:20 +02:00
Pawel Dziepak
bab69bdb47 kernel: Force high priority threads to yield less often 2013-10-08 04:53:30 +02:00
Pawel Dziepak
547b8c76c7 kernel: Cancel penalty only if the thread actually waits
Require the thread to give up CPU for at least one time slice before
cancelling its penalty.
2013-10-08 04:50:23 +02:00
Pawel Dziepak
21808e8f0b kernel: Limit maximum priority penalty
The maximum penalty the thread can receive is now limited depending on
the real thread priority. However, since it make it possible to starve
threads with priority lower than that limit. To prevent that threads
that have already earned the maximum penalty are periodically forced
to yield CPU to all other threads.
2013-10-08 02:54:58 +02:00
Pawel Dziepak
31e65090db kernel: Use standard compliant version of variadic macros 2013-10-08 01:34:55 +02:00
Pawel Dziepak
e083bca041 kernel: Allow threads to always finish their time slice
Until now, when the thread has been preempted by higher priority
thread it was then placed at the end of its priority FIFO and given
a new time slice. This patch changes it allowing the thread to
complete its time slice (when the higher priority threads are done),
unless there was very little time left in which case this time is added
to the next time slice.

Apart from making the algorithm more fair this change allows to identify
CPU bound threads more easily. (Earlier they could 'hide' by being
preempted by higher priority thread and consequently never using
their whole time slice).
2013-10-08 01:08:05 +02:00
Pawel Dziepak
565e7a977d kernel: Update SchedulerTracing::EnqueueThread 2013-10-07 21:52:45 +02:00
Pawel Dziepak
72f844835e kernel: Do not require double parentheses in TRACE statements. 2013-10-07 21:29:10 +02:00
Pawel Dziepak
82c26e1f1f kernel: Punish CPU bound threads
This patch appears to fix #8007.

Thread that consume its whole quantum has its priority reduced. The penalty
is cancelled when the thread voluntarily gives up CPU. Real-time threads
are not affected.

The problem of thread starvation is not solved completely. The worst case
latency is still unbounded (even in systems with bounded number of threads).
When a middle priority thread is constantly preempted by high priority
threads it would not earn the penalty, thus the lower priority threads
still can be starved. Moreover, the punishment is probably too aggressive
as it reduces priority of virtually all CPU bound threads to 1.
2013-10-07 21:11:32 +02:00
Pawel Dziepak
6d7e291233 kernel: Allow scheduler initialization to fail 2013-10-05 20:45:07 +02:00
Pawel Dziepak
9ad558f01c kernel: Use the new runqueue in non-MP scheduler 2013-10-05 20:22:59 +02:00
Pawel Dziepak
b8c1df9b00 kernel: Add O(1) lookup and insertion priority queue 2013-10-05 20:16:06 +02:00
Pawel Dziepak
7039b950fb x86[_64]: Fix style issues 2013-10-05 18:03:00 +02:00
Pawel Dziepak
149c82a8ec kernel/util: Add bitmap implementation 2013-10-03 04:27:49 +02:00
Pawel Dziepak
7087b865e2 x86[_64]: Remove superfluous memset()s 2013-10-03 04:26:21 +02:00
Pawel Dziepak
36cc64a9b3 x86[_64]: Add CPU cache topology detection for AMD and Intel CPUs 2013-10-02 23:48:03 +02:00
Pawel Dziepak
1f50d09018 kernel/util: Add bit hack utilities 2013-10-02 21:24:46 +02:00
Pawel Dziepak
26c3861891 x86[_64]: Fix some style issues 2013-10-02 21:18:56 +02:00
Pawel Dziepak
fa6f78aee7 x86[_64]: Use uint32 for maximum CPUID leaf number 2013-10-02 21:03:34 +02:00
Pawel Dziepak
c9b6f27d94 x86[_64]: Add CPU topology detection for AMD processors 2013-10-02 02:34:35 +02:00
Pawel Dziepak
f1644d9d0b x86[_64]: Set level shift by counting bits in mask 2013-10-02 01:55:07 +02:00
Pawel Dziepak
fafeda52ea x86[_64]: Do not return too soon from detectCPUTopology() 2013-10-02 01:49:10 +02:00
Pawel Dziepak
8ec897323e x86[_64]: Add CPU topology detection for Intel processors 2013-10-02 01:19:17 +02:00
Pawel Dziepak
4110b730db x86[_64]: Add support for CPUID sub-leaves
Some CPUID leaves may contain one or more sub-leaves accessed by setting
ECX to an appropriate value.
2013-10-01 20:31:18 +02:00
Pawel Dziepak
ffd5393620 kernel/util: Make exit() available in bootloader as well 2013-10-01 19:31:48 +02:00
Pawel Dziepak
7aecb0b276 kernel/util: Make exit() available in kernel mode
Since we are using libraries originally intendent for user mode in kernel
mode providing them with some userland functions is inevitable. This
particular patch is to make zlib happy and able to call exit() when
its debug assertions fails.
2013-10-01 15:51:07 +02:00
François Revol
4046c49f88 M68K: Account for extra parameter to create_area_etc()
Would have been nice to also fix 68k code... just sayin.
2013-09-30 04:15:27 +02:00
François Revol
f7d6c2f8e5 M68K: Switch to new gcc options for specifying cpu
Latest gcc converts the old ones to the new ones anyway...
including when passing to gas, which of course is not new enough,
so we have to also force gcc to pass the old one around in one case.
2013-09-30 04:02:21 +02:00
Ingo Weinhold
81291304ad Merge remote-tracking branch 'haiku/master' into package-management
Conflicts:
	build/jam/BuildSetup
	build/jam/HaikuImage
	build/jam/board/sam460ex/BoardSetup
	build/jam/board/verdex/BoardSetup
	data/catalogs/apps/icon-o-matic/fr.catkeys
	src/add-ons/kernel/drivers/audio/hda/hda_codec.cpp
	src/add-ons/kernel/drivers/disk/usb/usb_disk/usb_disk.cpp
	src/apps/debugger/files/FileManager.cpp
	src/apps/debugger/files/FileManager.h
	src/apps/debugger/user_interface/gui/inspector_window/MemoryView.cpp
	src/apps/haiku-depot/MainWindow.cpp
	src/apps/haiku-depot/MainWindow.h
	src/apps/haiku-depot/Model.cpp
	src/apps/haiku-depot/PackageInfo.h
	src/apps/haiku-depot/PackageInfoListener.h
	src/apps/haiku-depot/PackageInfoView.cpp
	src/apps/haiku-depot/PackageInfoView.h
	src/apps/haiku-depot/PackageListView.cpp
	src/apps/haiku-depot/PackageListView.h
	src/system/kernel/arch/arm/arch_timer.cpp
	src/system/libroot/os/arch/arm/atomic.S
	src/tools/translation/bitsinfo/Jamfile
	src/tools/translation/bmpinfo/Jamfile
	src/tools/translation/tgainfo/Jamfile
2013-09-27 01:55:45 +02:00
Pawel Dziepak
afaa6ed4b3 x86[_64]: Randomize initial stack pointer on alternative signal stacks
If the alternate signal stack is used randomize the initial stack
pointer in the same way it is randomized on "normal" thread stacks.
Also, update MINSIGSTKSZ value so that regardless of where the new
stack pointer points to there is at least 4k of stack left.
2013-09-21 21:52:13 +02:00
Ithamar R. Adema
e7c330c6f3 ARM: improve error output, fix iframe reporting. 2013-09-19 03:15:06 +02:00
Ithamar R. Adema
1847d8c486 ARM: user_memcpy/memset/strlcpy: fix my horrible ARM assembly
Turns out I was way to green (and tired) last year to code this properly...
now they finally work and the kernel is a lot more stable for it.
2013-09-18 22:20:17 +02:00
Ingo Weinhold
9a85313bc6 X86PagingStructuresPAE: Zero fPageDirPointerTable in constructor
... and use it as a guard in the destructor. Fixes crash when running
out of memory and Init() is not called.
2013-09-18 16:33:15 +02:00
Ithamar R. Adema
501b24c63b ARM: kernel: Make 32/64-bit atomics work for ARMv5/6
Support for 64-bit atomic operations for ARMv7+ is currently stubbed
out in libroot, but our current targets do not use it anyway.

We now select atomics-as-syscalls automatically based on the ARM
architecture we're building for. The intent is to do away with
most of the board specifics (at the very least on the kernel side)
and just specify the lowest ARMvX version you want to build for.

This will give flexibility in being able to distribute a single
image for a wide range of devices, and building a tuned system
for one specific core type.
2013-09-18 05:03:18 +02:00
Ingo Weinhold
6dee6653c2 When switching to PAE don't copy not needed PTEs
Now we check whether the virtual address corresponding to the PTE lies
in an allocated virtual address range. This fixes a cause of #8345:
The assertion would trigger when such an entry was encountered. There
might be other causes that trigger the same assertion, though.
2013-09-18 00:42:45 +02:00
Ingo Weinhold
372a666344 X86VMTranslationMapPAE: Add some ktracing for page (un)mapping 2013-09-18 00:42:45 +02:00
Ingo Weinhold
6508ce9f52 X86VMTranslationMapPAE::Map(): More info in assert 2013-09-18 00:42:44 +02:00
Ingo Weinhold
bcb7463650 arch_vm_translation_map_early_map(): Fix debug output 2013-09-18 00:42:44 +02:00
Ingo Weinhold
93495b0354 X86PagingStructuresPAE: clear fVirtualPageDirs in constructor
... not just the first element. Fixes a crash in X86VMTranslationMapPAE
destructor when running out of memory when initializing the map.
2013-09-18 00:42:44 +02:00
Ingo Weinhold
34d0d4d85e dump_page_queue(): fix output
* Determine the cache type per page instead of printing the first page's
  cache type for all pages.
* Use vm_cache_type_to_string().
2013-09-18 00:42:43 +02:00
Ithamar R. Adema
cc65466f0d ARM: kernel: Make KDL more useful on ARM
This adds the -mapcs-frame compiler flag for ARM to have "stable"
stack frames, adds support to the kernel for dumping stack crawls,
and initial support for iframes. There' much more functionality
to unlock in KDL, but this makes debugging already a lot more
comfortable.....
2013-09-17 23:04:59 +02:00
Ithamar R. Adema
34ed0fe74a ARM: kernel: fix system_time() when being called too early. 2013-09-17 15:57:36 +02:00
Ithamar R. Adema
dfa5aa0c98 device_manager: Move init_node_tree to after kdl cmd registration
This helps when debugging, since when a driver/module causes a crash
while registering with the device manager, you can actually look at
the device manager state ;-)
2013-09-17 14:42:06 +02:00
Ithamar R. Adema
ba06f07660 ARM: kernel: fix timer resolution and implement basic timekeeping.
The previously used method for programming the timer did not take
into account that our timespec is 64bit while the register we poke
it into is 32 bit. Since the PXA (SoC in Verdex target) has a limited
scale of resolution (us,ms,second) we dynamicly determine the one
that we can most closely match, and set that.

For f.ex. snooze to work however, we also need system_time to work.
The current implementation uses a system timer at microsecond
resolution to keep track of time.

Although the code is far from perfect, committing it now before
it gets lost, since I'm working on the infrastructure code
to properly factor out the SoC specific code out of the core
ARM architecture code (so the kernel can support more then
our poor old Verdex QEMU target ;))
2013-09-17 14:42:05 +02:00
Ithamar R. Adema
672b2600bc ARM: kernel: Fix compilation issue with new gas.
Turns out the new gas does not like spaces :(
2013-09-17 14:40:19 +02:00
Pawel Dziepak
278f66b6b1 x86[_64]: Enable NX on non-boot CPUs as soon as possible 2013-09-17 14:40:17 +02:00
François Revol
c55cff0acc Whitespace cleanup 2013-09-17 13:51:38 +02:00
François Revol
228524afb6 Merge branch 'master' into sam460ex 2013-09-17 13:22:26 +02:00
Ithamar R. Adema
f2479c22a8 device_manager: Move init_node_tree to after kdl cmd registration
This helps when debugging, since when a driver/module causes a crash
while registering with the device manager, you can actually look at
the device manager state ;-)
2013-09-17 05:52:54 +02:00
Ithamar R. Adema
af1c0b55ca ARM: kernel: fix timer resolution and implement basic timekeeping.
The previously used method for programming the timer did not take
into account that our timespec is 64bit while the register we poke
it into is 32 bit. Since the PXA (SoC in Verdex target) has a limited
scale of resolution (us,ms,second) we dynamicly determine the one
that we can most closely match, and set that.

For f.ex. snooze to work however, we also need system_time to work.
The current implementation uses a system timer at microsecond
resolution to keep track of time.

Although the code is far from perfect, committing it now before
it gets lost, since I'm working on the infrastructure code
to properly factor out the SoC specific code out of the core
ARM architecture code (so the kernel can support more then
our poor old Verdex QEMU target ;))
2013-09-17 03:03:17 +02:00
Ithamar R. Adema
fda9d308e1 ARM: kernel: Fix compilation issue with new gas.
Turns out the new gas does not like spaces :(
2013-09-14 17:27:17 +02:00
Pawel Dziepak
b8dc812f3e x86[_64]: Enable NX on non-boot CPUs as soon as possible 2013-09-14 05:28:50 +02:00
François Revol
c14bca2958 Merge branch 'master' into sam460ex 2013-09-14 01:16:51 +02:00
Ingo Weinhold
cf70d345b2 Merge remote-tracking branch 'haiku/master' into package-management
This reverts 8f7f28a7c3 (OpenGL: Upgrade
to
Mesa 9.2).

Conflicts:
	build/jam/BuildFeatures
	build/jam/HaikuImage
	build/jam/OptionalPackages
	build/scripts/build_cross_tools_gcc4
	src/add-ons/opengl/swpipe/Jamfile
	src/apps/diskusage/Jamfile
	src/kits/tracker/ContainerWindow.cpp
	src/kits/tracker/DeskWindow.cpp
	src/kits/tracker/Jamfile
2013-09-13 01:02:28 +02:00
Ingo Weinhold
cc0838da34 VFS boot: Mount packagefs when booting off an image
... and the mounted boot volume looks like a PM Haiku. This gets the CD
boot going.
2013-09-13 00:06:21 +02:00
Ingo Weinhold
b1c3379c7e _user_debug_output(): Fix for long strings
The wrong length was passed to debug_puts().
2013-09-11 04:43:47 +02:00
Siarzhuk Zharski
726e47bb80 vfs:Remove extra put_vnode call on error B_LINK_LIMIT exit
Fixing the autoconf test: attempt to create file in place of already
existing symlink. On error exit put_vnode was called explicitly before
returning error. The second, implicit call to put_vnode was issued on
destroying the VNodePutter instance that references the same vnode. At
this time the vnode has references count equal to 0 so corresponding
panic was executed. Great thanks to Ingo for pointing it out!

Fixes #9140.
2013-09-10 19:47:36 +02:00
Jérôme Duval
c4a8ae38d4 realtime_sem: fixed a compiler warning.
* the variable is initialized anyway on the success code path.
2013-09-07 11:34:21 +02:00
Oliver Tappe
64c4bd1dc2 2nd attempt at fixing build of btrfs and packagefs.
* adding zlib to the kernel unfortunately introduces a cyclic dependency
  with respect to the zlib, haiku and haiku_devel packages (AFAICS)
* circumvent this by building kernel_zlib as a static library again,
  this time with PIC, such that it can be used by kernel add-ons
2013-09-02 12:03:05 +02:00
Oliver Tappe
0cb3f70926 Revert "Fix build problems of btrfs and packagefs for x86_64."
This reverts commit f272e63f393449d3a816970ca632764895a78cd6.
2013-09-02 12:03:05 +02:00
Pawel Dziepak
35cc5c9897 vfs: Allow non-null-terminated UNIX socket pathnames
This patch fix one of the compatibility issues mentioned in #3255. It
allows applications to call bind() or connect() passing an sockaddr_un
structure with a pathname that is not null-terminated.

Some systems did not require pathname in sockaddr_un::sun_path to be
null-terminated, instead the end of the string is determined by the size
of the structure passed as an argument of bind() or connect().

The standard is a bit vague in this matter but suggest that the path
should be null-terminated and the functions bind() and connect() should
be given sizeof(sockaddr_un) as a structure size.
2013-08-31 05:41:12 +02:00
Oliver Tappe
c5c787ea41 Fix build problems of btrfs and packagefs for x86_64.
* Both filesystems used to link to a static kernel-zlib, which 
  was being built with -fno-pic. This doesn't work on x86_64 as the 
  filesystem add-ons are meant to be relocatable, which requires their 
  code to be compiled as position independent.
  Solve that by moving zlib into the kernel, so any add-on can just use
  it from there (packagefs is mandatory, so we can't really do without 
  zlib anyway).
2013-08-29 22:44:50 +02:00
Jérôme Duval
eb5639c43e device_manager: tune the search paths
* the Virtio RNG PCI device has the class 0, so can't be found using usual
paths. Add 0 to _AlwaysRegisterDynamic() and "busses/virtio" in _GetNextDriverPath()
for non generic drivers to help finding virtio_pci.
* The RNG Virtio device is generic and needs "busses/random" to find virtio_rng.
2013-08-29 18:47:45 +02:00
Jérôme Duval
0edcbd2754 apic: serialize writes to x2apic MSR...
as required by the specifications (it isn't needed with memory mapped i/o).
2013-08-26 21:48:33 +02:00
Jérôme Duval
787773400c Added x2APIC support.
* Mostly useful for virtualization at the moment. Works in QEmu.
* Can be enabled by safemode settings/menu.
* Please note that x2APIC normally requires use of VT-d interrupt remapping feature
on real hardware, which we don't support yet.
2013-08-26 21:08:21 +02:00
Ingo Weinhold
e64db4da44 Also mount the packagefs at ~/config 2013-08-25 18:23:11 +02:00
Ingo Weinhold
a56422b448 VFS: fs_mount(): fix FS name leak
Fixes #9909.
2013-08-01 15:43:24 +02:00
Ingo Weinhold
b0944c78b0 More work towards hybrid support
* All packaging architecture dependent variables do now have a
  respective suffix and are set up for each configured packaging
  architecture, save for the kernel and boot loader variables, which
  are still only set up for the primary architecture.
  For convenience TARGET_PACKAGING_ARCH, TARGET_ARCH, TARGET_LIBSUPC++,
  and TARGET_LIBSTDC++ are set to the respective values for the primary
  packaging architecture by default.
* Introduce a set of MultiArch* rules to help with building targets for
  multiple packaging architectures. Generally the respective targets are
  (additionally) gristed with the packaging architecture. For libraries
  the additional grist is usually omitted for the primary architecture
  (e.g. libroot.so and <x86>libroot.so for x86_gcc2/x86 hybrid), so that
  Jamfiles for targets built only for the primary architecture don't
  need to be changed.
* Add multi-arch build support for all targets needed for the stage 1
  cross devel package as well as for libbe (untested).
2013-08-01 08:54:06 +02:00
Jérôme Duval
46f7a54d8c MSI: Use the effective APIC id of the boot CPU for the address destination.
* This should only affect systems where the CPU ids aren't sequential (mostly
non Intel).
* Fixes #9807.
2013-07-29 17:36:03 +02:00
Ingo Weinhold
5163e1c62d Revert "Introduce vnode op supports_operation(), fix devfs_io()"
This reverts commit 98a5231fe5.
2013-07-27 23:31:23 +02:00
Ingo Weinhold
98a5231fe5 Introduce vnode op supports_operation(), fix devfs_io()
devfs_io() can't fall back to calling vfs_synchronous_io(), if the
device driver doesn't support handling requests asynchronously. The
presence of the io() hook leads the VFS (do_iterative_fd_io()) to
believe that asynchronous handling is supported and set a
finished-callback on the request which calls the io() hook to start the
next chunk. Thus, instead of iterating through the request in a loop
the iteration happens recursively. For sufficiently fragmented requests
the stack may overflow (ticket #9900).

* Introduce a new vnode operation supports_operation(). It can be called
  by the VFS to determine whether a present hook is actually currently
  supported for a given vnode.
* devfs: implement the new hook and remove the fallback handling in
  devfs_io().
* vfs_request_io.cpp: use the new hook to determine whether the io()
  hook is really supported.
2013-07-27 17:45:59 +02:00
Alex Smith
271b27d5a3 x86_64: Set vector in iframe/debug state to 99 for syscalls.
Although syscalls are done through SYSCALL and therefore don't actually
have an interrupt number, set it to 99 (the syscall vector on 32-bit)
in the iframe so that a syscall frame can be identified. Also added
vector/error_code to x86_64_debug_cpu_state for Debugger to use, not
sure why I didn't put them there in the first place.
2013-07-25 20:04:25 +01:00
Ingo Weinhold
4387d6b33f Merge remote-tracking branch 'remotes/haiku/master' into package-management 2013-07-11 18:09:03 +02:00
Ingo Weinhold
02b151d3e3 MultiAddressSpaceLocker::AddAreaCacheAndLock(): race condition
* Add a VMArea* version of AddArea().
* AddAreaCacheAndLock(): Use the new AddArea() version. This not only
  saves the ID hash table lookup, but also fixes a race condition with
  delete_area(). delete_area() removes the area from the hash before
  removing it from its cache, so iterating through the cache's areas
  can turn up an area that no longer is in the hash. In that case we
  would fail immediately. The new AddArea() won't fail in this
  situation, though.

Fixes #9686: vm_copy_area() could fail for the "commpage" area. That's
an area all teams share, so any team terminating while another one was
fork()ing could trigger it.
2013-07-11 17:56:26 +02:00
Ingo Weinhold
7bea0205ed vm_page_allocate_page_run(): fix debug output 2013-07-11 17:56:20 +02:00
Ingo Weinhold
c53508b730 kernel tracing: implement fallback for meta data allocation
We the meta data area couldn't be allocated in any of the supported
(reattachable) places, just use a static allocation. The tracing feature
wouldn't be available at all in such a case.
2013-07-11 17:56:13 +02:00
Jérôme Duval
86340fcef3 kernel/int.cpp: typo fix 2013-07-09 23:53:26 +02:00
Ingo Weinhold
7e78b434f4 Merge remote-tracking branch 'haiku/master' into package-management
Conflicts:
	build/jam/HaikuImage
	build/jam/OptionalPackageDependencies
	build/jam/OptionalPackages
	build/scripts/build_cross_tools_gcc4
	src/add-ons/translators/icns/Jamfile
	src/add-ons/translators/jpeg/Jamfile
2013-07-08 14:01:00 +02:00
Jérôme Duval
d3b108c53d virtio_scsi: added to the image.
* device_manager: scans busses/scsi for generic drivers.
2013-07-02 22:48:25 +02:00
Jérôme Duval
3c47ce8421 DMAResource: mutex_lock() before calling mutex_destroy(). 2013-07-02 19:00:43 +02:00
Ingo Weinhold
2eb2b522bf Enforce team and thread limits
Also fixes incorrect team accounting in case of error when creating
a team. The previously incremented sUsedTeams wasn't decremented again.
2013-07-02 01:57:30 +02:00
Ingo Weinhold
cbcde3ba80 kernel team.cpp: fix unbalanced io_context ref management
... in case of team creation error. Once assigned to Team::io_context
the Team object takes responsibility of the I/O context object and
releases the reference on destruction. load_image_internal() and
fork_team() were thus releasing one reference too many.

Fixes #9851.
2013-07-02 01:57:30 +02:00
Ingo Weinhold
8c974aa800 node monitor: add TODO regarding the syscalls 2013-06-27 21:57:43 +02:00
Ingo Weinhold
0d603ac65c Fix node monitoring slot accounting for stop_watching()
NodeMonitorService::RemoveUserListeners() didn't decrement
io_context::num_monitors when removing a listener, so limit checks
would be off afterwards.
2013-06-27 21:57:43 +02:00
Jérôme Duval
6121ae660c device_manager: init DMAResource::fScratchVecs. 2013-06-15 16:26:50 +02:00
François Revol
a442699e34 PPC: Use asm_defs.h instead of hardcoded defines 2013-06-01 19:32:43 +02:00
François Revol
d4659184b8 PPC: Add a 44x version of arch_exceptions.S
For now just a copy of the classic code.
2013-06-01 19:18:12 +02:00
François Revol
b8ded2f897 Merge branch 'master' into sam460ex 2013-05-27 17:45:55 +02:00
Jérôme Duval
78b461d6a1 Merge branch 'virtio' 2013-05-26 17:12:25 +02:00
Jérôme Duval
3aae21ab63 virtio: integrate into the build and image
* device_manager: scans busses/virtio for network device types
  and scsi controllers.
2013-05-26 16:05:53 +02:00
Ingo Weinhold
5261923e87 Add dvprintf() 2013-05-25 01:12:29 +02:00
Pawel Dziepak
6c9c8a037c vm: fix area insertion logic
* When looking for a place for new area the size of the area to be
   inserted instead of the next area size was used to check whether
   we are already past the upper bound.
 * There was an attempt to insert area even if we were past the
   upper bound.
2013-05-22 19:31:26 +02:00
Ingo Weinhold
c663ca2171 Merge branch 'master' into package-management
Conflicts:
	build/jam/HaikuImage
	src/system/kernel/arch/x86/64/arch.S
2013-05-12 00:18:19 +02:00
Ingo Weinhold
1848fdc329 util/khash: Add hash_hash_string_part() 2013-05-11 23:17:55 +02:00
Ingo Weinhold
7c6bff1734 Complete outsourcing of zlib
* Add optional packages Zlib and Zlib-devel.
* Simplify the build feature section for zlib and also extract the
  source package.
* Replace all remaining references to the zlib instance in the tree and
  remove it.
2013-05-06 04:37:18 +02:00
Rene Gollent
1b17f7ab00 Fix x86-64 build. 2013-05-05 16:57:51 -04:00
Ingo Weinhold
5af6169bb2 x86[-64]: Fix arch_cpu_user_strlcpy() for small buffers
The case for small buffers was broken, since scasb operates on edi/rdi,
not esi/rsi.
2013-05-05 15:46:32 -04:00
Ingo Weinhold
bcbf22a316 x86[-64]: Fix arch_cpu_user_strlcpy() for small buffers
The case for small buffers was broken, since scasb operates on edi/rdi,
not esi/rsi.
2013-05-05 18:01:12 +02:00
Ingo Weinhold
25a7b01d15 Merge branch 'master' into package-management
Additional changes:
* Add src/system/kernel/lib/zlib, which builds a kernel version of zlib,
  needed by packagefs.
* BuildFeatures: Add a build feature "gcc2" to allow for easier checks.
* Referenceable.cpp: Include <OS.h> instead of <debugger.h>. The latter
  is not needed and prevents building for the build platform.
* zlib/zutil.h: Fix gcc 2 build. We really should use the external
  package instead.

Conflicts:
	.gitignore
	build/jam/BuildSetup
	build/jam/FileRules
	build/jam/FloppyBootImage
	build/jam/HaikuImage
	build/jam/ImageRules
	build/jam/KernelRules
	build/jam/NetBootArchive
	build/jam/OptionalBuildFeatures
	build/jam/OptionalLibPackages
	build/jam/OptionalPackageDependencies
	build/jam/OptionalPackages
	build/scripts/build_haiku_image
	configure
	data/bin/installoptionalpackage
	data/system/boot/Bootscript
	headers/os/app/Message.h
	headers/os/package/PackageInfo.h
	headers/os/package/PackageInfoAttributes.h
	headers/os/package/PackageInfoSet.h
	headers/os/package/PackageRoster.h
	headers/os/package/PackageVersion.h
	headers/os/package/hpkg/PackageInfoAttributeValue.h
	headers/os/storage/FindDirectory.h
	headers/os/storage/Node.h
	headers/os/support/StringList.h
	headers/private/system/directories.h
	src/add-ons/kernel/drivers/audio/ac97/es1370/Jamfile
	src/add-ons/kernel/file_systems/packagefs/AttributeIndex.cpp
	src/add-ons/kernel/file_systems/packagefs/Jamfile
	src/add-ons/kernel/file_systems/packagefs/Package.cpp
	src/add-ons/kernel/file_systems/packagefs/Package.h
	src/add-ons/kernel/file_systems/packagefs/PackageDomain.cpp
	src/add-ons/kernel/file_systems/packagefs/PackageDomain.h
	src/add-ons/kernel/file_systems/packagefs/PackageFSRoot.cpp
	src/add-ons/kernel/file_systems/packagefs/PackageLinkDirectory.cpp
	src/add-ons/kernel/file_systems/packagefs/PackageLinkDirectory.h
	src/add-ons/kernel/file_systems/packagefs/PackageLinkSymlink.cpp
	src/add-ons/kernel/file_systems/packagefs/PackageLinkSymlink.h
	src/add-ons/kernel/file_systems/packagefs/PackageLinksDirectory.cpp
	src/add-ons/kernel/file_systems/packagefs/PackageNode.h
	src/add-ons/kernel/file_systems/packagefs/ResolvableFamily.cpp
	src/add-ons/kernel/file_systems/packagefs/Version.cpp
	src/add-ons/kernel/file_systems/packagefs/Version.h
	src/add-ons/kernel/file_systems/packagefs/Volume.cpp
	src/add-ons/kernel/file_systems/packagefs/Volume.h
	src/add-ons/kernel/file_systems/packagefs/kernel_interface.cpp
	src/add-ons/kernel/file_systems/userlandfs/shared/driver_settings.c
	src/apps/deskbar/BarApp.cpp
	src/apps/deskbar/BarMenuBar.cpp
	src/apps/deskbar/BarMenuBar.h
	src/apps/deskbar/BarView.cpp
	src/apps/deskbar/BarView.h
	src/apps/deskbar/BarWindow.cpp
	src/apps/deskbar/BarWindow.h
	src/apps/deskbar/DeskbarMenu.cpp
	src/apps/deskbar/DeskbarMenu.h
	src/apps/deskbar/DeskbarUtils.cpp
	src/apps/deskbar/DeskbarUtils.h
	src/apps/deskbar/ExpandoMenuBar.cpp
	src/apps/deskbar/ExpandoMenuBar.h
	src/apps/deskbar/TeamMenu.cpp
	src/apps/processcontroller/ProcessController.cpp
	src/apps/remotedesktop/RemoteDesktop.cpp
	src/bin/bash/config-top.h
	src/bin/finddir.c
	src/bin/package/Jamfile
	src/bin/package/command_add.cpp
	src/bin/package/command_create.cpp
	src/bin/package/command_list.cpp
	src/bin/package_repo/command_list.cpp
	src/bin/pkgman/command_refresh.cpp
	src/build/libbe/support/Jamfile
	src/build/libpackage/Jamfile
	src/build/libroot/Jamfile
	src/build/libroot/fs.cpp
	src/build/libroot/remapped_functions.h
	src/kits/locale/MutableLocaleRoster.cpp
	src/kits/opengl/GLRendererRoster.cpp
	src/kits/package/PackageInfo.cpp
	src/kits/package/PackageInfoSet.cpp
	src/kits/package/PackageRoster.cpp
	src/kits/package/PackageVersion.cpp
	src/kits/package/RepositoryCache.cpp
	src/kits/package/hpkg/PackageWriterImpl.cpp
	src/kits/package/hpkg/ReaderImplBase.cpp
	src/kits/package/hpkg/WriterImplBase.cpp
	src/kits/print/PrintTransport.cpp
	src/kits/print/Printer.cpp
	src/kits/screensaver/ScreenSaverRunner.cpp
	src/kits/support/StringList.cpp
	src/kits/tracker/ContainerWindow.cpp
	src/kits/tracker/DeskWindow.cpp
	src/kits/tracker/PoseView.cpp
	src/libs/print/libprint/Transport.cpp
	src/preferences/printers/AddPrinterDialog.cpp
	src/preferences/screensaver/ScreenSaverWindow.cpp
	src/servers/debug/DebugServer.cpp
	src/servers/input/AddOnManager.cpp
	src/servers/media_addon/MediaAddonServer.cpp
	src/system/boot/Jamfile
	src/system/boot/loader/Jamfile
	src/system/boot/loader/loader.cpp
	src/system/boot/loader/vfs.cpp
	src/system/kernel/fs/vfs.cpp
	src/system/kernel/fs/vfs_boot.cpp
	src/system/libroot/os/find_directory.cpp
	src/system/runtime_loader/runtime_loader.cpp
	src/tools/package/Jamfile
2013-05-05 15:03:26 +02:00
Jérôme Duval
3756e0ac38 kernel: use uint64 instead of int64 to avoid narrowing conversion warnings.
* gdb_register is used only in arch_debug.cpp
2013-04-29 21:20:35 +02:00
Jérôme Duval
311e148798 vfs: fixed two warnings.
* warnings about comparison between signed and unsigned integer expressions.
2013-04-29 20:57:34 +02:00
Michael Lotz
a064168869 Fix truncation of comparison value introduced in 848acd67.
Casting the difference of the two off_t values to size_t may truncate
the result. Doing so before the comparison will therefore break it.
Instead cast the size to off_t to get around the signed versus unsigned
integer expression comparison and then cast the result of the comparison
to size_t again. Should fix #9714.
2013-04-27 18:42:05 +02:00
Jérôme Duval
32d7bcb470 VMAnonymousCache.cpp: use off_t instead of page_num_t
* use off_t instead of page_num_t to fit in swap_hash_key struct.
* this fixes narrowing conversion and signedness warnings on GCC 4.7.
2013-04-27 14:43:20 +02:00
Jerome Duval
dc0e22d800 Revert "VMAnonymousCache.cpp: changed page_index type to page_num_t"
This reverts commit f7176b0ee5. Citing Ingo:
"off_t is the correct type to use for addressing pages in a cache/file,
which page_num_t should only be used for physical pages." I'll see how to
fix the GCC 4.7 warnings differently :)
2013-04-27 13:36:49 +02:00
Jérôme Duval
f7176b0ee5 VMAnonymousCache.cpp: changed page_index type to page_num_t
* consistently use page_num_t for page numbers and off_t for offsets and sizes.
2013-04-26 21:17:39 +02:00
Jérôme Duval
848acd672c devfs: casts as size_t before comparing.
* error: comparison between signed and unsigned integer expressions.
2013-04-26 21:17:34 +02:00
Jérôme Duval
d762df1df1 GCC 4.7.x doesn't allow setting a field in a referenced packed struct.
* error message: error: cannot bind packed field
'args->kernel_args::platform_args.platform_kernel_args::apm' to 'apm_info&'
* the reason would be that the reference doesn't have alignment information anymore.
* changed the reference to const for read access, and use the long form for setting a field.
2013-04-26 21:17:31 +02:00
Pawel Dziepak
902d41fc75 util: Use real_time_clock() in secure PRNG 2013-04-24 14:05:28 +02:00
Pawel Dziepak
c36a000cb4 vm: Fix off-by-one mistakes in _InsertAreaSlot 2013-04-24 14:05:27 +02:00
Pawel Dziepak
0fef11f1a8 arch: some CPUID leaves may be not available 2013-04-23 02:43:26 +02:00
Rene Gollent
c24adb2950 Rework DefaultNotificationService registration.
- Instead of implicitly registering and unregistering a service
  instance on construction/destruction, DefaultNotificationService
  now exports explicit Register()/Unregister() calls, which subclasses
  are expected to call when they're ready.

- Adjust all implementing subclasses. Resolves an issue with deadlocks
  when booting a DEBUG=1 build.
2013-04-22 18:42:21 -04:00
Ingo Weinhold
237127fbe4 Fix _user_entry_ref_to_path() in chroot
* Add "bool kernel" parameter to vfs_entry_ref_to_path(), so it can be
  specified for which I/O context the entry ref shall be translated.
* _user_entry_ref_to_path(): Use the calling team's I/O context instead
  of the kernel's. Fixes the bug that in a chroot the syscall would
  return a path for outside the chroot.
2013-04-22 18:06:28 +02:00
Pawel Dziepak
be573dcd88 arch: make sure not to set NX-bit when it is reserved 2013-04-22 17:36:36 +02:00
François Revol
3060b78cfc PPC: Setup debug UART for kernel when booted from U-Boot
Welcome to kernel debugger output!
\o/
2013-04-21 03:29:48 +02:00
François Revol
2e27c020cb U-Boot: Factor-out debug UART setup from FDT for kernel use 2013-04-21 03:28:01 +02:00
François Revol
18ea985add U-Boot: PPC: set gFDT when passed to the kernel. 2013-04-21 02:08:24 +02:00
François Revol
eecde8e37c Merge branch 'master' into sam460ex 2013-04-21 01:34:20 +02:00
Pawel Dziepak
103977d0a9 arch: NX is initialized too early on non-boot CPUs 2013-04-18 00:15:57 +02:00
Pawel Dziepak
84bb91df83 arch: use PRNGs from kernel utils for initializing stack pointer 2013-04-16 22:35:10 +02:00
Pawel Dziepak
8614737f71 elf: restore correct region protection after relocation 2013-04-16 03:44:38 +02:00
Pawel Dziepak
db1ca60528 runtime_loader: randomize position of runtime_loader
* make runtime_loader a dynammically linked object
 * add kernel support for loading user images that need to be relocated
 * load runtime_loader at random address
2013-04-16 02:29:05 +02:00
Pawel Dziepak
cf35dcc5bc vm: make aslr use more secure PRNG 2013-04-11 17:16:49 +02:00
Pawel Dziepak
d0a8e6ef2b vm: remove unused static function log2() 2013-04-11 12:32:32 +02:00
Pawel Dziepak
87d1bdb87c util: add secure pseudorandom number generator 2013-04-11 12:31:58 +02:00
Pawel Dziepak
69042ecd1b util: style fixes 2013-04-11 12:15:47 +02:00
Pawel Dziepak
d9fa99bb60 scheduler: let schedulers use kernel utils for random numbers 2013-04-11 04:37:23 +02:00
Pawel Dziepak
5c455f803f vm: let aslr use kernel utils for random numbers 2013-04-11 04:35:11 +02:00
Pawel Dziepak
6003243ef3 util: introduce kernel utils for pseudorandom number generation
Currently there are two generators. The fast one is the same one the scheduler
is using. The standard one is the same algorithm libroot's rand() uses. Should
there be a need for more cryptographically PRNG MD4 or MD5 might be a good
candidates.
2013-04-11 04:34:59 +02:00
Pawel Dziepak
feae2b5a00 vm: force userland to use B_RANDOMIZED_* address specifications 2013-04-09 23:25:19 +02:00
Pawel Dziepak
bf65fc1dfe vm: remove B_RANDOMIZED_IMAGE_ADDRESS address specification
This address specification is actually not needed since PIC images can be
located anywhere. Only their size is restriced but that is the compiler and
linker concern. Thanks to Alex Smith for pointing that out.
2013-04-09 22:09:13 +02:00
Pawel Dziepak
d57105534b vm: several improvements to VMUserAddressSpace::_InsertAreaSlot implementation
* B_BASE_ADDRESS honors requested alignment
 * end of range is honored
 * B_BASE_ADDRESS reuses B_ANY_ADDRESS code
2013-04-08 23:56:10 +02:00
Ingo Weinhold
5b6fb78c40 VFS: _kern_open_dir(): Fix NULL path case
It would create an empty path buffer and pass that on to dir_open(),
which accepts NULL, but not empty paths.
2013-04-05 19:19:20 +02:00
Ingo Weinhold
d482342399 VM: Fix vm_block_address_range() area protection
B_ALREADY_WIRED, which was erroneously passed for the area protection
parameter to map_backing_store(), has the value 7 which implies user
readable and writable. Hence the address ranges around 0xdeadbeef and
0xcccccccc could actually be read and written from anywhere.
2013-04-05 16:58:50 +02:00
Pawel Dziepak
65ed4fa908 vm: implement B_RANDOMIZED_IMAGE_ADDRESS address specification
On some 64 bit architectures program and library images have to be mapped in
the lower 2 GB of the address space (due to instruction pointer relative
addressing). Address specification B_RANDOMIZED_IMAGE_ADDRESS ensures that
created area satisfies that requirement.
2013-04-04 20:54:02 +02:00
Pawel Dziepak
f697412ff8 vm: place commpage and team data near the top of user address space
Placing commpage and team user data somewhere at the top of the user accessible
virtual address space prevents these areas from conflicting with elf images
that require to be mapped at exact address (in most cases: runtime_loader).
2013-04-04 15:27:24 +02:00
Pawel Dziepak
ffbf0328d2 debug: update debug kit to correctly recognize commpage 2013-04-04 15:27:23 +02:00
Pawel Dziepak
e85e399fd7 commpage: randomize position of commpage
This patch introduces randomization of commpage position. From now on commpage
table contains offsets from begining to of the commpage to the particular
commpage entry. Similary addresses of symbols in ELF memory image "commpage"
are just offsets from the begining of the commpage.

This patch also updates KDL so that commpage entries are recognized and shown
correctly in stack trace. An update of Debugger is yet to be done.
2013-04-04 15:27:22 +02:00
Pawel Dziepak
966f207668 x86: enable data execution prevention
Set execute disable bit for any page that belongs to area with neither
B_EXECUTE_AREA nor B_KERNEL_EXECUTE_AREA set.

In order to take advanage of NX bit in 32 bit protected mode PAE must be
enabled. Thus, from now on it is also enabled when the CPU supports NX bit.

vm_page_fault() takes additional argument which indicates whether page fault
was caused by an illegal instruction fetch.
2013-04-04 15:22:23 +02:00
Pawel Dziepak
211f71325a x86: move x86_userspace_thread_exit() from user stack to commpage
x86_userspace_thread_exit() is a stub originally placed at the bottom of
each thread user stack that ensures any thread invokes exit_thread() upon
returning from its main higher level function.

Putting anything that is expected to be executed on a stack causes problems
when implementing data execution prevention. Code of x86_userspace_thread_exit()
is now moved to commpage which seems to be much more appropriate place for it.
2013-04-04 15:16:27 +02:00
Pawel Dziepak
02cceebe40 team: randomize position of team user data
When forking a process team user data area is not cloned but a new one is
created instead. However, the new one has to be at exactly the same address
parent's team user data area is. When process is exec then team user data
area may be recreated at random position.

This patch also make sure that instances of struct user_thread in team user
data are each in separate cache line in order to prevent false sharing since
these data are very likely to be accessed simultaneously from threads executing
on different CPUs. This change however reduces the number of threads process
can create. It is fixed by reserving 512kB of address space in case team user
data area needs to grow.
2013-04-04 15:16:25 +02:00
Pawel Dziepak
17c189899a thread: randomize user stack position
Use B_RANDOMIZE_BASE_ADDRESS for creating both main and other threads user
stack.
2013-04-04 15:16:22 +02:00
Pawel Dziepak
b3e4c67739 vm: implement B_RANDOMIZED_ANY_ADDRESS address specification
Randomized equivalent of B_ANY_ADDRESS. When a free space is found (as in
B_ANY_ADDRESS) the base adress is then randomized using _RandomizeAddress
pretty much like it is done in B_RANDOMIZED_BASE_ADDRESS.
2013-04-04 15:16:21 +02:00
Pawel Dziepak
f9bab525f6 vm: implement B_RANDOMIZED_BASE_ADDRESS address specification
B_RAND_BASE_ADDRESS is basically B_BASE_ADDRESS with non-deterministic created
area's base address.

Initial start address is randomized and then the algorithm looks for a large
enough free space in the interval [randomized start, end]. If it fails then
the search is repeated in the interval [original start, randomized start]. In
case it also fails the algorithm falls back to B_ANY_ADDRESS
(B_RANDOMIZED_ANY_ADDRESS when it is implemented) just like B_BASE_ADDRESS does.

Randomization range is limited by kMaxRandomize and kMaxInitialRandomize.
2013-04-04 15:16:21 +02:00
Pawel Dziepak
3b4269ecf5 arch: randomize initial user stack pointer
Inside the page randomization of initial user stack pointer is not only a part
of ASLR implementation but also a performance improvement that helps
eliminating aligned 64 kB data access.

Minimal user stack size is increased to 8 kB in order to ensure that regardless
of initial stack pointer value there is still enough space on stack.
2013-04-04 15:16:20 +02:00
François Revol
d4eea7d43c Merge branch 'master' into sam460ex 2013-03-28 09:47:50 +01:00
Alex Smith
5e0c3db286 Account for the physical map area in the kernel VM space. Fixes #9547.
The physical memory map area was not included in the kernel virtual
address space range (it was below KERNEL_BASE). This caused problems
if an I/O operation took place on physical memory mapped there (the
bad address error seen in #9547 was occurring in lock_memory_etc()).
Changed KERNEL_BASE and KERNEL_SIZE to cover the area and add a null
area that covers all of it. Also changed X86VMTranslationMap64Bit to
handle large pages in Query(), as the physical map area uses large
pages.
2013-03-22 18:30:01 +00:00
Alex Smith
8627383bf7 Fixed compilation errors with ENABLE_TRACING set. 2013-03-22 16:46:09 +00:00
Alex Smith
1aef6664d1 Fixed compilation of VFS/IORequest trace messages. 2013-03-22 14:14:33 +00:00
Pawel Dziepak
1a0386d743 Fix #8661: fcntl(fd, F_GETLK, ...) violates POSIX
The standard states that F_GETLK should check whether given lock would be
blocked by another one and return description of the conflicting one (or
set l_type to F_UNLCK if there is no collision).

Current implementation of F_GETLK performs completely different actions, it
"Retrieves the first lock that has been set by the current team". Moreover,
if there are no locks (advisory_locking == NULL) an error is returned
instead of l_type set to F_UNLCK.
2013-03-12 17:35:54 +01:00
François Revol
8b72ce2651 Merge branch 'master' into sam460ex 2013-03-12 03:24:15 +01:00
Pawel Dziepak
7f61e6e4e5 Merge branch 'nfs4'
Conflicts:
	build/jam/HaikuImage
2013-03-11 13:00:55 +01:00
François Revol
05e65058fe U-Boot: cleanup 2013-02-18 02:41:16 +01:00
François Revol
aa9d092029 U-Boot: implement of_get_next_device() in the OF wrapper 2013-02-18 02:40:16 +01:00
François Revol
219f59da1f U-Boot: bail out in of_init() if no FDT passed 2013-02-18 00:52:31 +01:00
François Revol
307c6177df U-Boot: cleanup OpenFirmware wrapper tracing 2013-02-18 00:47:22 +01:00
François Revol
5bdc10121b U-Boot: use FDT call directly in of_init() in OF wrapper
This avoids calling dprintf() and allows calling it earlier.
2013-02-18 00:42:10 +01:00
François Revol
28d1701896 Merge branch 'master' into sam460ex 2012-12-29 11:55:24 +01:00
Hamish Morrison
d1f280c805 Add support for pthread_attr_get/setguardsize()
* Added the aforementioned functions.
* create_area_etc() now takes a guard size parameter.
* The thread_info::stack_base/end range now refers to the usable range
  only.
2012-12-28 18:02:58 +00:00
François Revol
98191ec624 Merge branch 'master' into sam460ex 2012-12-19 15:44:14 +01:00
Sergei Reznikov
b7b5d7636b 64-bit fixes for kernel with KDEBUG_LEVEL = 0
Signed-off-by: Alex Smith <alex@alex-smith.me.uk>
2012-12-18 14:56:16 +00:00
François Revol
97b9539c65 Merge branch 'master' into sam460ex 2012-12-06 00:12:40 +01:00
Michael Lotz
760de9b200 Tiny code style cleanup. 2012-12-04 23:38:11 +01:00
Michael Lotz
85db228177 Style cleanup only. 2012-12-04 23:38:10 +01:00
Michael Lotz
1ed5f66cd4 Add missing function end macro. 2012-12-04 23:38:09 +01:00
Michael Lotz
2b5d52a174 Whitespace cleanup only. 2012-12-04 23:38:09 +01:00
Michael Lotz
f0422c6f9f Only set the physical address if the entry is mapped.
Otherwise, even when the address was 0, we would possibly set the
physical address to != 0 as we always applied the page offset.
2012-12-04 23:38:08 +01:00
Michael Lotz
926d1024d0 Fix wrong address mask (page directory vs. page table). 2012-12-04 23:38:07 +01:00
Michael Lotz
fd6e3a11e2 Use the existing ARM MMU definitions and remove duplicates. 2012-12-04 23:38:06 +01:00
Michael Lotz
50c463f4f1 Header cleanup, rename macros for more consistency. 2012-12-04 23:38:03 +01:00
Michael Lotz
eca34ad168 Print page and cache using initial commands in panic message. 2012-12-04 23:36:09 +01:00
Michael Lotz
d50875de46 Use format macros in debug output. 2012-12-04 23:36:08 +01:00
Michael Lotz
67d9fcc3ba Whitespace cleanup, no functional change. 2012-12-04 23:35:40 +01:00
Rene Gollent
86f0f139a9 Fix kernel build with KDEBUG_LEVEL 0. 2012-11-30 18:23:15 -05:00
Michael Lotz
fed8bb7dff Fix index range for ARM MMU coarse page tables.
As there are only 8 bits for the index in the coarse page table entries
the maximum index is 256. This makes us correctly move to the next page
directory once we've run through all entries. Fixes missing unmap of
pages that crossed that boundary and consequent panic "page still has
mappings" when the page was removed from a cache.
2012-11-30 22:09:07 +01:00
François Revol
c435277d49 Merge branch 'master' into sam460ex 2012-11-29 16:06:28 +01:00
Michael Lotz
94b364b469 Add blue_screen and frame_buffer_console into the bootloader.
These can be used for on-screen debug output with relatively little
effort, as they just need a plain framebuffer definition to work.

Some stubs are added to not clutter up the kernel sources with too
many ifdefs.
2012-11-27 22:41:47 +01:00
François Revol
77d95e1d47 Merge branch 'master' into sam460ex
Conflicts:
	src/system/boot/platform/u-boot/arch/ppc/Jamfile
2012-11-18 23:10:49 +01:00
Alex Smith
11c9f9a1d6 Merge branch 'master' into x86_64
Conflicts:
	build/jam/FloppyBootImage
	build/jam/OptionalBuildFeatures
	build/jam/OptionalPackages
	headers/private/shared/cpu_type.h
	src/bin/ps.c
	src/bin/sysinfo.cpp
	src/kits/tracker/PoseView.cpp
	src/preferences/appearance/DecorSettingsView.cpp
	src/preferences/virtualmemory/Settings.cpp
	src/servers/input/AddOnManager.cpp
	src/servers/input/InputServer.cpp
	src/servers/input/InputServerMethod.cpp
	src/system/boot/Jamfile
	src/system/boot/platform/raspberrypi_arm/mmu.cpp
	src/system/boot/platform/u-boot/arch/arm/Jamfile
	src/system/kernel/arch/x86/arch_cpu.cpp
	src/system/kernel/arch/x86/arch_thread.cpp
	src/system/kernel/cache/block_cache.cpp
	src/system/kernel/vm/VMAnonymousCache.cpp
2012-11-18 14:02:07 +00:00
François Revol
2b3046e60d Merge branch 'master' into sam460ex 2012-11-16 00:09:54 +01:00
Michael Lotz
963d68a632 Fix typo. 2012-11-14 15:16:47 +01:00
Michael Lotz
ad53cd29cb Fix iterator in hash_remove_current() to not skip elements.
When iterator->current is NULL, hash_next() assumes we've reached the
end of a bucket (linked list) and moves to the next one. Wehn the first
element of a linked list was removed in hash_remove_current()
iterator->current was set to NULL, causing the next call to hash_next()
to skip over the rest of the list of that bucket.

To fix this we now decrement iterator->bucket by one, so the next call
to hash_next() correctly arrives at the new first element of the same
bucket. Doing it this way avoids having to search backwards through the
table to find the actual previous item.

This caused modules to be skipped in module_init_post_boot_device()
when normalizing module image paths so some of the module images ended
up non-normalized. This could then cause images to be loaded a second
time for modules that were part of an actually already loaded image.
This setup is present for the PCI module with the pci/x86 submodule
and would lead to a second copy of the PCI module image to be loaded
but without being initialized, eventually leading to #8684.

The affected module images were pretty much random, as it depended on
the order in which they were loaded from the file system, in this case
the boot floppy archive of the El-Torito boot part of ISO and anyboot
images. The r1alpha4 release images unfortunately had the module files
ordered in the archive just so that the PCI module image would be
skipped, allowing #8684 to happen on many systems with MSI support.

Since the block cache uses hash_remove_current() as well in some cases,
it is possible that transactions in its list could've been skipped.
Cursory testing didn't reveal this to be a usual case, and it is
possible that in the pattern it is used there, the bug wouldn't be
triggered at all. It's still possible that it caused rare misbehaviour
though.
2012-11-14 15:09:54 +01:00
François Revol
dd686298c5 Merge branch 'master' into sam460ex 2012-11-13 12:51:50 +01:00
Ithamar R. Adema
4b2a1d798b ARM: implement arch_cpu_user_memcpy/memset/strlcpy functions
Remove the dummies from the C code and implement them in assembly,
due to the label referencing issues with the fault handler.

This code is ripe for optimisation, my ARM assembly is pretty
basic ;)

Does work though, and gets us one step closer to a full arch.
2012-11-12 20:03:48 +01:00
François Revol
13abd68fc3 Merge branch 'master' into sam460ex 2012-11-10 20:36:35 +01:00
Ithamar R. Adema
3d49fa31ec VMCache: Fix broken trace statements 2012-11-10 00:32:30 +01:00
François Revol
8e75bf5845 Merge branch 'master' into sam460ex 2012-11-09 10:56:13 +01:00
Jerome Duval
5ad12a800d vm_page_allocate_page_run: use a mask to enforce the boundary
* use a mask to enforce the boundary as suggested by Ingo. Thanks!
2012-11-09 00:21:41 +01:00
François Revol
17c270bd4f Merge branch 'master' into sam460ex 2012-11-08 10:25:41 +01:00
czeidler
9abf4591d5 Ok there are some more, thanks Rene. 2012-11-07 21:45:43 +01:00
czeidler
71d45a0f76 Coding style. 2012-11-07 21:37:40 +01:00
Ithamar R. Adema
e2b8ceb23c ARM/int: remove CPU fault handler debug output 2012-11-07 17:08:15 +01:00
Ithamar R. Adema
f86b582848 ARM: Cleanup of port support code.
This also implements the fault handler correctly now, and cleans up the
exception handling. Seems a lot more stable now, no unexpected panics or
faults happening anymore.
2012-11-07 16:24:22 +01:00
Ithamar R. Adema
0cf5ecba12 ARM: Add asm_offsets.cpp
This will generate asm_offsets.h which makes our assembly code
easier to maintain by preventing hardcoded offsets for fields within structures.

(copied from X86 and removed the X86 specifics)
2012-11-07 16:24:22 +01:00
Ithamar R. Adema
ff163585ec ARM/threads: Disable debug output
Tracing was accidently switched on by a previous commit.
2012-11-07 16:24:21 +01:00
Ithamar R. Adema
0e5d97e97e ARM/vm: small formatting change and trace fix.
Copy some minor changes over from the X86 paging implementation to keep
the two reasonably aligned. Smaller diff ;-)
2012-11-07 16:24:21 +01:00