diff packages/kernel/current/ChangeLog @ 177:4c750ce71ae3

Merge from eCos master repository on 2001-08-10-19:22:57-BST
author jlarmour
date Fri, 10 Aug 2001 19:27:55 +0000
parents 38892b97b685
children aa8364213009
line wrap: on
line diff
--- a/packages/kernel/current/ChangeLog
+++ b/packages/kernel/current/ChangeLog
@@ -1,3 +1,303 @@
+2001-08-06  Hugo Tyson  <hmt@redhat.com>
+
+	* src/sched/sched.cxx (unlock_inner): Fix assignment to current,
+	wouldn't build if stack checking after merger from SMP branch.
+
+2001-08-06  Andrew Lunn   <andrew.lunn@ascom.ch>
+2001-08-06  Hugo Tyson  <hmt@redhat.com>
+
+	* src/sync/mutex.cxx: (set_protocol) Added a function to set the
+	priority inversion protocol for a mutex.
+
+	* src/common/kapi.cxx: Export the new function above and
+	set_ceiling into the C API.
+	
+	* include/mutex.hxx (class Cyg_Mutex): New member function
+	set_protocol().
+
+	* include/kapi.h (cyg_protcol): Define new emumeration for mutex
+	priority protocol setting, and headers for the new function to set
+	it.
+
+2001-08-03  Nick Garnett  <nickg@redhat.com>
+
+	Imported from a development branch:
+	
+	2001-07-11  Nick Garnett  <nickg@redhat.com>
+
+		* src/sched/mlqueue.cxx: Changed behaviour of
+		set_need_reschedule() to a better implementation of the intended
+		algorithm.
+
+		* include/kapi.h: 
+		* src/common/kapi.cxx:
+		Added API for controlling routing of interrupts to CPUs in SMP
+		configurations.
+
+	2001-07-03  Nick Garnett  <nickg@cygnus.co.uk>
+
+		* cdl/scheduler.cdl:
+		* include/bitmap.hxx:
+		* src/sched/bitmap.cxx:
+		Fixed up bitmap scheduler so it still works within the
+		SMP-modified scheduling infrastructure. The bitmap scheduler
+		is not currently SMP-enabled, only single CPU configurations are
+		supported - hence the CDL change to require this.
+
+	2001-06-29  Nick Garnett  <nickg@cygnus.co.uk>
+
+		* src/sched/sched.cxx:
+		Removed the call to Cyg_Interrupt::enable_interrupts() in
+		Cyg_Scheduler::start_cpu(). This was a relic from the days when
+		the interrupt enable state was not part of the thread state. Now
+		it is, and loading the first thread will cause interrupts to be
+		enabled.
+
+		* src/intr/intr.cxx:
+		Changed initial values of Cyg_Interrupt::disable_counter[]s to
+		zero as a result of the change in Cyg_Scheduler::start_cpu().
+
+		* include/kapi.h:
+		* include/kapidata.h:
+		* src/common/kapi.cxx: 
+		Added API for using spinlocks. Largely so that it may be extended
+		to the driver API.
+
+		* include/mlqueue.hxx:
+		* include/intr.hxx:
+		* include/sched.hxx:
+		Added annotations to various static variables.
+
+	2001-06-28  Nick Garnett  <nickg@cygnus.co.uk>
+
+		* include/intr.hxx:
+		* src/intr/intr.cxx:
+		Changed behaviour of Cyg_Interrupt::disable_interrupts() and
+		Cyg_Interrupt::enable_interrupts(). These now claim and release a
+		spinlock in addition to disabling and enabling interrupts. The
+		original interrupt state is also preserved and restored. This is
+		necessary in SMP systems to allow drivers etc. to correctly
+		synchronize with threads and DSRs that may be running on different
+		CPUs. In the single CPU case this mechanism reduces to the
+		original simple interrupt disable code.
+		[Later change] Backed off addition of volatile modifier to
+		interrupt_disable_state.
+
+		* include/smp.hxx: Some minor tidies.
+
+	2001-06-27  Nick Garnett  <nickg@cygnus.co.uk>
+
+		* tests/release.cxx: Added spin loop in thread1 to allow thread0
+		to execute its wait. This is necessary in SMP systems where the
+		threads will execute in parallel, but is also benign in single CPU
+		systems.
+
+		* tests/mutex2.cxx:
+		* tests/mutex3.cxx:
+		* tests/sync3.cxx: 
+		* tests/thread2.cxx: 
+		These tests depend on predicting the behaviour of threads at
+		different priorities to pass. In an SMP system, several threads
+		will run in parallel, and the execution order will not be as
+		expected. These tests are therefore disabled in SMP
+		configurations.
+
+		* src/sched/mlqueue.cxx (add_thread): Moved call to
+		set_need_reschedule() out of test for empty queue. In SMP systems,
+		any addition to a queue may require a reschedule on another CPU.
+
+	2001-06-22  Nick Garnett  <nickg@cygnus.co.uk>
+
+		* include/mlqueue.hxx:
+		* src/sched/mlqueue.cxx:
+		A major change to the way in which this scheduler works in SMP
+		systems. The previous version removed all runnable threads from
+		the run queues when they were executing. This resulted in serious
+		complications and messy code, particularly when dealing with
+		priority changes and timeslicing. The new version keeps running
+		threads in the run queues, just like the single-CPU version. The
+		main disadvantage of this is that we may have to search past
+		threads running on other CPUs before we find one available to run
+		on this CPU. However, the pending count array and map mean that we
+		only need search one run queue, and in any case the search remains
+		bounded by the number of CPUs available.
+		Another change is in the way that timeslicing is handled. Now, the
+		CPU that takes the clock interrupt decrements the timeslice counts
+		for all CPUs and if any go zero, sends a TIMESLICE message to
+		that CPU.
+
+		* src/sched/sched.cxx (unlock_inner):
+		Removed call to requeue(), no longer needed as a result of
+		scheduler reorganization.
+
+		* src/common/thread.cxx:
+		Added test in Cyg_Thread::exit() to check that the thread has not
+		already been killed. This is only an issue if the thread is
+		calling exit() when it is kill()ed from another CPU. The test is
+		redundant in single-CPU systems, but it does no harm having it.
+		Added code to Cyg_Thread::set_priority() to check for reschedule
+		when another thread is being changed in priority.
+		Added call in idle thread constructor to scheduler to install the
+		idle thread as the default current thread for a CPU.
+
+		* include/smp.hxx:
+		Added CYG_KERNEL_CPU_TIMESLICE_INTERRUPT(), did some miscellaneous
+		tidying.
+
+		* include/instrmnt.h: Added SMP_RESCHED_SEND and SMP_RESCHED_RECV
+		events.
+
+		* cdl/kernel.cdl: Added smp test program.
+
+		* tests/smp.cxx: Added this program to test SMP functionality.
+
+	2001-06-13  Nick Garnett  <nickg@cygnus.co.uk>
+
+		* src/sched/sched.cxx:
+		Removed code to set up initial current thread, this is now done
+		in the idle thread constructor.
+		Added code here to set up interrupts for SMP inter-processor
+		interrupts. This is not very tidy and may need to be
+		changed in the future.
+
+		* src/sched/mlqueue.cxx:
+		Added local set_need_reschedule() function to set the
+		need_reschedule flag on a suitable CPU.
+		Many more changes to cope with SMP systems.
+		NOTE: This code has all become somthing of a mess, it need to be
+		tidied up and the SMP-specific changes integrated better into the
+		code. Also, timesliceing currently only works on the CPU that
+		takes clock interrupts - this needs fixing.
+
+		* src/common/thread.cxx:
+		Moved assignment of initial current thread to here from sched.cxx.
+
+		* include/smp.hxx:
+		Changed CYG_KERNEL_CPU_INTERRUPT()
+		CYG_KERNEL_CPU_RESCHEDULE_INTERRUPT() since there may be other
+		interrupt types to worry about.
+		Added annotations to scheduler data items.
+
+		* include/sched.hxx:
+		Split set_current_thread() into two functions, the original works
+		only on the current CPU, the new one sets another CPU's current
+		thread. This latter function is only used to prime the current
+		threads during initialization.
+		Added second need_reschedule() function that takes a thread
+		argument. This is intended to be overridden by a scheduler
+		specific function that sets the need_reschedule flag if the
+		supplied thread is more deserving of CPU time that any current
+		thread.
+
+		* include/mlqueue.hxx:
+		Made cyg_scheduler_set_need_reschedule() a friend of
+		Cyg_Scheduler_Implementation class.
+		Added override set_need_reschedule() functions.
+
+		* include/kapidata.h: Added cpu field to cyg_thread structure when
+		in SMP systems.
+
+		* include/intr.hxx:
+		* src/intr/intr.cxx:
+		Added Cyg_Interrupt::set_cpu() and Cyg_Interrupt::get_cpu() for
+		SMP systems.
+
+		* include/instrmnt.h: Added events for INTR_GET_CPU and
+		INTR_SET_CPU.
+
+	2001-05-29  Nick Garnett  <nickg@cygnus.co.uk>
+
+		The following changes were all imported from the SMP branch:
+
+		* tests/tm_basic.cxx:
+		Modified to work in SMP configuration - mostly at present by
+		ifdeffing out code I didn't want to fix.
+
+		* include/sched.hxx:
+		Moved scheduler lock operation into Cyg_Scheduler_SchedLock class.
+		Converted current_thread, need_reschedule, and thread_switches
+		into CPU indexed arrays. Added member functions to get and set
+		these indirectly.
+		Added start_cpu() to do per-CPU scheduler startup.
+
+		* include/sched.inl:
+		Converted scheduler lock/unlock functions to use new schedlock
+		class.
+
+		* src/sched/sched.cxx:
+		Changed in line with sched.hxx.
+		Added call to requeue() in unlock_inner() to restore current
+		thread to run queue if necessary.	
+		Moved most of scheduler startup to Cyg_Scheduler::start_cpu().
+		Cyg_Scheduler::start() now also starts secondary CPUs in SMP
+		systems.
+		Added cyg_kernel_smp_startup() as entry point from HAL into kernel
+		for secondary CPUs.
+
+		* include/mlqueue.hxx:
+		Added Cyg_RunQueue type and removed
+		Cyg_SchedulerThreadQueue_Implementation type.
+		Converted timeslice_count to CPU indexed array.
+		Added requeue() member function to scheduler class.
+		Added cpu member to thread implementation class, to record
+		thread's current CPU.
+
+		* src/sched/mlqueue.cxx:
+		Changed behaviour when in SMP system to remove scheduled thread
+		from run queue and replace it when preempted.
+		Added some extra asserts, and removed some that are no longer true
+		in an SMP system.
+
+		* src/instrmnt/meminst.cxx: In SMP systems: added spinlock to
+		protect instrument buffer, added CPU Id in top 4 bits of thread Id
+		field.
+
+		* src/common/thread.cxx:
+		Converted to use accessor functions for need_reschedule and
+		current_thread.
+		Rearranged idle thread creation to create one for each CPU.
+
+		* include/test/stackmon.h: Extended to handle stack usage for
+		multiple idle threads.
+
+		* include/thread.inl:
+		Added some extra instrumentation.
+
+		* include/smp.hxx:
+		Added this file to contain all kernel SMP support. The main
+		definitions exported by this file are spin lock and scheduler lock
+		implementation classes, for both SMP and uniprocessor
+		configurations.
+
+		* src/intr/intr.cxx: 
+		* include/intr.hxx:
+		Converted interrupt disable counter to CPU indexed array. In
+		intr.cxx: added lock of scheduler lock in interrupt_end() rather
+		than in default interrupt VSR.
+
+		* cdl/kernel.cdl: Added option to enable SMP support.
+
+		* include/instrmnt.h: 
+		* cdl/instrument.cdl: Added SMP instrumentation.
+
+	2001-05-25  Nick Garnett  <nickg@cygnus.co.uk>
+
+		* include/intr.hxx:
+		* src/intr/intr.cxx: 
+		Added default definition of CYGNUM_HAL_ISR_TABLE_SIZE. This is now
+		used to declare the chain table so that architectures which have
+		different sizes for the interrupt table and vector count will work
+		correctly.
+
+	2001-05-22  Nick Garnett  <nickg@cygnus.co.uk>
+
+		* include/sched.hxx (class Cyg_Scheduler_Base):
+		Added annotation to sched_lock.
+
+		* cdl/instrument.cdl:
+		Rename CYGNUM_KERNEL_INSTRUMENT_BUFFER_WRAP to
+		CYGDBG_KERNEL_INSTRUMENT_BUFFER_WRAP as it appears in the code.
+
 2001-07-27  Jesper Skov  <jskov@redhat.com>
 
 	* src/intr/intr.cxx (chain_isr): Return isr_ret so caller (which