Pawel Dziepak
f4b088a992
kernel: Protect UserTimers with sUserTimerLock
2013-11-05 05:36:05 +01:00
Pawel Dziepak
4824f7630b
kernel: Add sequential lock implementation
2013-11-05 04:16:13 +01:00
Pawel Dziepak
3c819aaa72
kernel: DPC: remove schedulerLocked argument
2013-11-04 23:51:18 +01:00
Pawel Dziepak
11cacd0c13
kernel: Remove thread_block_with_timeout_locked()
2013-11-04 23:45:14 +01:00
Pawel Dziepak
d8fcc8a825
kernel: Remove B_TIMER_ACQUIRE_SCHEDULER_LOCK flag
...
The flag main purpose is to avoid race conditions between event handler
and cancel_timer(). However, cancel_timer() is safe even without
using gSchedulerLock.
If the event is scheduled to happen on other CPU than the CPU that
invokes cancel_timer() then cancel_timer() either disables the event
before its handler starts executing or waits until the event handler
is done.
If the event is scheduled on the same CPU that calls cancel_timer()
then, since cancel_timer() disables interrupts, the event is either
executed before cancel_timer() or when the timer interrupt handler
starts running the event is already disabled.
2013-10-31 01:49:43 +01:00
Pawel Dziepak
c8dd9f7780
kernel: Add thread_unblock() and use it where possible
2013-10-30 03:58:36 +01:00
Pawel Dziepak
9c0ff0eed1
kernel: Add cpufreq module for Intel P-states
...
Since Sandy Bridge managing P-states on Intel processors is much easier
and more powerful than when using previous versions of EIST.
2013-10-30 00:55:03 +01:00
Pawel Dziepak
22d8248267
kernel: Add support and interface for cpufreq modules
2013-10-30 00:48:07 +01:00
Pawel Dziepak
978fc08065
scheduler: Remove support for running different schedulers
...
Simple scheduler behaves exactly the same as affine scheduler with a
single core. Obviously, affine scheduler is more complicated thus
introduces greater overhead but quite a lot of multicore logic has been
disabled on single core systems in the previous commit.
2013-10-24 02:04:03 +02:00
Pawel Dziepak
ed8627e535
kernel/util: Fix MinMaxHeap::_GrowHeap()
2013-10-24 00:59:58 +02:00
Pawel Dziepak
31a75d402f
kernel: Protect lock internals with per-lock spinlock
2013-10-24 00:01:18 +02:00
Pawel Dziepak
4c4994435d
kernel/util: Fixes in [MinMax]Heap implementation
2013-10-22 23:56:31 +02:00
Pawel Dziepak
5cf9b69b49
kernel/util: Minor improvements in Heap and MinMaxHeap
...
* [MinMax]Heap::ModifyKey(): Do not attempt to move node if the key
actually hasn't changed.
* Allow allocating initial array at construction.
2013-10-21 21:24:05 +02:00
Pawel Dziepak
7ea42e7add
kernel: Remove invoke_scheduler_if_idle
2013-10-21 02:38:57 +02:00
Pawel Dziepak
ea79da9500
kernel: Remove support for thread_queue
2013-10-21 02:30:20 +02:00
Pawel Dziepak
cd8d4e39fd
kernel: Introduce scheduler modes of operation
2013-10-21 02:17:00 +02:00
Pawel Dziepak
343c489689
kernel: Create CPU topology tree
2013-10-21 01:33:35 +02:00
Pawel Dziepak
5cbf227236
kernel/util: Allocate only one array in MinMaxHeap
2013-10-20 23:33:55 +02:00
Pawel Dziepak
18c0d163ed
kernel/util: Add MinMaxHeap implementation
2013-10-17 19:22:29 +02:00
Pawel Dziepak
278c9784a1
scheduler_affine: Use global core heap and per-core CPU heaps
...
There is a global heap of cores, where the key is the highest priority
of threads running on that core. Moreover, for each core there is
a heap of logical processors on this core where the key is the priority
of currently running thread.
The per-core heap is used for load balancing among logical processors
on that core. The global heap is used in initial decision where to put
the thread (note that the algorithm that makes this decision is not
complete yet).
2013-10-17 02:11:28 +02:00
Pawel Dziepak
cf863a5040
kernel: Decide whether to use simple or affine scheduler
...
Simple scheduler is used when we do not have to worry about cache affinity
(i.e. single core with or without SMT, multicore with all cache levels
shared).
When we replace gSchedulerLock with more fine grained locking affine
scheduler should also be chosen when logical CPU count is high (regardless
of cache).
2013-10-16 18:39:25 +02:00
Pawel Dziepak
f20ad54be2
kernel: Add support for SMP systems to simple scheduler
...
In SMP systems simple scheduler will be used only when all logical
processors share all levels of cache and the number of CPUs is low.
In such systems we do not have to care about cache affinity and
the contention on the lock protecting shared run queue is low. Single
run queue makes load balancing very simple.
2013-10-15 00:29:04 +02:00
Pawel Dziepak
29e65827fd
kernel: Remove possibility to yield to all threads
...
Kernel support for yielding to all (including lower priority) threads
has been removed. POSIX sched_yield() remains unchanged.
If a thread really needs to yield to everyone it can reduce its priority
to the lowest possible and then yield (it will then need to manually
return to its prvious priority upon continuing).
2013-10-09 20:42:34 +02:00
Pawel Dziepak
fee8009184
kernel: Add another penalty for CPU bound threads
...
Each thread has its minimal priority that depends on the static priority.
However, it is still able to starve threads with even lower priority
(e.g. CPU bound threads with lower static priority). To prevent this
another penalty is introduced. When the minimal priority is reached
penalty (count mod minimal_priority) is added, where count is the number
of time slices since the thread reached its minimal priority. This prevents
starvation of lower priorirt threads (since all CPU bound threads may have
their priority temporaily reduced to 1) but preserves relation between
static priorities - when there are two CPU bound threads the one with
higher static priority would get more CPU time.
2013-10-09 20:13:47 +02:00
Pawel Dziepak
4ade765cab
kernel/util: Add heap implementation
2013-10-09 04:26:09 +02:00
Pawel Dziepak
a2bdd2842f
kernel: Add scheduler_op for dumping thread data
2013-10-09 02:08:49 +02:00
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
9363e99b19
kernel: Remove Thread::next_priority
2013-10-08 20:21:35 +02:00
Pawel Dziepak
4cba4ff1df
kernel/util: Use private/kernel/debug.h
2013-10-08 01:36:30 +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
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
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
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
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
François Revol
09d213f3b3
PPC: OF: Make sure kernel args match the U-Boot one
...
Since both platforms can boot the same kernel we must accept either
arg, so we make sure they are identical for now.
TODO: use a union or KMessage maybe?
2013-09-17 15:49:49 +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 8f7f28a7c3db28711920ad5d15df401fae90bcf1 (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
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
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
1eda8517f1
BOpenHashTable: Add IsEmpty()
2013-06-27 21:57:43 +02:00
François Revol
b8ded2f897
Merge branch 'master' into sam460ex
2013-05-27 17:45:55 +02:00
Ingo Weinhold
1848fdc329
util/khash: Add hash_hash_string_part()
2013-05-11 23:17:55 +02:00
Ingo Weinhold
00090d290d
boot loader: print max heap usage info before entering kernel
2013-05-09 03:14:35 +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
Ingo Weinhold
274ca38fd1
BOpenHashTable::Clear(): Set fItemCount to 0
...
If not empty, the count would afterwards be out of sync with reality.
2013-04-27 16:21:41 -04:00