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_at_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) _at__at_ -52,7 +52,6 _at__at_ #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; _at__at_ -1129,7 +1128,6 _at__at_ ((step - offset) * (size + 1)) / 4); } - static int hdaa_sysctl_caps(SYSCTL_HANDLER_ARGS) { _at__at_ -5034,11 +5032,13 _at__at_ 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. */ _at__at_ -6669,8 +6669,12 _at__at_ 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) _at__at_ -214,6 +214,7 _at__at_ 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, ✉ guru_at_unixarea.de, http://www.unixarea.de/ +49-176-38902045 Public GnuPG key: http://www.unixarea.de/key.pub Без книги нет знания, без знания нет коммунизма (Влaдимир Ильич Ленин) Without books no knowledge - without knowledge no communism (Vladimir Ilyich Lenin) Sin libros no hay saber - sin saber no hay comunismo. (Vladimir Ilich Lenin)Received on Sun Dec 13 2020 - 18:06:07 UTC
This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:41:26 UTC