History log of /haiku/src/system/kernel/int.cpp
Revision Date Author Comments
# 02463fb4 05-Mar-2024 X512 <danger_mail@list.ru>

kernel/int: consolidate interrupt vector number to `int32`

This is no-op for 32 bit platforms because `int32` is defined as `long` there.

Change interrupt vector number from 64 bits to 32 bits for 64 bit platforms.

Change-Id: I52d1ad616cab16488804e9733c7afaf772a670ba
Reviewed-on: https://review.haiku-os.org/c/haiku/+/7507
Tested-by: Commit checker robot <no-reply+buildbot@haiku-os.org>
Reviewed-by: Alex von Gluck IV <kallisti5@unixzen.com>


# eb26002b 03-Jun-2022 Augustin Cavalier <waddlesplash@gmail.com>

kernel/util: Remove kqueue.h.

It is not used anymore, and we have more advanced queuing facilities now.


# 3d01655a 09-Mar-2022 Augustin Cavalier <waddlesplash@gmail.com>

kernel/int: Remove now-unneded ifdef __riscv.

Following the rework to permit arch_int_assign_cpu to change what
CPU an interrupt is assigned to, this ifdef is no longer needed.


# 8ca0f03d 08-Nov-2021 X512 <danger_mail@list.ru>

riscv64/smp: Implement multi-processor support

* Working under qemu smp 1,2+
* Working on SiFive Unmatched
* x86_64 efi not broken by smp_boot_other_cpus change

Change-Id: I32ebc17913e46ed082be9ade8f56448bbf12f16e
Reviewed-on: https://review.haiku-os.org/c/haiku/+/4705
Tested-by: Commit checker robot <no-reply+buildbot@haiku-os.org>
Reviewed-by: Alex von Gluck IV <kallisti5@unixzen.com>


# 3c259739 01-Dec-2021 Augustin Cavalier <waddlesplash@gmail.com>

kernel/int: Allow arch_int_assign_to_cpu to make its own decisions.

For now this is used on RISCV64 to indicate that interrupts will always
be on CPU 0. However, in the future, some architectures may want
or require interrupts to be "steered" in various ways, and this
also paves the way for that.

Change-Id: Iec79870cf5c4898d102d0e624de19602271ae772
Reviewed-on: https://review.haiku-os.org/c/haiku/+/4721
Reviewed-by: waddlesplash <waddlesplash@gmail.com>
Reviewed-by: Alex von Gluck IV <kallisti5@unixzen.com>
Tested-by: Commit checker robot <no-reply+buildbot@haiku-os.org>


# 75b8b686 31-Jul-2020 Michael Lotz <mmlr@mlotz.ch>

kernel: Return after panic when freeing invalid interrupt range.

The panic is continuable, but moving on with the free will overrun the
array and corrupt memory.

Change-Id: I9a5849a40158042150a25740ca57d711aee872bf
Reviewed-on: https://review.haiku-os.org/c/haiku/+/3114
Reviewed-by: waddlesplash <waddlesplash@gmail.com>


# 4b6a48f4 31-Jul-2020 Michael Lotz <mmlr@mlotz.ch>

kernel: Check interrupt vector isn't assigned to a CPU on free.

If the vector is assigned to a CPU it means that the assignment
structure is still referenced from the CPU side and must not be reset.

This can happen when an interrupt vector is freed that still has a
handler installed, i.e. when the order of removing the handler and
freeing the vector is reversed.

Change-Id: Ib2dc5fa8f95a28b36e8f150dc8f16236ca4b2275
Reviewed-on: https://review.haiku-os.org/c/haiku/+/3113
Reviewed-by: waddlesplash <waddlesplash@gmail.com>


# a2634874 08-Jan-2014 Pawel Dziepak <pdziepak@quarnos.org>

scheduler: Estimate the load thread is able to produce

Previous implementation based on the actual load of each core and share
each thread has in that load turned up to be very problematic when
balancing load on very heavily loaded systems (i.e. more threads
consuming all available CPU time than there is logical CPUs).

