mirror of
https://git.yoctoproject.org/poky
synced 2026-09-14 21:49:33 +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"
|
DEPENDS += "libxkbfile libxcalibrate"
|
||||||
|
|
||||||
PE = "1"
|
PE = "1"
|
||||||
PR = "r17"
|
PR = "r18"
|
||||||
|
|
||||||
SRC_URI = "${XORG_MIRROR}/individual/xserver/xorg-server-${PV}.tar.bz2 \
|
SRC_URI = "${XORG_MIRROR}/individual/xserver/xorg-server-${PV}.tar.bz2 \
|
||||||
file://extra-kmodes.patch;patch=1 \
|
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-tslib.patch;patch=1 \
|
||||||
file://enable-xcalibrate.patch;patch=1 \
|
file://enable-xcalibrate.patch;patch=1 \
|
||||||
file://hide-cursor-and-ppm-root.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}"
|
S = "${WORKDIR}/xorg-server-${PV}"
|
||||||
|
|||||||
Reference in New Issue
Block a user