NetBSD-Bugs archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: kern/55745: spdmem_i2c_match() panics



The following reply was made to PR kern/55745; it has been noted by GNATS.

From: SAITOH Masanobu <msaitoh%execsw.org@localhost>
To: gnats-bugs%netbsd.org@localhost, kern-bug-people%netbsd.org@localhost,
 gnats-admin%netbsd.org@localhost, netbsd-bugs%netbsd.org@localhost,
 Hauke Fath <hf%spg.tu-darmstadt.de@localhost>
Cc: msaitoh%execsw.org@localhost
Subject: Re: kern/55745: spdmem_i2c_match() panics
Date: Tue, 17 Nov 2020 19:01:05 +0900

 On 2020/11/17 0:00, Edgar FuÃ? wrote:
 > The following reply was made to PR kern/55745; it has been noted by GNATS.
 > 
 > From: Edgar =?iso-8859-1?B?RnXf?= <ef%math.uni-bonn.de@localhost>
 > To: gnats-bugs%netbsd.org@localhost
 > Cc: Hauke Fath <hf%spg.tu-darmstadt.de@localhost>
 > Subject: Re: kern/55745: spdmem_i2c_match() panics
 > Date: Mon, 16 Nov 2020 15:55:19 +0100
 > 
 >   --jq0ap7NbKX2Kqbes
 >   Content-Type: text/plain; charset=us-ascii
 >   Content-Disposition: inline
 >   
 >   The problem (at least on -8, didn't check -9) is that sys/dev/pci/piixpm.c 1.52.6.2 installs NULL handlers for ic_{acquire,release}_bus in some cases, but the rest of the I2C code isn't prepared for that. So I guess one needs to install dummy handlers that only acquire/release the i2c mutex.
 >   
 
 LGTM.
 
 Those functions are not "dummy" so I think it would be good to name
 them as piixpm_i2c_{acquire,release}_bus() or any other better name.
 
 
 >   With that change, I can boot again.
 >   
 >   --jq0ap7NbKX2Kqbes
 >   Content-Type: text/plain; charset=us-ascii
 >   Content-Disposition: attachment; filename="piixpm.c.diff"
 >   
 >   Index: sys/dev/pci/piixpm.c
 >   ===================================================================
 >   RCS file: /cvsroot/src/sys/dev/pci/piixpm.c,v
 >   retrieving revision 1.52.6.2
 >   diff -u -r1.52.6.2 piixpm.c
 >   --- sys/dev/pci/piixpm.c	5 Aug 2020 16:11:56 -0000	1.52.6.2
 >   +++ sys/dev/pci/piixpm.c	16 Nov 2020 14:35:58 -0000
 >   @@ -125,6 +125,8 @@
 >    static void	piixpm_csb5_reset(void *);
 >    static int	piixpm_i2c_sb800_acquire_bus(void *, int);
 >    static void	piixpm_i2c_sb800_release_bus(void *, int);
 >   +static int	piixpm_i2c_dummy_acquire_bus(void *, int);
 >   +static void	piixpm_i2c_dummy_release_bus(void *, int);
 >    static int	piixpm_i2c_exec(void *, i2c_op_t, i2c_addr_t, const void *,
 >        size_t, void *, size_t, int);
 >    
 >   @@ -338,8 +340,8 @@
 >    			tag->ic_acquire_bus = piixpm_i2c_sb800_acquire_bus;
 >    			tag->ic_release_bus = piixpm_i2c_sb800_release_bus;
 >    		} else {
 >   -			tag->ic_acquire_bus = NULL;
 >   -			tag->ic_release_bus = NULL;
 >   +			tag->ic_acquire_bus = piixpm_i2c_dummy_acquire_bus;
 >   +			tag->ic_release_bus = piixpm_i2c_dummy_release_bus;
 >    		}
 >    		tag->ic_exec = piixpm_i2c_exec;
 >    		memset(&iba, 0, sizeof(iba));
 >   @@ -549,6 +551,18 @@
 >    	return 0;
 >    }
 >    
 >   +static int
 >   +piixpm_i2c_dummy_acquire_bus(void *cookie, int flags)
 >   +{
 >   +	struct piixpm_smbus *smbus = cookie;
 >   +	struct piixpm_softc *sc = smbus->softc;
 >   +
 >   +	if (!cold)
 >   +		mutex_enter(&sc->sc_i2c_mutex);
 >   +
 >   +	return 0;
 >   +}
 >   +
 >    static void
 >    piixpm_i2c_sb800_release_bus(void *cookie, int flags)
 >    {
 >   @@ -590,6 +604,16 @@
 >    		mutex_exit(&sc->sc_i2c_mutex);
 >    }
 >    
 >   +static void
 >   +piixpm_i2c_dummy_release_bus(void *cookie, int flags)
 >   +{
 >   +	struct piixpm_smbus *smbus = cookie;
 >   +	struct piixpm_softc *sc = smbus->softc;
 >   +
 >   +	if (!cold)
 >   +		mutex_exit(&sc->sc_i2c_mutex);
 >   +}
 >   +
 >    static int
 >    piixpm_i2c_exec(void *cookie, i2c_op_t op, i2c_addr_t addr,
 >        const void *cmdbuf, size_t cmdlen, void *buf, size_t len, int flags)
 >   
 >   --jq0ap7NbKX2Kqbes--
 >   
 > 
 
 
 -- 
 -----------------------------------------------
                  SAITOH Masanobu (msaitoh%execsw.org@localhost
                                   msaitoh%netbsd.org@localhost)
 


Home | Main Index | Thread Index | Old Index