The new approach is to estimate how much load would a thread produce
if it had all CPU time only for itself. Summing such load estimations
of each thread assigned to a given core we get a rank that contains
much more information than just simple actual core load.


# c2a02dee 06-Jan-2014 Pawel Dziepak <pdziepak@quarnos.org>

kernel: Relax cpu_ent::interrupt_time locking

The value isn't accessed by the other CPUs and all writes and reads are
done with interrupts disabled.


# 66395144 19-Dec-2013 Pawel Dziepak <pdziepak@quarnos.org>

x86[_64]: Support assigning MSI IRQs to arbitrary CPU


# 4fcbac58 17-Dec-2013 Pawel Dziepak <pdziepak@quarnos.org>

kernel: Make get_cpu_topology() return a pointer to const

The client code is not supposed to change the topology info.
It would be also nice if cpu_topology_node::children was an array of
pointers to const but that would require several const_casts in the
topology tree generation code so it's probably not worth it.


# 13a89839 24-Nov-2013 Pawel Dziepak <pdziepak@quarnos.org>

scheduler: Fix power saving mode and other minor improvements


# 03f7d3d1 24-Nov-2013 Pawel Dziepak <pdziepak@quarnos.org>

kernel: Restore logical processor disabling


# f14e4567 17-Nov-2013 Pawel Dziepak <pdziepak@quarnos.org>

kernel: Use CPU topology to distribute IRQs


# d897a478 17-Nov-2013 Pawel Dziepak <pdziepak@quarnos.org>

kernel: Allow reassigning IRQs to logical processors


# 955c7ede 17-Nov-2013 Pawel Dziepak <pdziepak@quarnos.org>

kernel: Measure time spent in interrupt handlers


# 6a164daa 17-Nov-2013 Pawel Dziepak <pdziepak@quarnos.org>

kernel: Track load produced by interrupt handlers


# 86340fce 09-Jul-2013 Jérôme Duval <jerome.duval@gmail.com>

kernel/int.cpp: typo fix


# 294711f9 27-Jun-2012 Alex Smith <alex@alex-smith.me.uk>

Changed {,u}int64 to be long rather than long long on x86_64.


# 0e88a887 13-Jun-2012 Alex Smith <alex@alex-smith.me.uk>

First round of 64-bit safety fixes in the kernel.

* Most of this is incorrect printf format strings. Changed all strings
causing errors to use the B_PRI* format string definitions, which
means the strings should be correct across all platforms.
* Some other fixes for errors, casts required, etc.


# 0e35d5d2 12-Dec-2011 John Scipione <jscipione@gmail.com>

Change instances of wether in comments to whether. No functional change intended.


# fc2d7cb0 12-Oct-2011 Michael Lotz <mmlr@mlotz.ch>

* Introduce {reserve|allocate|free}_io_interrupt_vectors() that can generically
be used to mark certain io interrupt vectors as reserved and to allocate from
the still free ones. It is a kernel private API for now though.
* Make the MSI code use that functionality instead of implementing its own which
slims it down considerably and also removes quite a bit of hardcoded knowledge
about the interrupt layout that didn't really belong there.
* Mark the various in-use interrupts as reserved from the components that
actually know about them (PIC, IO-APIC, SMP, APIC timer and interrupt setup).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@42832 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 9de17be6 14-Apr-2010 Axel Dörfler <axeld@pinc-software.de>

* Moved I/O APIC initialization to a later point, now the APCI and DPC modules
can safely be used.
* Since using the I/O APIC is disabled by default, I've removed the "return"
that prevented its use when enabled. Let's see if it already does anything.
* Adapted other arch_int.cpp with a bit of cleanup.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36290 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 0338371f 13-Dec-2009 Ingo Weinhold <ingo_weinhold@gmx.de>

