Message ID | 20230814115523.15279-1-tiwai@suse.de |
---|---|
Headers |
Return-Path: <linux-kernel-owner@vger.kernel.org> Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:b824:0:b0:3f2:4152:657d with SMTP id z4csp2717232vqi; Mon, 14 Aug 2023 05:41:10 -0700 (PDT) X-Google-Smtp-Source: AGHT+IHBbj72etnaDy3rxrBBCL9r0k/0eqgs9l8m5kIy5lstWoIG6Ki7sJI1AiJAKMajhC3xuCWk X-Received: by 2002:a05:6a20:3d8b:b0:13d:8876:4c97 with SMTP id s11-20020a056a203d8b00b0013d88764c97mr11674274pzi.16.1692016870100; Mon, 14 Aug 2023 05:41:10 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1692016870; cv=none; d=google.com; s=arc-20160816; b=L8oY/v3iGH0nRGIuWcnV9AJ0zMaKTAZOIfOeitJQXMKoqmCs79N36JhKruwEDVFc/w y6gRTUwFopISQc4NK4w5LeBfsRhxrx4eFTbkGp0x9QL4qbT8xd+453kQwtaTqk0musNS wh5mJ+r29AoeaHkvRroba+PhxPPZj5aVzXSGolTAKLUTeVpKEi/XeV+HWSb41cRKg3Np dzFuV+mvSMzi2oEDRPlURxXfnX53uA/R0/b0Qy/LdoHhkMYlevcuEkenJuPRtAOvfkhY bsYBTsoTAos7XKVOmkWHLC7m72Yq4Zc1VoIUnURGZ49eM3D58p3othT48dpuz6rZ9pDP znIA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :message-id:date:subject:cc:to:from:dkim-signature:dkim-signature; bh=XQeGJoZiwS+WxYkVBoqLRdA0cljITB4QdfMyE6lbFFs=; fh=SwjQUiZMprA0DEfGzaCtxs2kOMgrBuMmfZvIm6G04vU=; b=0yLPvrOxfkmgpePC/zirn+RyGOlC1zYlMv4iuNb1TvFCncT6JpVRbge89orwQ/yoFy vHohpvs0ydMg/6LqBxR/pr+nmNPqHz5n7KXHJYpX/OD7LNSQP3RqNyYZjmYpaUmyPgR4 9dQU64Ew3gOqETfvQXEGq4VP3pQXHEkUdBUWMezl7doWrzWYFCTOCEyjzp32qBvUQ8Dr NMphjZrHOWfmy6uV+W1PKPGu6kiLkOqjzWYTnbUNFG8BE/XvvCj1wkbmsrmUgREv701l Dbqj0aSTzat+VcH5BSefXJb5E1JNG5DBlxGHX84jZVEumlnSEmGEc090Ef5eTIg0e1/r RORg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@suse.de header.s=susede2_rsa header.b="kFp/+CRC"; dkim=neutral (no key) header.i=@suse.de header.s=susede2_ed25519; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=suse.de Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id a18-20020a170902b59200b001bb20380bf9si7747305pls.545.2023.08.14.05.40.56; Mon, 14 Aug 2023 05:41:10 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@suse.de header.s=susede2_rsa header.b="kFp/+CRC"; dkim=neutral (no key) header.i=@suse.de header.s=susede2_ed25519; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=suse.de Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232566AbjHNL45 (ORCPT <rfc822;274620705z@gmail.com> + 99 others); Mon, 14 Aug 2023 07:56:57 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:37154 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231753AbjHNL41 (ORCPT <rfc822;linux-kernel@vger.kernel.org>); Mon, 14 Aug 2023 07:56:27 -0400 Received: from smtp-out1.suse.de (smtp-out1.suse.de [195.135.220.28]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id A3222199E; Mon, 14 Aug 2023 04:56:11 -0700 (PDT) Received: from imap2.suse-dmz.suse.de (imap2.suse-dmz.suse.de [192.168.254.74]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512) (No client certificate requested) by smtp-out1.suse.de (Postfix) with ESMTPS id 17ED721995; Mon, 14 Aug 2023 11:55:41 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1692014141; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding; bh=XQeGJoZiwS+WxYkVBoqLRdA0cljITB4QdfMyE6lbFFs=; b=kFp/+CRCPGtee7m/HHJG6RlkE9iBkGLiItLiaZXJaSHCOFJVefxmV49Io8esHULi2dSTmx dkZvny408ZbpCYDNUxDK9iduT8PasgOnmWZQrRNzDBf6v/T2EKwgDtULSDfIPCePUN7veC W7/6+AabVtw/UyAbvOPTJ0Q5KJVfFP0= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1692014141; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding; bh=XQeGJoZiwS+WxYkVBoqLRdA0cljITB4QdfMyE6lbFFs=; b=J0FDoDKgkoTfK6W8B1m8B3Sq8+mKHrYih3FmIaCWeumyUMJoNkdmZeZPdu1jqCS3GM1WoU /fQKa10s4LX6IjCQ== Received: from imap2.suse-dmz.suse.de (imap2.suse-dmz.suse.de [192.168.254.74]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512) (No client certificate requested) by imap2.suse-dmz.suse.de (Postfix) with ESMTPS id A12A1138EE; Mon, 14 Aug 2023 11:55:40 +0000 (UTC) Received: from dovecot-director2.suse.de ([192.168.254.65]) by imap2.suse-dmz.suse.de with ESMTPSA id POobJjwW2mRnMAAAMHmgww (envelope-from <tiwai@suse.de>); Mon, 14 Aug 2023 11:55:40 +0000 From: Takashi Iwai <tiwai@suse.de> To: alsa-devel@alsa-project.org Cc: linux-kernel@vger.kernel.org, Takashi Iwai <tiwai@suse.de>, Alexander Viro <viro@zeniv.linux.org.uk>, Andy Shevchenko <andriy.shevchenko@linux.intel.com>, Andrey Utkin <andrey_utkin@fastmail.com>, Anton Sviridenko <anton@corp.bluecherry.net>, Arnaud Pouliquen <arnaud.pouliquen@foss.st.com>, Banajit Goswami <bgoswami@quicinc.com>, Bluecherry Maintainers <maintainers@bluecherrydvr.com>, Claudiu Beznea <claudiu.beznea@microchip.com>, Ismael Luceno <ismael@iodev.co.uk>, Lars-Peter Clausen <lars@metafoo.de>, Mark Brown <broonie@kernel.org>, Mauro Carvalho Chehab <mchehab@kernel.org>, Oleksandr Andrushchenko <oleksandr_andrushchenko@epam.com>, Olivier Moysan <olivier.moysan@foss.st.com>, Srinivas Kandagatla <srinivas.kandagatla@linaro.org>, linux-media@vger.kernel.org, xen-devel@lists.xenproject.org Subject: [PATCH 00/25] ALSA: Generic PCM copy ops using iov_iter Date: Mon, 14 Aug 2023 13:54:58 +0200 Message-Id: <20230814115523.15279-1-tiwai@suse.de> X-Mailer: git-send-email 2.35.3 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-4.4 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_MED,SPF_HELO_NONE, SPF_PASS autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: <linux-kernel.vger.kernel.org> X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1774208281483767712 X-GMAIL-MSGID: 1774208281483767712 |
Series |
ALSA: Generic PCM copy ops using iov_iter
|
|
Message
Takashi Iwai
Aug. 14, 2023, 11:54 a.m. UTC
Hi, this is a revised patch set for cleaning up the PCM copy ops using iov_iter to deal with kernel / user-space pointers consistently. The previous patch set was based on sockptr_t: https://lore.kernel.org/r/20230731154718.31048-1-tiwai@suse.de But this approach was NAK'ed as iov_iter is a preferred way for achieving the purpose: https://lore.kernel.org/r/87edkce118.wl-tiwai@suse.de The patch set starts with the missing export of import_ubuf() function, followed by the new copy_ops using iov_iter, extensions of some helpers and replacements of the existing code. It resulted in a good amount of code reduction. Takashi === Cc: Alexander Viro <viro@zeniv.linux.org.uk> Cc: Andy Shevchenko <andriy.shevchenko@linux.intel.com> Cc: Andrey Utkin <andrey_utkin@fastmail.com> Cc: Anton Sviridenko <anton@corp.bluecherry.net> Cc: Arnaud Pouliquen <arnaud.pouliquen@foss.st.com> Cc: Banajit Goswami <bgoswami@quicinc.com> Cc: Bluecherry Maintainers <maintainers@bluecherrydvr.com> Cc: Claudiu Beznea <claudiu.beznea@microchip.com> Cc: Ismael Luceno <ismael@iodev.co.uk> Cc: Lars-Peter Clausen <lars@metafoo.de> Cc: Mark Brown <broonie@kernel.org> Cc: Mauro Carvalho Chehab <mchehab@kernel.org> Cc: Oleksandr Andrushchenko <oleksandr_andrushchenko@epam.com> Cc: Olivier Moysan <olivier.moysan@foss.st.com> Cc: Srinivas Kandagatla <srinivas.kandagatla@linaro.org> Cc: linux-media@vger.kernel.org Cc: xen-devel@lists.xenproject.org === Takashi Iwai (25): iov_iter: Export import_ubuf() ALSA: pcm: Add copy ops with iov_iter ALSA: core: Add memory copy helpers between iov_iter and iomem ALSA: dummy: Convert to generic PCM copy ops ALSA: gus: Convert to generic PCM copy ops ALSA: emu8000: Convert to generic PCM copy ops ALSA: es1938: Convert to generic PCM copy ops ALSA: korg1212: Convert to generic PCM copy ops ALSA: nm256: Convert to generic PCM copy ops ALSA: rme32: Convert to generic PCM copy ops ALSA: rme96: Convert to generic PCM copy ops ALSA: hdsp: Convert to generic PCM copy ops ALSA: rme9652: Convert to generic PCM copy ops ALSA: sh: Convert to generic PCM copy ops ALSA: xen: Convert to generic PCM copy ops ALSA: pcmtest: Update comment about PCM copy ops media: solo6x10: Convert to generic PCM copy ops ASoC: component: Add generic PCM copy ops ASoC: mediatek: Convert to generic PCM copy ops ASoC: qcom: Convert to generic PCM copy ops ASoC: dmaengine: Convert to generic PCM copy ops ASoC: dmaengine: Use iov_iter for process callback, too ALSA: doc: Update description for the new PCM copy ops ASoC: pcm: Drop obsoleted PCM copy_user ops ALSA: pcm: Drop obsoleted PCM copy_user and copy_kernel ops .../kernel-api/writing-an-alsa-driver.rst | 58 ++++------- drivers/media/pci/solo6x10/solo6x10-g723.c | 38 +------- include/sound/dmaengine_pcm.h | 2 +- include/sound/pcm.h | 13 ++- include/sound/soc-component.h | 14 +-- lib/iov_iter.c | 1 + sound/core/memory.c | 56 +++++++++-- sound/core/pcm_lib.c | 95 ++++++++++--------- sound/core/pcm_native.c | 2 +- sound/drivers/dummy.c | 12 +-- sound/drivers/pcmtest.c | 2 +- sound/isa/gus/gus_pcm.c | 23 +---- sound/isa/sb/emu8000_pcm.c | 74 ++++----------- sound/pci/es1938.c | 30 +----- sound/pci/korg1212/korg1212.c | 50 +++------- sound/pci/nm256/nm256.c | 42 ++------ sound/pci/rme32.c | 50 +++------- sound/pci/rme96.c | 42 ++------ sound/pci/rme9652/hdsp.c | 42 ++------ sound/pci/rme9652/rme9652.c | 46 ++------- sound/sh/sh_dac_audio.c | 25 +---- sound/soc/atmel/mchp-pdmc.c | 2 +- sound/soc/mediatek/common/mtk-btcvsd.c | 23 ++--- sound/soc/qcom/lpass-platform.c | 13 +-- sound/soc/soc-component.c | 10 +- sound/soc/soc-generic-dmaengine-pcm.c | 18 ++-- sound/soc/soc-pcm.c | 4 +- sound/soc/stm/stm32_sai_sub.c | 2 +- sound/xen/xen_snd_front_alsa.c | 55 ++--------- 29 files changed, 263 insertions(+), 581 deletions(-)
Comments
On 14/Aug/2023 13:55, Takashi Iwai wrote: > This patch converts the solo6x10 driver code to use the new unified > PCM copy callback. It's a straightforward conversion from *_user() to > *_iter() variants. As copy_to_iter() updates the internal offest at > each write, we can drop the dst counter update in the loop, too. > > Note that copy_from/to_iter() returns the copied bytes, hence the > error condition is inverted from copy_from/to_user(). > > Cc: Bluecherry Maintainers <maintainers@bluecherrydvr.com> > Cc: Anton Sviridenko <anton@corp.bluecherry.net> > Cc: Andrey Utkin <andrey_utkin@fastmail.com> > Cc: Ismael Luceno <ismael@iodev.co.uk> > Cc: Mauro Carvalho Chehab <mchehab@kernel.org> > Cc: linux-media@vger.kernel.org > Signed-off-by: Takashi Iwai <tiwai@suse.de> > --- > drivers/media/pci/solo6x10/solo6x10-g723.c | 38 +++------------------- > 1 file changed, 5 insertions(+), 33 deletions(-) > > diff --git a/drivers/media/pci/solo6x10/solo6x10-g723.c b/drivers/media/pci/solo6x10/solo6x10-g723.c > index 6cebad665565..aceacb822cab 100644 > --- a/drivers/media/pci/solo6x10/solo6x10-g723.c > +++ b/drivers/media/pci/solo6x10/solo6x10-g723.c > @@ -204,9 +204,9 @@ static snd_pcm_uframes_t snd_solo_pcm_pointer(struct snd_pcm_substream *ss) > return idx * G723_FRAMES_PER_PAGE; > } > > -static int snd_solo_pcm_copy_user(struct snd_pcm_substream *ss, int channel, > - unsigned long pos, void __user *dst, > - unsigned long count) > +static int snd_solo_pcm_copy(struct snd_pcm_substream *ss, int channel, > + unsigned long pos, struct iov_iter *dst, > + unsigned long count) > { > struct solo_snd_pcm *solo_pcm = snd_pcm_substream_chip(ss); > struct solo_dev *solo_dev = solo_pcm->solo_dev; > @@ -223,35 +223,8 @@ static int snd_solo_pcm_copy_user(struct snd_pcm_substream *ss, int channel, > if (err) > return err; > > - if (copy_to_user(dst, solo_pcm->g723_buf, G723_PERIOD_BYTES)) > + if (!copy_to_iter(solo_pcm->g723_buf, G723_PERIOD_BYTES, dst)) > return -EFAULT; > - dst += G723_PERIOD_BYTES; > - } > - > - return 0; > -} > - > -static int snd_solo_pcm_copy_kernel(struct snd_pcm_substream *ss, int channel, > - unsigned long pos, void *dst, > - unsigned long count) > -{ > - struct solo_snd_pcm *solo_pcm = snd_pcm_substream_chip(ss); > - struct solo_dev *solo_dev = solo_pcm->solo_dev; > - int err, i; > - > - for (i = 0; i < (count / G723_FRAMES_PER_PAGE); i++) { > - int page = (pos / G723_FRAMES_PER_PAGE) + i; > - > - err = solo_p2m_dma_t(solo_dev, 0, solo_pcm->g723_dma, > - SOLO_G723_EXT_ADDR(solo_dev) + > - (page * G723_PERIOD_BLOCK) + > - (ss->number * G723_PERIOD_BYTES), > - G723_PERIOD_BYTES, 0, 0); > - if (err) > - return err; > - > - memcpy(dst, solo_pcm->g723_buf, G723_PERIOD_BYTES); > - dst += G723_PERIOD_BYTES; > } > > return 0; > @@ -263,8 +236,7 @@ static const struct snd_pcm_ops snd_solo_pcm_ops = { > .prepare = snd_solo_pcm_prepare, > .trigger = snd_solo_pcm_trigger, > .pointer = snd_solo_pcm_pointer, > - .copy_user = snd_solo_pcm_copy_user, > - .copy_kernel = snd_solo_pcm_copy_kernel, > + .copy = snd_solo_pcm_copy, > }; > > static int snd_solo_capture_volume_info(struct snd_kcontrol *kcontrol, > -- > 2.35.3 > Signed-off-by: Ismael Luceno <ismael@iodev.co.uk>
On Mon, 14 Aug 2023 14:15:18 +0200, Ismael Luceno wrote: > > On 14/Aug/2023 13:55, Takashi Iwai wrote: > > This patch converts the solo6x10 driver code to use the new unified > > PCM copy callback. It's a straightforward conversion from *_user() to > > *_iter() variants. As copy_to_iter() updates the internal offest at > > each write, we can drop the dst counter update in the loop, too. > > > > Note that copy_from/to_iter() returns the copied bytes, hence the > > error condition is inverted from copy_from/to_user(). > > > > Cc: Bluecherry Maintainers <maintainers@bluecherrydvr.com> > > Cc: Anton Sviridenko <anton@corp.bluecherry.net> > > Cc: Andrey Utkin <andrey_utkin@fastmail.com> > > Cc: Ismael Luceno <ismael@iodev.co.uk> > > Cc: Mauro Carvalho Chehab <mchehab@kernel.org> > > Cc: linux-media@vger.kernel.org > > Signed-off-by: Takashi Iwai <tiwai@suse.de> > > --- > > drivers/media/pci/solo6x10/solo6x10-g723.c | 38 +++------------------- > > 1 file changed, 5 insertions(+), 33 deletions(-) > > > > diff --git a/drivers/media/pci/solo6x10/solo6x10-g723.c b/drivers/media/pci/solo6x10/solo6x10-g723.c > > index 6cebad665565..aceacb822cab 100644 > > --- a/drivers/media/pci/solo6x10/solo6x10-g723.c > > +++ b/drivers/media/pci/solo6x10/solo6x10-g723.c > > @@ -204,9 +204,9 @@ static snd_pcm_uframes_t snd_solo_pcm_pointer(struct snd_pcm_substream *ss) > > return idx * G723_FRAMES_PER_PAGE; > > } > > > > -static int snd_solo_pcm_copy_user(struct snd_pcm_substream *ss, int channel, > > - unsigned long pos, void __user *dst, > > - unsigned long count) > > +static int snd_solo_pcm_copy(struct snd_pcm_substream *ss, int channel, > > + unsigned long pos, struct iov_iter *dst, > > + unsigned long count) > > { > > struct solo_snd_pcm *solo_pcm = snd_pcm_substream_chip(ss); > > struct solo_dev *solo_dev = solo_pcm->solo_dev; > > @@ -223,35 +223,8 @@ static int snd_solo_pcm_copy_user(struct snd_pcm_substream *ss, int channel, > > if (err) > > return err; > > > > - if (copy_to_user(dst, solo_pcm->g723_buf, G723_PERIOD_BYTES)) > > + if (!copy_to_iter(solo_pcm->g723_buf, G723_PERIOD_BYTES, dst)) > > return -EFAULT; > > - dst += G723_PERIOD_BYTES; > > - } > > - > > - return 0; > > -} > > - > > -static int snd_solo_pcm_copy_kernel(struct snd_pcm_substream *ss, int channel, > > - unsigned long pos, void *dst, > > - unsigned long count) > > -{ > > - struct solo_snd_pcm *solo_pcm = snd_pcm_substream_chip(ss); > > - struct solo_dev *solo_dev = solo_pcm->solo_dev; > > - int err, i; > > - > > - for (i = 0; i < (count / G723_FRAMES_PER_PAGE); i++) { > > - int page = (pos / G723_FRAMES_PER_PAGE) + i; > > - > > - err = solo_p2m_dma_t(solo_dev, 0, solo_pcm->g723_dma, > > - SOLO_G723_EXT_ADDR(solo_dev) + > > - (page * G723_PERIOD_BLOCK) + > > - (ss->number * G723_PERIOD_BYTES), > > - G723_PERIOD_BYTES, 0, 0); > > - if (err) > > - return err; > > - > > - memcpy(dst, solo_pcm->g723_buf, G723_PERIOD_BYTES); > > - dst += G723_PERIOD_BYTES; > > } > > > > return 0; > > @@ -263,8 +236,7 @@ static const struct snd_pcm_ops snd_solo_pcm_ops = { > > .prepare = snd_solo_pcm_prepare, > > .trigger = snd_solo_pcm_trigger, > > .pointer = snd_solo_pcm_pointer, > > - .copy_user = snd_solo_pcm_copy_user, > > - .copy_kernel = snd_solo_pcm_copy_kernel, > > + .copy = snd_solo_pcm_copy, > > }; > > > > static int snd_solo_capture_volume_info(struct snd_kcontrol *kcontrol, > > -- > > 2.35.3 > > > > Signed-off-by: Ismael Luceno <ismael@iodev.co.uk> You meant Reviewed-by or Acked-by? Signed-off-by is a tag used when you carry a patch. thanks, Takashi
On 14/Aug/2023 14:17, Takashi Iwai wrote: > On Mon, 14 Aug 2023 14:15:18 +0200, > Ismael Luceno wrote: > > > > On 14/Aug/2023 13:55, Takashi Iwai wrote: > > > This patch converts the solo6x10 driver code to use the new unified > > > PCM copy callback. It's a straightforward conversion from *_user() to > > > *_iter() variants. As copy_to_iter() updates the internal offest at > > > each write, we can drop the dst counter update in the loop, too. > > > > > > Note that copy_from/to_iter() returns the copied bytes, hence the > > > error condition is inverted from copy_from/to_user(). > > > > > > Cc: Bluecherry Maintainers <maintainers@bluecherrydvr.com> > > > Cc: Anton Sviridenko <anton@corp.bluecherry.net> > > > Cc: Andrey Utkin <andrey_utkin@fastmail.com> > > > Cc: Ismael Luceno <ismael@iodev.co.uk> > > > Cc: Mauro Carvalho Chehab <mchehab@kernel.org> > > > Cc: linux-media@vger.kernel.org > > > Signed-off-by: Takashi Iwai <tiwai@suse.de> > > > --- > > > drivers/media/pci/solo6x10/solo6x10-g723.c | 38 +++------------------- > > > 1 file changed, 5 insertions(+), 33 deletions(-) > > > > > > diff --git a/drivers/media/pci/solo6x10/solo6x10-g723.c b/drivers/media/pci/solo6x10/solo6x10-g723.c > > > index 6cebad665565..aceacb822cab 100644 > > > --- a/drivers/media/pci/solo6x10/solo6x10-g723.c > > > +++ b/drivers/media/pci/solo6x10/solo6x10-g723.c > > > @@ -204,9 +204,9 @@ static snd_pcm_uframes_t snd_solo_pcm_pointer(struct snd_pcm_substream *ss) > > > return idx * G723_FRAMES_PER_PAGE; > > > } > > > > > > -static int snd_solo_pcm_copy_user(struct snd_pcm_substream *ss, int channel, > > > - unsigned long pos, void __user *dst, > > > - unsigned long count) > > > +static int snd_solo_pcm_copy(struct snd_pcm_substream *ss, int channel, > > > + unsigned long pos, struct iov_iter *dst, > > > + unsigned long count) > > > { > > > struct solo_snd_pcm *solo_pcm = snd_pcm_substream_chip(ss); > > > struct solo_dev *solo_dev = solo_pcm->solo_dev; > > > @@ -223,35 +223,8 @@ static int snd_solo_pcm_copy_user(struct snd_pcm_substream *ss, int channel, > > > if (err) > > > return err; > > > > > > - if (copy_to_user(dst, solo_pcm->g723_buf, G723_PERIOD_BYTES)) > > > + if (!copy_to_iter(solo_pcm->g723_buf, G723_PERIOD_BYTES, dst)) > > > return -EFAULT; > > > - dst += G723_PERIOD_BYTES; > > > - } > > > - > > > - return 0; > > > -} > > > - > > > -static int snd_solo_pcm_copy_kernel(struct snd_pcm_substream *ss, int channel, > > > - unsigned long pos, void *dst, > > > - unsigned long count) > > > -{ > > > - struct solo_snd_pcm *solo_pcm = snd_pcm_substream_chip(ss); > > > - struct solo_dev *solo_dev = solo_pcm->solo_dev; > > > - int err, i; > > > - > > > - for (i = 0; i < (count / G723_FRAMES_PER_PAGE); i++) { > > > - int page = (pos / G723_FRAMES_PER_PAGE) + i; > > > - > > > - err = solo_p2m_dma_t(solo_dev, 0, solo_pcm->g723_dma, > > > - SOLO_G723_EXT_ADDR(solo_dev) + > > > - (page * G723_PERIOD_BLOCK) + > > > - (ss->number * G723_PERIOD_BYTES), > > > - G723_PERIOD_BYTES, 0, 0); > > > - if (err) > > > - return err; > > > - > > > - memcpy(dst, solo_pcm->g723_buf, G723_PERIOD_BYTES); > > > - dst += G723_PERIOD_BYTES; > > > } > > > > > > return 0; > > > @@ -263,8 +236,7 @@ static const struct snd_pcm_ops snd_solo_pcm_ops = { > > > .prepare = snd_solo_pcm_prepare, > > > .trigger = snd_solo_pcm_trigger, > > > .pointer = snd_solo_pcm_pointer, > > > - .copy_user = snd_solo_pcm_copy_user, > > > - .copy_kernel = snd_solo_pcm_copy_kernel, > > > + .copy = snd_solo_pcm_copy, > > > }; > > > > > > static int snd_solo_capture_volume_info(struct snd_kcontrol *kcontrol, > > > -- > > > 2.35.3 > > > > > > > Signed-off-by: Ismael Luceno <ismael@iodev.co.uk> > > You meant Reviewed-by or Acked-by? Signed-off-by is a tag used when > you carry a patch. > > > thanks, > > Takashi Yes, sorry, I meant "Acked-by".
On Mon, Aug 14, 2023 at 01:55:17PM +0200, Takashi Iwai wrote: > This patch converts the mediatek BT SCO driver code to use the new > unified PCM copy callback. It's a straightforward conversion from > *_user() to *_iter() variants. As copy_form/to_iter() updates the > internal offset at each read/write, we can drop the cur_*_idx counter > in the loop, too. Reviewed-by: Mark Brown <broonie@kernel.org>
On Mon, Aug 14, 2023 at 01:55:20PM +0200, Takashi Iwai wrote: > Along with the conversion to PCM copy ops, use the iov_iter for the > pointer to be passed to the dmaengine process callback, too. It > avoids the direct reference of iter_iov_addr(), and it can potentially > help for the drivers to access memory properly (although both atmel > and stm drivers don't use the given buffer address at all for now). Reviewed-by: Mark Brown <broonie@kernel.org>