On Mon, Sep 28, 2026 at 03:02:56PM +0200, [email protected] wrote:
> Le Mon, Sep 28, 2026 at 09:35:53PM +1000, Jonathan Gray a écrit :
> > On Mon, Sep 28, 2026 at 01:20:29PM +0200, [email protected] wrote:
> > > Le Mon, Sep 28, 2026 at 06:41:10PM +1000, Jonathan Gray a écrit :
> > > > On Mon, Sep 28, 2026 at 10:04:56AM +0200, [email protected] wrote:
> > > > > Le Mon, Sep 28, 2026 at 05:22:15PM +1000, Jonathan Gray a écrit :
> > > > > > On Mon, Sep 28, 2026 at 04:56:10PM +1000, Jonathan Gray wrote:
> > > > > > > On Mon, Sep 28, 2026 at 08:09:34AM +0200, [email protected] 
> > > > > > > wrote:
> > > > > > > > hi
> > > > > > > > 
> > > > > > > > upgraded my work t470s this morning to latest snap (previously 
> > > > > > > > running a
> > > > > > > > snap from the 6), first noticed that wsconsctl during boot was 
> > > > > > > > stuck on
> > > > > > > > ww_mutex_lock (^T showed it making no progress) and the laptop 
> > > > > > > > lid was
> > > > > > > > 'flashing' every ~10s or so.
> > > > > > > > 
> > > > > > > > moved my wsconsctl.conf away, X wouldnt start anyway (Xorg.0.log
> > > > > > > > attached)
> > > > > > > > 
> > > > > > > > bisected previous kernels from the archive:
> > > > > > > > #56: Fri Sep 25 11:32:45 MDT 2026 is bad
> > > > > > > > #55: Wed Sep 23 14:37:23 MDT 2026 is good (eg screen wont flash 
> > > > > > > > during
> > > > > > > > boot msgs and X starts)
> > > > > > > 
> > > > > > > Likely the sleep changes.  Does this diff to revert them help?
> > > > > > 
> > > > > > alternatively, avoid sleep when cold
> > > > > 
> > > > > sadly, this version doesnt work (eg screen still flashes after 
> > > > > switching
> > > > > to kms, and X wont start)
> > > > 
> > > > a version that keeps the previous midpoint behaviour
> > > > while still using tsleep
> > > 
> > > sadly, still no luck with that one, i had reinstated wsconsctl.conf and
> > > it's still stuck on the same mutex, and screen flashes every 5s.
> > 
> > Is this partial revert enough?
> 
> nope, still same symptoms with this 4th iteration. afaict only the full
> revert worked (or kernel #55 from the archive)

thanks

Here is the full revert and another diff from daniel.  This should
work for you and the problematic Alder Lake machines.

Index: sys/dev/pci/drm/include/linux/delay.h
===================================================================
RCS file: /cvs/src/sys/dev/pci/drm/include/linux/delay.h,v
diff -u -p -r1.9 delay.h
--- sys/dev/pci/drm/include/linux/delay.h       25 Sep 2026 12:12:53 -0000      
1.9
+++ sys/dev/pci/drm/include/linux/delay.h       28 Sep 2026 13:09:04 -0000
@@ -21,7 +21,7 @@ ndelay(unsigned long nsecs)
 static inline void
 usleep_range(unsigned long min, unsigned long max)
 {
-       tsleep_nsec(&nowake, PWAIT, "usleep", USEC_TO_NSEC(min));
+       DELAY((min + max) / 2);
 }
 
 /* XXX assumes state is TASK_UNINTERRUPTIBLE */
@@ -39,19 +39,12 @@ mdelay(unsigned long msecs)
                DELAY(1000);
 }
 
-static inline void
-drm_msleep(unsigned int msecs)
-{
-       tsleep_nsec(&nowake, PWAIT, "drmmsleep", MSEC_TO_NSEC(msecs));
-}
+#define drm_msleep(x)          mdelay(x)
 
 static inline void
 fsleep(unsigned long usecs)
 {
-       if (usecs <= 10)
-               DELAY(usecs);
-       else
-               tsleep_nsec(&nowake, PWAIT, "fsleep", USEC_TO_NSEC(usecs));
+       DELAY(usecs);
 }
 
 static inline unsigned int
Index: sys/dev/pci/drm/i915/gt/uc/intel_guc_ct.c
===================================================================
RCS file: /cvs/src/sys/dev/pci/drm/i915/gt/uc/intel_guc_ct.c,v
diff -u -p -r1.9 intel_guc_ct.c
--- sys/dev/pci/drm/i915/gt/uc/intel_guc_ct.c   9 Mar 2026 23:58:02 -0000       
1.9
+++ sys/dev/pci/drm/i915/gt/uc/intel_guc_ct.c   28 Sep 2026 13:09:29 -0000
@@ -522,6 +522,8 @@ corrupted:
        return -EPIPE;
 }
 
+static void ct_try_receive_message(struct intel_guc_ct *);
+
 /**
  * wait_for_ct_request_update - Wait for CT request state update.
  * @ct:                pointer to CT
@@ -557,7 +559,13 @@ static int wait_for_ct_request_update(st
         GUC_HXG_ORIGIN_GUC)
        err = wait_for_us(done, GUC_CTB_RESPONSE_TIMEOUT_SHORT_MS);
        if (err)
+#ifdef __linux__
                err = wait_for(done, GUC_CTB_RESPONSE_TIMEOUT_LONG_MS);
+#else
+               /* process responses while waiting */
+               err = __wait_for(ct_try_receive_message(ct), done,
+                   GUC_CTB_RESPONSE_TIMEOUT_LONG_MS * 1000, 10, 1000);
+#endif
 #undef done
        if (!ct_enabled)
                err = -ENODEV;

Reply via email to