From patchwork Mon Feb 22 15:32:31 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mauro Carvalho Chehab X-Patchwork-Id: 8379081 Return-Path: X-Original-To: patchwork-linux-media@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork1.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.136]) by patchwork1.web.kernel.org (Postfix) with ESMTP id 227B19F372 for ; Mon, 22 Feb 2016 15:32:51 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id DC48C20304 for ; Mon, 22 Feb 2016 15:32:49 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 7B45420383 for ; Mon, 22 Feb 2016 15:32:48 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753987AbcBVPcm (ORCPT ); Mon, 22 Feb 2016 10:32:42 -0500 Received: from bombadil.infradead.org ([198.137.202.9]:43430 "EHLO bombadil.infradead.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752849AbcBVPck (ORCPT ); Mon, 22 Feb 2016 10:32:40 -0500 Received: from [179.182.161.166] (helo=smtp.w2.samsung.com) by bombadil.infradead.org with esmtpsa (Exim 4.80.1 #2 (Red Hat Linux)) id 1aXsTV-0004Ak-Vg; Mon, 22 Feb 2016 15:32:38 +0000 Received: from mchehab by smtp.w2.samsung.com with local (Exim 4.86) (envelope-from ) id 1aXsTQ-0001aS-LN; Mon, 22 Feb 2016 12:32:32 -0300 From: Mauro Carvalho Chehab Cc: Mauro Carvalho Chehab , Linux Media Mailing List , Mauro Carvalho Chehab , Antti Palosaari , Geunyoung Kim , Andrew Morton , Junghak Sung , Hans Verkuil , =?UTF-8?q?Rafael=20Louren=C3=A7o=20de=20Lima=20Chehab?= , Javier Martinez Canillas , Sakari Ailus , Matthias Schwarzott , Tommi Rantala , Arnd Bergmann , Olli Salonen , Luis de Bethencourt , Patrick Boettcher Subject: [PATCH 2/2] [media] media_device: move allocation out of media_device_*_init Date: Mon, 22 Feb 2016 12:32:31 -0300 Message-Id: X-Mailer: git-send-email 2.5.0 In-Reply-To: References: In-Reply-To: References: To: unlisted-recipients:; (no To-header on input) Sender: linux-media-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-media@vger.kernel.org X-Spam-Status: No, score=-6.9 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_HI, RP_MATCHES_RCVD, UNPARSEABLE_RELAY autolearn=unavailable version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP Right now, media_device_pci_init and media_device_usb_init does media_device allocation internaly. That preents its usage when the media_device struct is embedded on some other structure. Move memory allocation outside it, to make it more generic. Signed-off-by: Mauro Carvalho Chehab --- drivers/media/media-device.c | 32 +++++++---------------------- drivers/media/pci/saa7134/saa7134-core.c | 3 ++- drivers/media/usb/au0828/au0828-core.c | 10 +++++---- drivers/media/usb/cx231xx/cx231xx-cards.c | 4 +++- drivers/media/usb/dvb-usb-v2/dvb_usb_core.c | 4 +++- drivers/media/usb/dvb-usb/dvb-usb-dvb.c | 6 +++++- drivers/media/usb/em28xx/em28xx-cards.c | 16 +++++++-------- drivers/media/usb/siano/smsusb.c | 4 +++- include/media/media-device.h | 32 ++++++++++++++++------------- 9 files changed, 55 insertions(+), 56 deletions(-) diff --git a/drivers/media/media-device.c b/drivers/media/media-device.c index fe376b6b5244..6613723f5eb8 100644 --- a/drivers/media/media-device.c +++ b/drivers/media/media-device.c @@ -755,16 +755,11 @@ struct media_device *media_device_find_devres(struct device *dev) } EXPORT_SYMBOL_GPL(media_device_find_devres); -struct media_device *media_device_pci_init(struct pci_dev *pci_dev, - const char *name) +void media_device_pci_init(struct media_device *mdev, + struct pci_dev *pci_dev, + const char *name) { #ifdef CONFIG_PCI - struct media_device *mdev; - - mdev = kzalloc(sizeof(*mdev), GFP_KERNEL); - if (!mdev) - return NULL; - mdev->dev = &pci_dev->dev; if (name) @@ -780,25 +775,16 @@ struct media_device *media_device_pci_init(struct pci_dev *pci_dev, mdev->driver_version = LINUX_VERSION_CODE; media_device_init(mdev); - - return mdev; -#else - return NULL; #endif } EXPORT_SYMBOL_GPL(media_device_pci_init); -struct media_device *__media_device_usb_init(struct usb_device *udev, - const char *board_name, - const char *driver_name) +void __media_device_usb_init(struct media_device *mdev, + struct usb_device *udev, + const char *board_name, + const char *driver_name) { #ifdef CONFIG_USB - struct media_device *mdev; - - mdev = kzalloc(sizeof(*mdev), GFP_KERNEL); - if (!mdev) - return NULL; - mdev->dev = &udev->dev; if (driver_name) @@ -818,10 +804,6 @@ struct media_device *__media_device_usb_init(struct usb_device *udev, mdev->driver_version = LINUX_VERSION_CODE; media_device_init(mdev); - - return mdev; -#else - return NULL; #endif } EXPORT_SYMBOL_GPL(__media_device_usb_init); diff --git a/drivers/media/pci/saa7134/saa7134-core.c b/drivers/media/pci/saa7134/saa7134-core.c index 8ae65bb320a3..2e77a5a80119 100644 --- a/drivers/media/pci/saa7134/saa7134-core.c +++ b/drivers/media/pci/saa7134/saa7134-core.c @@ -1043,11 +1043,12 @@ static int saa7134_initdev(struct pci_dev *pci_dev, sprintf(dev->name, "saa%x[%d]", pci_dev->device, dev->nr); #ifdef CONFIG_MEDIA_CONTROLLER - dev->media_dev = media_device_pci_init(pci_dev, dev->name); + dev->media_dev = kzalloc(sizeof(*dev->media_dev), GFP_KERNEL); if (!dev->media_dev) { err = -ENOMEM; goto fail0; } + media_device_pci_init(dev->media_dev, pci_dev, dev->name); dev->v4l2_dev.mdev = dev->media_dev; #endif diff --git a/drivers/media/usb/au0828/au0828-core.c b/drivers/media/usb/au0828/au0828-core.c index cfcd08ec388f..5fea4adef90b 100644 --- a/drivers/media/usb/au0828/au0828-core.c +++ b/drivers/media/usb/au0828/au0828-core.c @@ -191,12 +191,14 @@ static int au0828_media_device_init(struct au0828_dev *dev, #ifdef CONFIG_MEDIA_CONTROLLER struct media_device *mdev; + mdev = kzalloc(sizeof(*mdev), GFP_KERNEL); + if (!mdev) + return -ENOMEM; + if (!dev->board.name) - mdev = media_device_usb_init(udev, "unknown au0828"); + media_device_usb_init(mdev, udev, "unknown au0828"); else - mdev = media_device_usb_init(udev, dev->board.name); - if (!mdev) - return -ENOMEM; + media_device_usb_init(mdev, udev, dev->board.name); dev->media_dev = mdev; #endif diff --git a/drivers/media/usb/cx231xx/cx231xx-cards.c b/drivers/media/usb/cx231xx/cx231xx-cards.c index 29bd7536feed..c63248a18823 100644 --- a/drivers/media/usb/cx231xx/cx231xx-cards.c +++ b/drivers/media/usb/cx231xx/cx231xx-cards.c @@ -1212,10 +1212,12 @@ static int cx231xx_media_device_init(struct cx231xx *dev, #ifdef CONFIG_MEDIA_CONTROLLER struct media_device *mdev; - mdev = media_device_usb_init(udev, dev->board.name); + mdev = kzalloc(sizeof(*mdev), GFP_KERNEL); if (!mdev) return -ENOMEM; + media_device_usb_init(mdev, udev, dev->board.name); + dev->media_dev = mdev; #endif return 0; diff --git a/drivers/media/usb/dvb-usb-v2/dvb_usb_core.c b/drivers/media/usb/dvb-usb-v2/dvb_usb_core.c index 58250250a443..3fbb2cd19f5e 100644 --- a/drivers/media/usb/dvb-usb-v2/dvb_usb_core.c +++ b/drivers/media/usb/dvb-usb-v2/dvb_usb_core.c @@ -408,10 +408,12 @@ static int dvb_usbv2_media_device_init(struct dvb_usb_adapter *adap) struct dvb_usb_device *d = adap_to_d(adap); struct usb_device *udev = d->udev; - mdev = media_device_usb_init(udev, d->name); + mdev = kzalloc(sizeof(*mdev), GFP_KERNEL); if (!mdev) return -ENOMEM; + media_device_usb_init(mdev, udev, d->name); + dvb_register_media_controller(&adap->dvb_adap, mdev); dev_info(&d->udev->dev, "media controller created\n"); diff --git a/drivers/media/usb/dvb-usb/dvb-usb-dvb.c b/drivers/media/usb/dvb-usb/dvb-usb-dvb.c index 7509408b0b8e..6477b04e95c7 100644 --- a/drivers/media/usb/dvb-usb/dvb-usb-dvb.c +++ b/drivers/media/usb/dvb-usb/dvb-usb-dvb.c @@ -103,7 +103,11 @@ static int dvb_usb_media_device_init(struct dvb_usb_adapter *adap) struct dvb_usb_device *d = adap->dev; struct usb_device *udev = d->udev; - mdev = media_device_usb_init(udev, d->desc->name); + mdev = kzalloc(sizeof(*mdev), GFP_KERNEL); + if (!mdev) + return -ENOMEM; + + media_device_usb_init(mdev, udev, d->desc->name); dvb_register_media_controller(&adap->dvb_adap, mdev); diff --git a/drivers/media/usb/em28xx/em28xx-cards.c b/drivers/media/usb/em28xx/em28xx-cards.c index 0bae26325253..1f4047b3f3f7 100644 --- a/drivers/media/usb/em28xx/em28xx-cards.c +++ b/drivers/media/usb/em28xx/em28xx-cards.c @@ -3019,17 +3019,17 @@ static int em28xx_media_device_init(struct em28xx *dev, #ifdef CONFIG_MEDIA_CONTROLLER struct media_device *mdev; - if (udev->product) { - mdev = media_device_usb_init(udev, udev->product); - } else if (udev->manufacturer) { - mdev = media_device_usb_init(udev, udev->manufacturer); - } else { - mdev = media_device_usb_init(udev, dev->name); - } - + mdev = kzalloc(sizeof(*mdev), GFP_KERNEL); if (!mdev) return -ENOMEM; + if (udev->product) + media_device_usb_init(mdev, udev, udev->product); + else if (udev->manufacturer) + media_device_usb_init(mdev, udev, udev->manufacturer); + else + media_device_usb_init(mdev, udev, dev->name); + dev->media_dev = mdev; #endif return 0; diff --git a/drivers/media/usb/siano/smsusb.c b/drivers/media/usb/siano/smsusb.c index 4a0def1e1528..c2e25876e93b 100644 --- a/drivers/media/usb/siano/smsusb.c +++ b/drivers/media/usb/siano/smsusb.c @@ -367,10 +367,12 @@ static void *siano_media_device_register(struct smsusb_device_t *dev, struct sms_board *board = sms_get_board(board_id); int ret; - mdev = media_device_usb_init(udev, board->name); + mdev = kzalloc(sizeof(*mdev), GFP_KERNEL); if (!mdev) return NULL; + media_device_usb_init(mdev, udev, board->name); + ret = media_device_register(mdev); if (ret) { media_device_cleanup(mdev); diff --git a/include/media/media-device.h b/include/media/media-device.h index 2d144fed936e..49dda6c7e664 100644 --- a/include/media/media-device.h +++ b/include/media/media-device.h @@ -550,16 +550,19 @@ struct media_device *media_device_find_devres(struct device *dev); * media_device_pci_init() - create and initialize a * struct &media_device from a PCI device. * + * @mdev: pointer to struct &media_device * @pci_dev: pointer to struct pci_dev * @name: media device name. If %NULL, the routine will use the default * name for the pci device, given by pci_name() macro. */ -struct media_device *media_device_pci_init(struct pci_dev *pci_dev, - const char *name); +void media_device_pci_init(struct media_device *mdev, + struct pci_dev *pci_dev, + const char *name); /** * __media_device_usb_init() - create and initialize a * struct &media_device from a PCI device. * + * @mdev: pointer to struct &media_device * @udev: pointer to struct usb_device * @board_name: media device name. If %NULL, the routine will use the usb * product name, if available. @@ -570,9 +573,10 @@ struct media_device *media_device_pci_init(struct pci_dev *pci_dev, * NOTE: It is better to call media_device_usb_init() instead, as * such macro fills driver_name with %KBUILD_MODNAME. */ -struct media_device *__media_device_usb_init(struct usb_device *udev, - const char *board_name, - const char *driver_name); +void __media_device_usb_init(struct media_device *mdev, + struct usb_device *udev, + const char *board_name, + const char *driver_name); #else static inline int media_device_register(struct media_device *mdev) @@ -599,24 +603,24 @@ static inline struct media_device *media_device_find_devres(struct device *dev) return NULL; } -static inline -struct media_device *media_device_pci_init(struct pci_dev *pci_dev, - char *name) +static inline void media_device_pci_init(struct media_device *mdev, + struct pci_dev *pci_dev, + char *name) { return NULL; } -static inline -struct media_device *__media_device_usb_init(struct usb_device *udev, - char *board_name, - char *driver_name) +static inline void __media_device_usb_init(struct media_device *mdev, + struct usb_device *udev, + char *board_name, + char *driver_name) { return NULL; } #endif /* CONFIG_MEDIA_CONTROLLER */ -#define media_device_usb_init(udev, name) \ - __media_device_usb_init(udev, name, KBUILD_MODNAME) +#define media_device_usb_init(mdev, udev, name) \ + __media_device_usb_init(mdev, udev, name, KBUILD_MODNAME) #endif