On Mon, Jul 31, 2023 at 10:04:44PM +0200, Claudio Jeker wrote:
> On Mon, Jul 31, 2023 at 09:49:30PM +0200, Claudio Jeker wrote:
> > On Mon, Jul 31, 2023 at 08:03:41PM +0300, Vitaliy Makkoveev wrote:
> > > This is the culprit:
> > >
> > > schedule_timeout_uninterruptible(long timeout)
> > > {
> > > tsleep(curproc, PWAIT, "schtou", timeout);
> > > return 0;
> > > }
> > >
> >
> > Please give this a try. I think on initialization
> > intel_dp_wait_source_oui() is called before intel_dp->last_oui_write is
> > set and this results in a 10min timeout because our jiffies are set to
> > ULONG_MAX - (10 * 60 * HZ);
>
> After talking with kettenis@ I think the following diff is better.
> Starting with 0 jiffies should fix this issue.
> Unless we want to do the linux madness and set it to
> ((unsigned long)(unsigned int) (-300*HZ))
>
> --
> :wq Claudio
>
> Index: kern_clock.c
> ===================================================================
> RCS file: /cvs/src/sys/kern/kern_clock.c,v
> retrieving revision 1.109
> diff -u -p -r1.109 kern_clock.c
> --- kern_clock.c 25 Jul 2023 18:16:19 -0000 1.109
> +++ kern_clock.c 31 Jul 2023 20:01:57 -0000
> @@ -84,7 +84,7 @@ int profhz;
> int profprocs;
> int ticks = INT_MAX - (15 * 60 * HZ);
>
> -volatile unsigned long jiffies = ULONG_MAX - (10 * 60 * HZ);
> +volatile unsigned long jiffies;
>
> /*
> * Initialize clock frequencies and start both clocks running.
>
This diff contains all of diffs you posted to this thread. Works fine
with hunks 1 and 2 together as with any of them separately.
Index: sys/dev/pci/drm/i915/display/intel_dp.c
===================================================================
RCS file: /cvs/src/sys/dev/pci/drm/i915/display/intel_dp.c,v
retrieving revision 1.14
diff -u -p -r1.14 intel_dp.c
--- sys/dev/pci/drm/i915/display/intel_dp.c 28 Jul 2023 06:56:32 -0000
1.14
+++ sys/dev/pci/drm/i915/display/intel_dp.c 31 Jul 2023 20:38:05 -0000
@@ -2228,6 +2228,8 @@ void intel_dp_wait_source_oui(struct int
struct drm_i915_private *i915 = dp_to_i915(intel_dp);
drm_dbg_kms(&i915->drm, "Performing OUI wait\n");
+ if (intel_dp->last_oui_write == 0)
+ intel_dp->last_oui_write = jiffies;
wait_remaining_ms_from_jiffies(intel_dp->last_oui_write, 30);
}
Index: sys/kern/kern_clock.c
===================================================================
RCS file: /cvs/src/sys/kern/kern_clock.c,v
retrieving revision 1.109
diff -u -p -r1.109 kern_clock.c
--- sys/kern/kern_clock.c 25 Jul 2023 18:16:19 -0000 1.109
+++ sys/kern/kern_clock.c 31 Jul 2023 20:38:05 -0000
@@ -84,7 +84,7 @@ int profhz;
int profprocs;
int ticks = INT_MAX - (15 * 60 * HZ);
-volatile unsigned long jiffies = ULONG_MAX - (10 * 60 * HZ);
+volatile unsigned long jiffies;
/*
* Initialize clock frequencies and start both clocks running.
Index: sys/uvm/uvm_meter.c
===================================================================
RCS file: /cvs/src/sys/uvm/uvm_meter.c,v
retrieving revision 1.44
diff -u -p -r1.44 uvm_meter.c
--- sys/uvm/uvm_meter.c 21 Jun 2023 21:16:21 -0000 1.44
+++ sys/uvm/uvm_meter.c 31 Jul 2023 20:38:05 -0000
@@ -89,8 +89,6 @@ uvm_meter(void)
{
if ((gettime() % 5) == 0)
uvm_loadav(&averunnable);
- if (proc0.p_slptime > (maxslp / 2))
- wakeup(&proc0);
}
/*