All of lore.kernel.org
 help / color / mirror / Atom feed
From: David Laight <david.laight.linux@gmail.com>
To: Takashi Iwai <tiwai@suse.de>
Cc: Ethan Carter Edwards <ethan@ethancedwards.com>,
	"wychay@ctl.creative.com" <wychay@ctl.creative.com>,
	"ryan_richards@creativelabs.com" <ryan_richards@creativelabs.com>,
	"linux-sound@vger.kernel.org" <linux-sound@vger.kernel.org>,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>
Subject: Re: sound/pci/ctxfi/ctdaio.c: duplicate function removal question
Date: Sun, 29 Dec 2024 13:34:29 +0000	[thread overview]
Message-ID: <20241229133429.5fbed930@dsl-u17-10> (raw)
In-Reply-To: <87bjwuy9ub.wl-tiwai@suse.de>

On Sun, 29 Dec 2024 13:03:56 +0100
Takashi Iwai <tiwai@suse.de> wrote:

> On Sun, 29 Dec 2024 11:57:22 +0100,
> David Laight wrote:
> > 
> > On Sun, 29 Dec 2024 10:10:09 +0100
> > Takashi Iwai <tiwai@suse.de> wrote:
> >   
> > > On Sun, 29 Dec 2024 10:02:28 +0100,
> > > David Laight wrote:  
> > > > 
> > > > On Tue, 24 Dec 2024 23:16:17 +0000
> > > > Ethan Carter Edwards <ethan@ethancedwards.com> wrote:
> > > >     
> > > > > Hello all,
> > > > > 
> > > > > First of all, happy holidays. 
> > > > > 
> > > > > I was browsing the ctdaio.c code and I noticed a lot of 
> > > > > duplicate code and functions, specifically:
> > > > > 
> > > > > dao_set_{right,left}_input and
> > > > > dao_clear_{right,left}_input functions.
> > > > > 
> > > > > The functions are pretty much identical. They only 
> > > > > differ in the side (left, right). What was the original
> > > > > idea in doing this? Wouldn't it make more since to just
> > > > > have an ENUM (left, right) as an argument that would 
> > > > > determine the side and just reduce the function to 
> > > > > dao_set_input and dao_clear_input.    
> > > > 
> > > > Hmmm... you'd have a lot of conditionals inside the function.
> > > > 
> > > > They also look like a memory leak just waiting to happen.
> > > > I guess that an earlier implementation used a separate kmalloc()
> > > > for each imappers[].
> > > > 
> > > > Why is imappers[] an array of pointers not an array of the items?
> > > > Each is just 8 bytes plus a 'list_head' (2 pointers?).    
> > > 
> > > AFAIUC, it's a setup of a chained element, so no leak there as of
> > > now.  
> > 
> > Unless someone calls the functions in the wrong order.
> > And that seems to be outside the control of this code.  
> 
> Could you elaborate?  The chain element gets released also by the
> destructor, dao_rsc_uninit().  And this is no exported function to be
> used by other drivers, but an internal one only for ctxfi driver.

The code is just too horrid :-)
I missed that when dao_set_right_input() calls dao->ops->clear_right_input()
it is just calling the static function just below.

I think the two 'clear' functions could be combined as:

static int dao_clear_input(struct dao *dao, unsigned int start, unsigned int end)
{
	struct imapper *to_free = dao->imappers[start];
	unsigned int i;

	if (!to_free)
		return 0;
	for (i = start; i < end; i++) {
		dao->mgr->imap_delete(dao->mgr, dao->imappers[i]);
		dao->imappers[i] = NULL;
	}

	kfree(to_free);
	return 0;
}

static int dao_clear_left_input(struct dao *dao)
{
	return dao_clear_input(dao, 0, dao->rscl.msr);
}

static int dao_clear_right_input(struct dao *dao)
{
	return dao_clear_input(dao, dao->rscl.msr, dao->rscl.msr + dao->rscr.msr);
}

Although I'm missing any other code that actually indexes that imappers[] array.
So I suspect only [0] and [dao->rscl.msr] are ever used??

Stanger things happen in the set functions.

	David

> 
> 
> thanks,
> 
> Takashi


  reply	other threads:[~2024-12-29 13:34 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-12-24 23:16 sound/pci/ctxfi/ctdaio.c: duplicate function removal question Ethan Carter Edwards
2024-12-29  8:32 ` Takashi Iwai
2024-12-29  9:02 ` David Laight
2024-12-29  9:10   ` Takashi Iwai
2024-12-29 10:57     ` David Laight
2024-12-29 12:03       ` Takashi Iwai
2024-12-29 13:34         ` David Laight [this message]
2024-12-30 15:53           ` Ethan Carter Edwards

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20241229133429.5fbed930@dsl-u17-10 \
    --to=david.laight.linux@gmail.com \
    --cc=ethan@ethancedwards.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-sound@vger.kernel.org \
    --cc=ryan_richards@creativelabs.com \
    --cc=tiwai@suse.de \
    --cc=wychay@ctl.creative.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.