* All scheduler implementations:
- enqueue_in_run_queue() no longer returns whether rescheduling is supposed
to happen. Instead is sets cpu_ent::invoke_scheduler on the current CPU.
- reschedule() does now handle cpu_ent::invoke_scheduler_if_idle(). No need
to let all callers do that.
* thread_unblock[_locked]() no longer return whether rescheduling is supposed
to happen.
* Got rid of the B_INVOKE_SCHEDULER handling. The interrupt hooks really
can't know, when it makes sense to reschedule or not.
* Introduced scheduler_reschedule_if_necessary[_locked]() functions for
checking+invoking the scheduler.
* Some semaphore functions (e.g. delete_sem()) invoke the scheduler now, if
they wake up anything with greater priority.
I've also tried to add scheduler invocations in the condition variable and
mutex/rw_lock code, but that actually has a negative impact on performance,
probably because it causes too much ping-ponging between threads when
multiple locking primitives are involved.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@34657 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 2388f50c 10-Dec-2009 Axel Dörfler <axeld@pinc-software.de>

* The io_handler::handled_count was increased unconditionally, but in some cases
not at all.
* Tried to improve the readability of the "ints" command output.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@34613 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 939b3801 02-Dec-2009 Axel Dörfler <axeld@pinc-software.de>

* Add info if the B_NO_HANDLED_INFO flag is set in the "ints" KDL command.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@34448 a95241bf-73f2-0310-859d-f6bbb57e9c96


# bd185b41 01-Dec-2009 Ingo Weinhold <ingo_weinhold@gmx.de>

*.c -> *.cpp


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@34417 a95241bf-73f2-0310-859d-f6bbb57e9c96


# a2634874ed5e33a36fe83c272614e2042fafde1d 08-Jan-2014 Pawel Dziepak <pdziepak@quarnos.org>

scheduler: Estimate the load thread is able to produce

Previous implementation based on the actual load of each core and share
each thread has in that load turned up to be very problematic when
balancing load on very heavily loaded systems (i.e. more threads
consuming all available CPU time than there is logical CPUs).

The new approach is to estimate how much load would a thread produce
if it had all CPU time only for itself. Summing such load estimations
of each thread assigned to a given core we get a rank that contains
much more information than just simple actual core load.


# c2a02dee65184026ea953726a9ab1bac1c0a4617 06-Jan-2014 Pawel Dziepak <pdziepak@quarnos.org>

kernel: Relax cpu_ent::interrupt_time locking

The value isn't accessed by the other CPUs and all writes and reads are
done with interrupts disabled.


# 663951443784bb63d60abe742f1d1379fb153e18 19-Dec-2013 Pawel Dziepak <pdziepak@quarnos.org>

x86[_64]: Support assigning MSI IRQs to arbitrary CPU


# 4fcbac58de122ff3313cb0bfe9115314d28bf219 17-Dec-2013 Pawel Dziepak <pdziepak@quarnos.org>

kernel: Make get_cpu_topology() return a pointer to const

The client code is not supposed to change the topology info.
It would be also nice if cpu_topology_node::children was an array of
pointers to const but that would require several const_casts in the
topology tree generation code so it's probably not worth it.


# 13a89839fc09fea7d328568ddb76d8369ce2839d 24-Nov-2013 Pawel Dziepak <pdziepak@quarnos.org>

scheduler: Fix power saving mode and other minor improvements


# 03f7d3d1db10c0a467bea944fb3230ee70c6e015 24-Nov-2013 Pawel Dziepak <pdziepak@quarnos.org>

kernel: Restore logical processor disabling


# f14e4567e81270bf6ddf1a3abfef662885763e3d 17-Nov-2013 Pawel Dziepak <pdziepak@quarnos.org>

kernel: Use CPU topology to distribute IRQs


# d897a478d7c01054aad29b23f7f545073c797530 17-Nov-2013 Pawel Dziepak <pdziepak@quarnos.org>

kernel: Allow reassigning IRQs to logical processors


# 955c7edec2e0d6f52e5245ce449804cede5de34b 17-Nov-2013 Pawel Dziepak <pdziepak@quarnos.org>

kernel: Measure time spent in interrupt handlers


# 6a164daad43169daf0a407fb1f6b0484671ff466 17-Nov-2013 Pawel Dziepak <pdziepak@quarnos.org>

kernel: Track load produced by interrupt handlers


