mirror of
https://git.yoctoproject.org/poky
synced 2026-04-21 03:32:12 +02:00
xserver-kdrive: add a patch from git master to reduce scheduling
git-svn-id: https://svn.o-hand.com/repos/poky/trunk@3565 311d38ba-8fff-0310-9ca6-ca027cbcb966
This commit is contained in:
151
meta/packages/xorg-xserver/xserver-kdrive-1.3.0.0/scheduler.patch
vendored
Normal file
151
meta/packages/xorg-xserver/xserver-kdrive-1.3.0.0/scheduler.patch
vendored
Normal file
@@ -0,0 +1,151 @@
|
||||
>From 48e4d08e99de41047c6b6fde5ba9d12787881c23 Mon Sep 17 00:00:00 2001
|
||||
From: root <root@benny.jf.intel.com>
|
||||
Date: Sun, 28 Oct 2007 09:37:52 +0100
|
||||
Subject: [PATCH] The smart scheduler itimer currently always fires after each request
|
||||
(which in turn causes the CPU to wake out of idle, burning precious power).
|
||||
Rather than doing this, just stop the timer before going into the select()
|
||||
portion of the WaitFor loop. It's a cheap system call, and it will only get
|
||||
called if there's no more commands batched up from the active fd.
|
||||
|
||||
This change also allows some of the functions to be simplified; setitimer()
|
||||
will only fail if it's passed invalid data, and we don't do that... so make
|
||||
it void and remove all the conditional code that deals with failure.
|
||||
|
||||
The change also allows us to remove a few variables that were used for
|
||||
housekeeping between the signal handler and the main loop.
|
||||
---
|
||||
include/dixstruct.h | 6 ++----
|
||||
os/WaitFor.c | 11 +++--------
|
||||
os/utils.c | 28 +++-------------------------
|
||||
3 files changed, 8 insertions(+), 37 deletions(-)
|
||||
|
||||
diff --git a/include/dixstruct.h b/include/dixstruct.h
|
||||
index dd6347f..bed31dc 100644
|
||||
--- a/include/dixstruct.h
|
||||
+++ b/include/dixstruct.h
|
||||
@@ -150,11 +150,9 @@ extern long SmartScheduleTime;
|
||||
extern long SmartScheduleInterval;
|
||||
extern long SmartScheduleSlice;
|
||||
extern long SmartScheduleMaxSlice;
|
||||
-extern unsigned long SmartScheduleIdleCount;
|
||||
extern Bool SmartScheduleDisable;
|
||||
-extern Bool SmartScheduleIdle;
|
||||
-extern Bool SmartScheduleTimerStopped;
|
||||
-extern Bool SmartScheduleStartTimer(void);
|
||||
+extern void SmartScheduleStartTimer(void);
|
||||
+extern void SmartScheduleStopTimer(void);
|
||||
#define SMART_MAX_PRIORITY (20)
|
||||
#define SMART_MIN_PRIORITY (-20)
|
||||
|
||||
diff --git a/os/WaitFor.c b/os/WaitFor.c
|
||||
index ec1592c..7683477 100644
|
||||
--- a/os/WaitFor.c
|
||||
+++ b/os/WaitFor.c
|
||||
@@ -217,7 +217,8 @@ WaitForSomething(int *pClientsReady)
|
||||
XFD_COPYSET(&AllSockets, &LastSelectMask);
|
||||
#ifdef SMART_SCHEDULE
|
||||
}
|
||||
- SmartScheduleIdle = TRUE;
|
||||
+ SmartScheduleStopTimer ();
|
||||
+
|
||||
#endif
|
||||
BlockHandler((pointer)&wt, (pointer)&LastSelectMask);
|
||||
if (NewOutputPending)
|
||||
@@ -237,13 +238,7 @@ WaitForSomething(int *pClientsReady)
|
||||
selecterr = GetErrno();
|
||||
WakeupHandler(i, (pointer)&LastSelectMask);
|
||||
#ifdef SMART_SCHEDULE
|
||||
- if (i >= 0)
|
||||
- {
|
||||
- SmartScheduleIdle = FALSE;
|
||||
- SmartScheduleIdleCount = 0;
|
||||
- if (SmartScheduleTimerStopped)
|
||||
- (void) SmartScheduleStartTimer ();
|
||||
- }
|
||||
+ SmartScheduleStartTimer ();
|
||||
#endif
|
||||
if (i <= 0) /* An error or timeout occurred */
|
||||
{
|
||||
diff --git a/os/utils.c b/os/utils.c
|
||||
index 31cb0af..6fc1f7d 100644
|
||||
--- a/os/utils.c
|
||||
+++ b/os/utils.c
|
||||
@@ -1513,10 +1513,6 @@ XNFstrdup(const char *s)
|
||||
|
||||
#ifdef SMART_SCHEDULE
|
||||
|
||||
-unsigned long SmartScheduleIdleCount;
|
||||
-Bool SmartScheduleIdle;
|
||||
-Bool SmartScheduleTimerStopped;
|
||||
-
|
||||
#ifdef SIGVTALRM
|
||||
#define SMART_SCHEDULE_POSSIBLE
|
||||
#endif
|
||||
@@ -1526,7 +1522,7 @@ Bool SmartScheduleTimerStopped;
|
||||
#define SMART_SCHEDULE_TIMER ITIMER_REAL
|
||||
#endif
|
||||
|
||||
-static void
|
||||
+void
|
||||
SmartScheduleStopTimer (void)
|
||||
{
|
||||
#ifdef SMART_SCHEDULE_POSSIBLE
|
||||
@@ -1537,38 +1533,28 @@ SmartScheduleStopTimer (void)
|
||||
timer.it_value.tv_sec = 0;
|
||||
timer.it_value.tv_usec = 0;
|
||||
(void) setitimer (ITIMER_REAL, &timer, 0);
|
||||
- SmartScheduleTimerStopped = TRUE;
|
||||
#endif
|
||||
}
|
||||
|
||||
-Bool
|
||||
+void
|
||||
SmartScheduleStartTimer (void)
|
||||
{
|
||||
#ifdef SMART_SCHEDULE_POSSIBLE
|
||||
struct itimerval timer;
|
||||
|
||||
- SmartScheduleTimerStopped = FALSE;
|
||||
timer.it_interval.tv_sec = 0;
|
||||
timer.it_interval.tv_usec = SmartScheduleInterval * 1000;
|
||||
timer.it_value.tv_sec = 0;
|
||||
timer.it_value.tv_usec = SmartScheduleInterval * 1000;
|
||||
- return setitimer (ITIMER_REAL, &timer, 0) >= 0;
|
||||
+ setitimer (ITIMER_REAL, &timer, 0);
|
||||
#endif
|
||||
- return FALSE;
|
||||
}
|
||||
|
||||
#ifdef SMART_SCHEDULE_POSSIBLE
|
||||
static void
|
||||
SmartScheduleTimer (int sig)
|
||||
{
|
||||
- int olderrno = errno;
|
||||
-
|
||||
SmartScheduleTime += SmartScheduleInterval;
|
||||
- if (SmartScheduleIdle)
|
||||
- {
|
||||
- SmartScheduleStopTimer ();
|
||||
- }
|
||||
- errno = olderrno;
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -1592,14 +1578,6 @@ SmartScheduleInit (void)
|
||||
perror ("sigaction for smart scheduler");
|
||||
return FALSE;
|
||||
}
|
||||
- /* Set up the virtual timer */
|
||||
- if (!SmartScheduleStartTimer ())
|
||||
- {
|
||||
- perror ("scheduling timer");
|
||||
- return FALSE;
|
||||
- }
|
||||
- /* stop the timer and wait for WaitForSomething to start it */
|
||||
- SmartScheduleStopTimer ();
|
||||
return TRUE;
|
||||
#else
|
||||
return FALSE;
|
||||
--
|
||||
1.5.3.4
|
||||
|
||||
@@ -3,7 +3,7 @@ require xserver-kdrive.inc
|
||||
DEPENDS += "libxkbfile libxcalibrate"
|
||||
|
||||
PE = "1"
|
||||
PR = "r17"
|
||||
PR = "r18"
|
||||
|
||||
SRC_URI = "${XORG_MIRROR}/individual/xserver/xorg-server-${PV}.tar.bz2 \
|
||||
file://extra-kmodes.patch;patch=1 \
|
||||
@@ -19,6 +19,7 @@ SRC_URI = "${XORG_MIRROR}/individual/xserver/xorg-server-${PV}.tar.bz2 \
|
||||
file://enable-tslib.patch;patch=1 \
|
||||
file://enable-xcalibrate.patch;patch=1 \
|
||||
file://hide-cursor-and-ppm-root.patch;patch=1 \
|
||||
file://xcalibrate_coords.patch;patch=1"
|
||||
file://xcalibrate_coords.patch;patch=1 \
|
||||
file://scheduler.patch;patch=1"
|
||||
|
||||
S = "${WORKDIR}/xorg-server-${PV}"
|
||||
|
||||
Reference in New Issue
Block a user