summaryrefslogtreecommitdiff
path: root/firmware/thread.c
diff options
context:
space:
mode:
authorMichael Sevakis <jethead71@rockbox.org>2008-06-03 04:23:09 +0000
committerMichael Sevakis <jethead71@rockbox.org>2008-06-03 04:23:09 +0000
commit606d9d0c83f8396fa418fa16a23da68aa2e4d784 (patch)
tree462d8195b73f3f5e9d995bbadea2d46eab3fc483 /firmware/thread.c
parent0d83a188cc70ba8e474f165aa7515786c72db708 (diff)
downloadrockbox-606d9d0c83f8396fa418fa16a23da68aa2e4d784.zip
rockbox-606d9d0c83f8396fa418fa16a23da68aa2e4d784.tar.gz
rockbox-606d9d0c83f8396fa418fa16a23da68aa2e4d784.tar.bz2
rockbox-606d9d0c83f8396fa418fa16a23da68aa2e4d784.tar.xz
Reinstate the awful ATA hack that has no proper reason to exist for iPod 5.5g 60GB and/or 80GB.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@17682 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'firmware/thread.c')
-rw-r--r--firmware/thread.c14
1 files changed, 12 insertions, 2 deletions
diff --git a/firmware/thread.c b/firmware/thread.c
index 71656e1..0f42731 100644
--- a/firmware/thread.c
+++ b/firmware/thread.c
@@ -161,6 +161,13 @@ void switch_thread(void)
* Processor-specific section
*/
+#if defined(MAX_PHYS_SECTOR_SIZE) && MEM == 64
+/* Support a special workaround object for large-sector disks */
+#define IF_NO_SKIP_YIELD(...) __VA_ARGS__
+#else
+#define IF_NO_SKIP_YIELD(...)
+#endif
+
#if defined(CPU_ARM)
/*---------------------------------------------------------------------------
* Start the thread running and terminate it if it returns
@@ -1945,8 +1952,9 @@ void switch_thread(void)
#endif
#ifdef HAVE_PRIORITY_SCHEDULING
+ IF_NO_SKIP_YIELD( if (thread->skip_count != -1) )
/* Reset the value of thread's skip count */
- thread->skip_count = 0;
+ thread->skip_count = 0;
#endif
for (;;)
@@ -2002,6 +2010,7 @@ void switch_thread(void)
* priority threads are runnable. The highest priority runnable
* thread(s) are never skipped. */
if (priority <= max ||
+ IF_NO_SKIP_YIELD( thread->skip_count == -1 || )
(diff = priority - max, ++thread->skip_count > diff*diff))
{
cores[core].running = thread;
@@ -2146,7 +2155,8 @@ unsigned int wakeup_thread(struct thread_entry **list)
if (bl == NULL)
{
/* No inheritance - just boost the thread by aging */
- thread->skip_count = thread->priority;
+ IF_NO_SKIP_YIELD( if (thread->skip_count != -1) )
+ thread->skip_count = thread->priority;
current = cores[CURRENT_CORE].running;
}
else