# 86340fcef302ddfcabd57f1fc21e23371ff69bd8 09-Jul-2013 Jérôme Duval <jerome.duval@gmail.com>

kernel/int.cpp: typo fix


# 294711f98c107cf2d9d05b7fc34cd863e87bd358 27-Jun-2012 Alex Smith <alex@alex-smith.me.uk>

Changed {,u}int64 to be long rather than long long on x86_64.


# 0e88a887b4a9ecaaf1062078d9ca9bfca78fcf3a 13-Jun-2012 Alex Smith <alex@alex-smith.me.uk>

First round of 64-bit safety fixes in the kernel.

* Most of this is incorrect printf format strings. Changed all strings
causing errors to use the B_PRI* format string definitions, which
means the strings should be correct across all platforms.
* Some other fixes for errors, casts required, etc.


# 0e35d5d2e5ef3d288e056d60ef1b16dc399eaa0c 12-Dec-2011 John Scipione <jscipione@gmail.com>

Change instances of wether in comments to whether. No functional change intended.


# fc2d7cb04d7ad78424169fd0df4d236de2bb17d1 12-Oct-2011 Michael Lotz <mmlr@mlotz.ch>

* Introduce {reserve|allocate|free}_io_interrupt_vectors() that can generically
be used to mark certain io interrupt vectors as reserved and to allocate from
the still free ones. It is a kernel private API for now though.
* Make the MSI code use that functionality instead of implementing its own which
slims it down considerably and also removes quite a bit of hardcoded knowledge
about the interrupt layout that didn't really belong there.
* Mark the various in-use interrupts as reserved from the components that
actually know about them (PIC, IO-APIC, SMP, APIC timer and interrupt setup).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@42832 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 9de17be600220db91400c27772b19546284f470f 14-Apr-2010 Axel Dörfler <axeld@pinc-software.de>

* Moved I/O APIC initialization to a later point, now the APCI and DPC modules
can safely be used.
* Since using the I/O APIC is disabled by default, I've removed the "return"
that prevented its use when enabled. Let's see if it already does anything.
* Adapted other arch_int.cpp with a bit of cleanup.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36290 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 0338371f26864c2a248b1ea53b9fe78c884af7f2 13-Dec-2009 Ingo Weinhold <ingo_weinhold@gmx.de>

* All scheduler implementations:
- enqueue_in_run_queue() no longer returns whether rescheduling is supposed
to happen. Instead is sets cpu_ent::invoke_scheduler on the current CPU.
- reschedule() does now handle cpu_ent::invoke_scheduler_if_idle(). No need
to let all callers do that.
* thread_unblock[_locked]() no longer return whether rescheduling is supposed
to happen.
* Got rid of the B_INVOKE_SCHEDULER handling. The interrupt hooks really
can't know, when it makes sense to reschedule or not.
* Introduced scheduler_reschedule_if_necessary[_locked]() functions for
checking+invoking the scheduler.
* Some semaphore functions (e.g. delete_sem()) invoke the scheduler now, if
they wake up anything with greater priority.
I've also tried to add scheduler invocations in the condition variable and
mutex/rw_lock code, but that actually has a negative impact on performance,
probably because it causes too much ping-ponging between threads when
multiple locking primitives are involved.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@34657 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 2388f50c53422ea8e05382e3109883d1c3327313 10-Dec-2009 Axel Dörfler <axeld@pinc-software.de>

* The io_handler::handled_count was increased unconditionally, but in some cases
not at all.
* Tried to improve the readability of the "ints" command output.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@34613 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 939b3801eafc087b76833f4787fa0bcbc436b32c 02-Dec-2009 Axel Dörfler <axeld@pinc-software.de>

* Add info if the B_NO_HANDLED_INFO flag is set in the "ints" KDL command.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@34448 a95241bf-73f2-0310-859d-f6bbb57e9c96


# bd185b4117e06c1674c4d214abc3917acedc560d 01-Dec-2009 Ingo Weinhold <ingo_weinhold@gmx.de>

*.c -> *.cpp


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@34417 a95241bf-73f2-0310-859d-f6bbb57e9c96