I did a step by step down grading with 'svn up -r..... hdaa.c hdaa.h'
(only these two files), starting from r368166 down to the following revisions:

r368166: no recording from pcm1

r358333: no recording from pcm1

r350078: no recording from pcm1

r337043: recording is fine

I've cc'ed now the commiters of the r358333 and r350078. kaktus@ and sbruno@
please check the issue https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=251727
and this mail thread in current@

Thanks

        mattias

El día domingo, diciembre 13, 2020 a las 08:06:02p. m. +0100, Matthias Apitz 
escribió:

> El día viernes, diciembre 11, 2020 a las 08:06:27a. m. +0100, Matthias Apitz 
> escribió:
> 
> > FreeBSD c720-r368166 13.0-CURRENT FreeBSD 13.0-CURRENT #1 r342378:368166M: 
> > Fri Dec 11 07:46:32 CET 2020     
> > guru@c720-r368166:/usr/obj/usr/src/amd64.amd64/sys/GENERIC  amd64
> > 
> > and all is fine again as it was before. Someone with more knowledge should
> > have a look into a 'svn diff -r342378:368166 sys/dev/sound/pci/hda' and
> > see which of the changes might break the things. 
> > 
> 
> I did an analyzing of the files changed in sys/dev/sound/pci/hda between
> r342378 (2018-11-02) and r368166 (2020-11-30)
> 
> I copied over all files from hda/* to a new dir hda.r368166/* and
> updated (i.e. reverted) hda/* to r342378; only the 7 files below (of 10)
> have changed between r342378 and r368166:
> 
> The kernel built with hda of r342378 works fine;
> 
> The work plan was now to change one file after the other to r368166
> and see if the kernel still works fine, i.e. which of the 7 file(s)
> is causing the regression...
> 
> i.e. I did: 
> 
> # svn up -r342378 sys/dev/sound/pci/hda
> # cp sys/dev/sound/pci/hda.r368166/hdac.c sys/dev/sound/pci/hda/
> # touch sys/dev/sound/pci/hda/hdac.c 
> # make buildkernel -DNO_CLEAN
> # make installkernel
> ...
> 
>  v----------------------------an 'x' means: was copied from hda.r368166;
> [x] Index: hda/hdac.c
> [x] Index: hda/hdac.h
> 
> recording with the kernel still works
> 
> [x] Index: hda/hdaa_patches.c     
> 
> recording with the kernel still works
> 
> [x] Index: hda/hdacc.c
> [x] Index: hda/hda_reg.h          only cleanups of empty lines
> 
> recording with the kernel still works
> 
> [x] Index: hda/hdaa.h
> [x] Index: hda/hdaa.c             
> 
> recording with the kernel stoped working
> 
> Which means the few changes in hda/hdaa.c are causing the regression:
> 
> # svn diff -r342378 hdaa.c
> Index: hdaa.c
> ===================================================================
> --- hdaa.c    (revisión: 342378)
> +++ hdaa.c    (copia de trabajo)
> @@ -52,7 +52,6 @@
>  #define hdaa_lock(devinfo)   snd_mtxlock((devinfo)->lock)
>  #define hdaa_unlock(devinfo) snd_mtxunlock((devinfo)->lock)
>  #define hdaa_lockassert(devinfo) snd_mtxassert((devinfo)->lock)
> -#define hdaa_lockowned(devinfo)      mtx_owned((devinfo)->lock)
>  
>  static const struct {
>       const char *key;
> @@ -1129,7 +1128,6 @@
>           ((step - offset) * (size + 1)) / 4);
>  }
>  
> -
>  static int
>  hdaa_sysctl_caps(SYSCTL_HANDLER_ARGS)
>  {
> @@ -5034,11 +5032,13 @@
>               pincap = w->wclass.pin.cap;
>  
>               /* Disable everything. */
> -             w->wclass.pin.ctrl &= ~(
> -                 HDA_CMD_SET_PIN_WIDGET_CTRL_HPHN_ENABLE |
> -                 HDA_CMD_SET_PIN_WIDGET_CTRL_OUT_ENABLE |
> -                 HDA_CMD_SET_PIN_WIDGET_CTRL_IN_ENABLE |
> -                 HDA_CMD_SET_PIN_WIDGET_CTRL_VREF_ENABLE_MASK);
> +             if (devinfo->init_clear) {
> +                     w->wclass.pin.ctrl &= ~(
> +                     HDA_CMD_SET_PIN_WIDGET_CTRL_HPHN_ENABLE |
> +                     HDA_CMD_SET_PIN_WIDGET_CTRL_OUT_ENABLE |
> +                     HDA_CMD_SET_PIN_WIDGET_CTRL_IN_ENABLE |
> +                     HDA_CMD_SET_PIN_WIDGET_CTRL_VREF_ENABLE_MASK);
> +             }
>  
>               if (w->enable == 0) {
>                       /* Pin is unused so left it disabled. */
> @@ -6669,8 +6669,12 @@
>           devinfo, 0, hdaa_sysctl_gpo_config, "A", "GPO configuration");
>       SYSCTL_ADD_PROC(device_get_sysctl_ctx(dev),
>           SYSCTL_CHILDREN(device_get_sysctl_tree(dev)), OID_AUTO,
> -         "reconfig", CTLTYPE_INT | CTLFLAG_RW,
> +         "reconfig", CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_NEEDGIANT,
>           dev, 0, hdaa_sysctl_reconfig, "I", "Reprocess configuration");
> +     SYSCTL_ADD_INT(device_get_sysctl_ctx(dev),
> +         SYSCTL_CHILDREN(device_get_sysctl_tree(dev)), OID_AUTO,
> +         "init_clear", CTLFLAG_RW,
> +         &devinfo->init_clear, 1,"Clear initial pin widget configuration");
>       bus_generic_attach(dev);
>       return (0);
>  }
> 
> # svn diff -r342378 hdaa.h
> Index: hdaa.h
> ===================================================================
> --- hdaa.h    (revisión: 342378)
> +++ hdaa.h    (copia de trabajo)
> @@ -214,6 +214,7 @@
>       struct hdaa_chan        *chans;
>       struct callout          poll_jack;
>       int                     poll_ival;
> +     uint32_t                init_clear;
>  };
>  
>  #define HDAA_CHN_RUNNING     0x00000001
> 
> 
> If one looks into a svn log of the file hdaa.c it seems that one of the two 
> changes 
> r358333 or r350078 must have caused the problem:
> 
> # svn log hdaa.c
> 
> ------------------------------------------------------------------------
> r365085 | mjg | 2020-09-01 23:27:34 +0200 (mar. 01 de sept. de 2020) | 2 
> líneas
> 
> sound: clean up empty lines in .c and .h files
> 
> ------------------------------------------------------------------------
> r360076 | emaste | 2020-04-18 20:25:30 +0200 (sáb. 18 de abr. de 2020) | 4 
> líneas
> 
> hda: remove hda*_lockowned macros
> 
> These are not used anywhere.
> 
> ------------------------------------------------------------------------
> r358333 | kaktus | 2020-02-26 15:26:36 +0100 (mié. 26 de feb. de 2020) | 16 
> líneas
> 
> Mark more nodes as CTLFLAG_MPSAFE or CTLFLAG_NEEDGIANT (17 of many)
> 
> r357614 added CTLFLAG_NEEDGIANT to make it easier to find nodes that are
> still not MPSAFE (or already are but aren’t properly marked).
> Use it in preparation for a general review of all nodes.
> 
> This is non-functional change that adds annotations to SYSCTL_NODE and
> SYSCTL_PROC nodes using one of the soon-to-be-required flags.
> 
> Mark all obvious cases as MPSAFE.  All entries that haven't been marked
> as MPSAFE before are by default marked as NEEDGIANT
> 
> Approved by:  kib (mentor, blanket)
> Commented by: kib, gallatin, melifaro
> Differential Revision:        https://reviews.freebsd.org/D23718
> 
> ------------------------------------------------------------------------
> r350078 | sbruno | 2019-07-17 06:13:46 +0200 (mié. 17 de jul. de 2019) | 8 
> líneas
> 
> I add the ability to accept the default pin widget configuration to help
> with various laptops using hdaa(4) sound devices.  We don't seem to know
> the "correct" configurations for these devices and the defaults are far
> superiour, e.g. they work if you don't nuke the default configs.
> 
> PR:   200526
> Differential Revision:        https://reviews.freebsd.org/D17772
> 
> ------------------------------------------------------------------------
> r337043 | jhibbits | 2018-08-01 16:50:41 +0200 (mié. 01 de ago. de 2018) | 13 
> líneas
> 
> snd_hda: Synchronize DMA buffers for the control path
> 
> Make sure both sides of the DMA buffer memory accesses for the CORB and RIRB
> (control buffers) in snd_hda (device and CPU) can see coherent memory.  This
> is needed on weakly ordered architectures including PowerPC and ARM.  Patch
> originally by mmel, with small changes.
> 
> This does not cover the data path of snd_hda.  We don't have sync operations
> for in-progress DMA buffers, to sync ranges of a map.
> 
> Reviewed By: mmel
> Differential Revision: https://reviews.freebsd.org/D16517
> 
> ...
> 

-- 
Matthias Apitz, ✉ g...@unixarea.de, http://www.unixarea.de/ +49-176-38902045
Public GnuPG key: http://www.unixarea.de/key.pub
_______________________________________________
freebsd-current@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/freebsd-current
To unsubscribe, send any mail to "freebsd-current-unsubscr...@freebsd.org"

Reply via email to