* [Linux-kernel-mentees] [PATCH v2 0/6] [media] pci: use generic power management
From: Vaibhav Gupta @ 2020-07-17 3:56 UTC (permalink / raw)
To: Bjorn Helgaas, Bjorn Helgaas, Bjorn Helgaas, Vaibhav Gupta,
Mauro Carvalho Chehab
Cc: linux-media, linux-kernel-mentees, linux-kernel, Vaibhav Gupta
Linux Kernel Mentee: Remove Legacy Power Management.
The purpose of this patch series is to upgrade power management in media
drivers. This has been done by upgrading .suspend() and .resume() callbacks.
The upgrade makes sure that the involvement of PCI Core does not change the
order of operations executed in a driver. Thus, does not change its behavior.
In general, drivers with legacy PM, .suspend() and .resume() make use of PCI
helper functions like pci_enable/disable_device_mem(), pci_set_power_state(),
pci_save/restore_state(), pci_enable/disable_device(), etc. to complete
their job.
The conversion requires the removal of those function calls, change the
callbacks' definition accordingly and make use of dev_pm_ops structure.
v2: v1 possibly broke cx23885 and cx25821.
All patches are compile-tested only.
Test tools:
- Compiler: gcc (GCC) 10.1.0
- allmodconfig build: make -j$(nproc) W=1 all
Vaibhav Gupta (6):
sta2x11: use generic power management
cx23885: use generic power management
cx25821: use generic power management
cx88: use generic power management
meye: use generic power management
tw68: use generic power management
drivers/media/pci/cx23885/cx23885-core.c | 3 --
drivers/media/pci/cx25821/cx25821-core.c | 3 --
drivers/media/pci/cx88/cx88-video.c | 52 +++++--------------
drivers/media/pci/meye/meye.c | 15 ++----
drivers/media/pci/sta2x11/sta2x11_vip.c | 63 ++++++------------------
drivers/media/pci/tw68/tw68-core.c | 30 +++++------
6 files changed, 44 insertions(+), 122 deletions(-)
--
2.27.0
_______________________________________________
Linux-kernel-mentees mailing list
Linux-kernel-mentees@lists.linuxfoundation.org
https://lists.linuxfoundation.org/mailman/listinfo/linux-kernel-mentees
^ permalink raw reply
* [PATCH v2 0/6] [media] pci: use generic power management
From: Vaibhav Gupta @ 2020-07-17 3:56 UTC (permalink / raw)
To: Bjorn Helgaas, Bjorn Helgaas, Bjorn Helgaas, Vaibhav Gupta,
Mauro Carvalho Chehab
Cc: Vaibhav Gupta, linux-kernel, linux-media, linux-kernel-mentees,
Shuah Khan
Linux Kernel Mentee: Remove Legacy Power Management.
The purpose of this patch series is to upgrade power management in media
drivers. This has been done by upgrading .suspend() and .resume() callbacks.
The upgrade makes sure that the involvement of PCI Core does not change the
order of operations executed in a driver. Thus, does not change its behavior.
In general, drivers with legacy PM, .suspend() and .resume() make use of PCI
helper functions like pci_enable/disable_device_mem(), pci_set_power_state(),
pci_save/restore_state(), pci_enable/disable_device(), etc. to complete
their job.
The conversion requires the removal of those function calls, change the
callbacks' definition accordingly and make use of dev_pm_ops structure.
v2: v1 possibly broke cx23885 and cx25821.
All patches are compile-tested only.
Test tools:
- Compiler: gcc (GCC) 10.1.0
- allmodconfig build: make -j$(nproc) W=1 all
Vaibhav Gupta (6):
sta2x11: use generic power management
cx23885: use generic power management
cx25821: use generic power management
cx88: use generic power management
meye: use generic power management
tw68: use generic power management
drivers/media/pci/cx23885/cx23885-core.c | 3 --
drivers/media/pci/cx25821/cx25821-core.c | 3 --
drivers/media/pci/cx88/cx88-video.c | 52 +++++--------------
drivers/media/pci/meye/meye.c | 15 ++----
drivers/media/pci/sta2x11/sta2x11_vip.c | 63 ++++++------------------
drivers/media/pci/tw68/tw68-core.c | 30 +++++------
6 files changed, 44 insertions(+), 122 deletions(-)
--
2.27.0
^ permalink raw reply
* drivers/video/fbdev/aty/atyfb_base.c:3715:37: sparse: sparse: incorrect type in argument 1 (different address spaces)
From: kernel test robot @ 2020-07-17 3:58 UTC (permalink / raw)
To: kbuild-all
[-- Attachment #1: Type: text/plain, Size: 6639 bytes --]
tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head: 07a56bb875afbe39dabbf6ba7b83783d166863db
commit: 670d0a4b10704667765f7d18f7592993d02783aa sparse: use identifiers to define address spaces
date: 4 weeks ago
config: arc-randconfig-s032-20200717 (attached as .config)
compiler: arc-elf-gcc (GCC) 9.3.0
reproduce:
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# apt-get install sparse
# sparse version: v0.6.2-49-g707c5017-dirty
git checkout 670d0a4b10704667765f7d18f7592993d02783aa
# save the attached .config to linux build tree
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' ARCH=arc
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
sparse warnings: (new ones prefixed by >>)
>> drivers/video/fbdev/aty/atyfb_base.c:3715:37: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const [noderef] __iomem *addr @@ got unsigned char [usertype] *addr @@
>> drivers/video/fbdev/aty/atyfb_base.c:3715:37: sparse: expected void const [noderef] __iomem *addr
drivers/video/fbdev/aty/atyfb_base.c:3715:37: sparse: got unsigned char [usertype] *addr
--
>> sound/pci/echoaudio/echoaudio.c:1824:21: sparse: sparse: incorrect type in argument 1 (different modifiers) @@ expected void const [noderef] __iomem *addr @@ got unsigned int volatile [noderef] [usertype] __iomem *dsp_registers @@
>> sound/pci/echoaudio/echoaudio.c:1824:21: sparse: expected void const [noderef] __iomem *addr
sound/pci/echoaudio/echoaudio.c:1824:21: sparse: got unsigned int volatile [noderef] [usertype] __iomem *dsp_registers
vim +3715 drivers/video/fbdev/aty/atyfb_base.c
c98959f566e0c6 drivers/video/aty/atyfb_base.c Ville Syrjala 2006-12-08 3691
48c68c4f1b5424 drivers/video/aty/atyfb_base.c Greg Kroah-Hartman 2012-12-21 3692 static void atyfb_remove(struct fb_info *info)
^1da177e4c3f41 drivers/video/aty/atyfb_base.c Linus Torvalds 2005-04-16 3693 {
^1da177e4c3f41 drivers/video/aty/atyfb_base.c Linus Torvalds 2005-04-16 3694 struct atyfb_par *par = (struct atyfb_par *) info->par;
^1da177e4c3f41 drivers/video/aty/atyfb_base.c Linus Torvalds 2005-04-16 3695
^1da177e4c3f41 drivers/video/aty/atyfb_base.c Linus Torvalds 2005-04-16 3696 /* restore video mode */
eafad22a05fdac drivers/video/aty/atyfb_base.c Ville Syrjala 2009-06-30 3697 aty_set_crtc(par, &par->saved_crtc);
eafad22a05fdac drivers/video/aty/atyfb_base.c Ville Syrjala 2009-06-30 3698 par->pll_ops->set_pll(info, &par->saved_pll);
^1da177e4c3f41 drivers/video/aty/atyfb_base.c Linus Torvalds 2005-04-16 3699
37ce69a57ff217 drivers/video/aty/atyfb_base.c Richard Purdie 2007-02-10 3700 unregister_framebuffer(info);
37ce69a57ff217 drivers/video/aty/atyfb_base.c Richard Purdie 2007-02-10 3701
5474c120aafe78 drivers/video/aty/atyfb_base.c Michael Hanselmann 2006-06-25 3702 #ifdef CONFIG_FB_ATY_BACKLIGHT
5474c120aafe78 drivers/video/aty/atyfb_base.c Michael Hanselmann 2006-06-25 3703 if (M64_HAS(MOBIL_BUS))
37ce69a57ff217 drivers/video/aty/atyfb_base.c Richard Purdie 2007-02-10 3704 aty_bl_exit(info->bl_dev);
5474c120aafe78 drivers/video/aty/atyfb_base.c Michael Hanselmann 2006-06-25 3705 #endif
7d89a3cb159aec drivers/video/fbdev/aty/atyfb_base.c Luis R. Rodriguez 2015-07-09 3706 arch_phys_wc_del(par->wc_cookie);
5474c120aafe78 drivers/video/aty/atyfb_base.c Michael Hanselmann 2006-06-25 3707
^1da177e4c3f41 drivers/video/aty/atyfb_base.c Linus Torvalds 2005-04-16 3708 #ifndef __sparc__
^1da177e4c3f41 drivers/video/aty/atyfb_base.c Linus Torvalds 2005-04-16 3709 if (par->ati_regbase)
^1da177e4c3f41 drivers/video/aty/atyfb_base.c Linus Torvalds 2005-04-16 3710 iounmap(par->ati_regbase);
^1da177e4c3f41 drivers/video/aty/atyfb_base.c Linus Torvalds 2005-04-16 3711 if (info->screen_base)
^1da177e4c3f41 drivers/video/aty/atyfb_base.c Linus Torvalds 2005-04-16 3712 iounmap(info->screen_base);
^1da177e4c3f41 drivers/video/aty/atyfb_base.c Linus Torvalds 2005-04-16 3713 #ifdef __BIG_ENDIAN
^1da177e4c3f41 drivers/video/aty/atyfb_base.c Linus Torvalds 2005-04-16 3714 if (info->sprite.addr)
^1da177e4c3f41 drivers/video/aty/atyfb_base.c Linus Torvalds 2005-04-16 @3715 iounmap(info->sprite.addr);
^1da177e4c3f41 drivers/video/aty/atyfb_base.c Linus Torvalds 2005-04-16 3716 #endif
^1da177e4c3f41 drivers/video/aty/atyfb_base.c Linus Torvalds 2005-04-16 3717 #endif
^1da177e4c3f41 drivers/video/aty/atyfb_base.c Linus Torvalds 2005-04-16 3718 #ifdef __sparc__
^1da177e4c3f41 drivers/video/aty/atyfb_base.c Linus Torvalds 2005-04-16 3719 kfree(par->mmap_map);
^1da177e4c3f41 drivers/video/aty/atyfb_base.c Linus Torvalds 2005-04-16 3720 #endif
^1da177e4c3f41 drivers/video/aty/atyfb_base.c Linus Torvalds 2005-04-16 3721 if (par->aux_start)
^1da177e4c3f41 drivers/video/aty/atyfb_base.c Linus Torvalds 2005-04-16 3722 release_mem_region(par->aux_start, par->aux_size);
^1da177e4c3f41 drivers/video/aty/atyfb_base.c Linus Torvalds 2005-04-16 3723
^1da177e4c3f41 drivers/video/aty/atyfb_base.c Linus Torvalds 2005-04-16 3724 if (par->res_start)
^1da177e4c3f41 drivers/video/aty/atyfb_base.c Linus Torvalds 2005-04-16 3725 release_mem_region(par->res_start, par->res_size);
^1da177e4c3f41 drivers/video/aty/atyfb_base.c Linus Torvalds 2005-04-16 3726
^1da177e4c3f41 drivers/video/aty/atyfb_base.c Linus Torvalds 2005-04-16 3727 framebuffer_release(info);
^1da177e4c3f41 drivers/video/aty/atyfb_base.c Linus Torvalds 2005-04-16 3728 }
^1da177e4c3f41 drivers/video/aty/atyfb_base.c Linus Torvalds 2005-04-16 3729
:::::: The code at line 3715 was first introduced by commit
:::::: 1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 Linux-2.6.12-rc2
:::::: TO: Linus Torvalds <torvalds@ppc970.osdl.org>
:::::: CC: Linus Torvalds <torvalds@ppc970.osdl.org>
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org
[-- Attachment #2: config.gz --]
[-- Type: application/gzip, Size: 31924 bytes --]
^ permalink raw reply
* [Linux-kernel-mentees] [PATCH v2 1/6] sta2x11: use generic power management
From: Vaibhav Gupta @ 2020-07-17 3:56 UTC (permalink / raw)
To: Bjorn Helgaas, Bjorn Helgaas, Bjorn Helgaas, Vaibhav Gupta,
Mauro Carvalho Chehab
Cc: linux-media, linux-kernel-mentees, linux-kernel, Vaibhav Gupta
In-Reply-To: <20200717035608.97254-1-vaibhavgupta40@gmail.com>
With legacy PM, drivers themselves were responsible for managing the
device's power states and takes care of register states.
After upgrading to the generic structure, PCI core will take care of
required tasks and drivers should do only device-specific operations.
Thus, there is no need to call the PCI helper functions like
pci_enable_device(), pci_save/restore_sate(), etc.
Compile-tested only.
Signed-off-by: Vaibhav Gupta <vaibhavgupta40@gmail.com>
---
drivers/media/pci/sta2x11/sta2x11_vip.c | 63 ++++++-------------------
1 file changed, 15 insertions(+), 48 deletions(-)
diff --git a/drivers/media/pci/sta2x11/sta2x11_vip.c b/drivers/media/pci/sta2x11/sta2x11_vip.c
index 798574cfad35..0fdb0fd6e764 100644
--- a/drivers/media/pci/sta2x11/sta2x11_vip.c
+++ b/drivers/media/pci/sta2x11/sta2x11_vip.c
@@ -1167,21 +1167,18 @@ static void sta2x11_vip_remove_one(struct pci_dev *pdev)
*/
}
-#ifdef CONFIG_PM
-
/**
* sta2x11_vip_suspend - set device into power save mode
- * @pdev: PCI device
- * @state: new state of device
+ * @dev_d: PCI device
*
* all relevant registers are saved and an attempt to set a new state is made.
*
* return value: 0 always indicate success,
* even if device could not be disabled. (workaround for hardware problem)
*/
-static int sta2x11_vip_suspend(struct pci_dev *pdev, pm_message_t state)
+static int __maybe_unused sta2x11_vip_suspend(struct device *dev_d)
{
- struct v4l2_device *v4l2_dev = pci_get_drvdata(pdev);
+ struct v4l2_device *v4l2_dev = dev_get_drvdata(dev_d);
struct sta2x11_vip *vip =
container_of(v4l2_dev, struct sta2x11_vip, v4l2_dev);
unsigned long flags;
@@ -1198,15 +1195,8 @@ static int sta2x11_vip_suspend(struct pci_dev *pdev, pm_message_t state)
vip->register_save_area[SAVE_COUNT + IRQ_COUNT + i] =
reg_read(vip, registers_to_save[i]);
spin_unlock_irqrestore(&vip->slock, flags);
- /* save pci state */
- pci_save_state(pdev);
- if (pci_set_power_state(pdev, pci_choose_state(pdev, state))) {
- /*
- * do not call pci_disable_device on sta2x11 because it
- * break all other Bus masters on this EP
- */
- vip->disabled = 1;
- }
+
+ vip->disabled = 1;
pr_info("VIP: suspend\n");
return 0;
@@ -1214,45 +1204,23 @@ static int sta2x11_vip_suspend(struct pci_dev *pdev, pm_message_t state)
/**
* sta2x11_vip_resume - resume device operation
- * @pdev : PCI device
- *
- * re-enable device, set PCI state to powered and restore registers.
- * resume normal device operation afterwards.
+ * @dev_d : PCI device
*
* return value: 0, no error.
*
* other, could not set device to power on state.
*/
-static int sta2x11_vip_resume(struct pci_dev *pdev)
+static int __maybe_unused sta2x11_vip_resume(struct device *dev_d)
{
- struct v4l2_device *v4l2_dev = pci_get_drvdata(pdev);
+ struct v4l2_device *v4l2_dev = dev_get_drvdata(dev_d);
struct sta2x11_vip *vip =
container_of(v4l2_dev, struct sta2x11_vip, v4l2_dev);
unsigned long flags;
- int ret, i;
+ int i;
pr_info("VIP: resume\n");
- /* restore pci state */
- if (vip->disabled) {
- ret = pci_enable_device(pdev);
- if (ret) {
- pr_warn("VIP: Can't enable device.\n");
- return ret;
- }
- vip->disabled = 0;
- }
- ret = pci_set_power_state(pdev, PCI_D0);
- if (ret) {
- /*
- * do not call pci_disable_device on sta2x11 because it
- * break all other Bus masters on this EP
- */
- pr_warn("VIP: Can't enable device.\n");
- vip->disabled = 1;
- return ret;
- }
- pci_restore_state(pdev);
+ vip->disabled = 0;
spin_lock_irqsave(&vip->slock, flags);
for (i = 1; i < SAVE_COUNT; i++)
@@ -1266,22 +1234,21 @@ static int sta2x11_vip_resume(struct pci_dev *pdev)
return 0;
}
-#endif
-
static const struct pci_device_id sta2x11_vip_pci_tbl[] = {
{PCI_DEVICE(PCI_VENDOR_ID_STMICRO, PCI_DEVICE_ID_STMICRO_VIP)},
{0,}
};
+static SIMPLE_DEV_PM_OPS(sta2x11_vip_pm_ops,
+ sta2x11_vip_suspend,
+ sta2x11_vip_resume);
+
static struct pci_driver sta2x11_vip_driver = {
.name = KBUILD_MODNAME,
.probe = sta2x11_vip_init_one,
.remove = sta2x11_vip_remove_one,
.id_table = sta2x11_vip_pci_tbl,
-#ifdef CONFIG_PM
- .suspend = sta2x11_vip_suspend,
- .resume = sta2x11_vip_resume,
-#endif
+ .driver.pm = &sta2x11_vip_pm_ops,
};
static int __init sta2x11_vip_init_module(void)
--
2.27.0
_______________________________________________
Linux-kernel-mentees mailing list
Linux-kernel-mentees@lists.linuxfoundation.org
https://lists.linuxfoundation.org/mailman/listinfo/linux-kernel-mentees
^ permalink raw reply related
* [PATCH v2 1/6] sta2x11: use generic power management
From: Vaibhav Gupta @ 2020-07-17 3:56 UTC (permalink / raw)
To: Bjorn Helgaas, Bjorn Helgaas, Bjorn Helgaas, Vaibhav Gupta,
Mauro Carvalho Chehab
Cc: Vaibhav Gupta, linux-kernel, linux-media, linux-kernel-mentees,
Shuah Khan
In-Reply-To: <20200717035608.97254-1-vaibhavgupta40@gmail.com>
With legacy PM, drivers themselves were responsible for managing the
device's power states and takes care of register states.
After upgrading to the generic structure, PCI core will take care of
required tasks and drivers should do only device-specific operations.
Thus, there is no need to call the PCI helper functions like
pci_enable_device(), pci_save/restore_sate(), etc.
Compile-tested only.
Signed-off-by: Vaibhav Gupta <vaibhavgupta40@gmail.com>
---
drivers/media/pci/sta2x11/sta2x11_vip.c | 63 ++++++-------------------
1 file changed, 15 insertions(+), 48 deletions(-)
diff --git a/drivers/media/pci/sta2x11/sta2x11_vip.c b/drivers/media/pci/sta2x11/sta2x11_vip.c
index 798574cfad35..0fdb0fd6e764 100644
--- a/drivers/media/pci/sta2x11/sta2x11_vip.c
+++ b/drivers/media/pci/sta2x11/sta2x11_vip.c
@@ -1167,21 +1167,18 @@ static void sta2x11_vip_remove_one(struct pci_dev *pdev)
*/
}
-#ifdef CONFIG_PM
-
/**
* sta2x11_vip_suspend - set device into power save mode
- * @pdev: PCI device
- * @state: new state of device
+ * @dev_d: PCI device
*
* all relevant registers are saved and an attempt to set a new state is made.
*
* return value: 0 always indicate success,
* even if device could not be disabled. (workaround for hardware problem)
*/
-static int sta2x11_vip_suspend(struct pci_dev *pdev, pm_message_t state)
+static int __maybe_unused sta2x11_vip_suspend(struct device *dev_d)
{
- struct v4l2_device *v4l2_dev = pci_get_drvdata(pdev);
+ struct v4l2_device *v4l2_dev = dev_get_drvdata(dev_d);
struct sta2x11_vip *vip =
container_of(v4l2_dev, struct sta2x11_vip, v4l2_dev);
unsigned long flags;
@@ -1198,15 +1195,8 @@ static int sta2x11_vip_suspend(struct pci_dev *pdev, pm_message_t state)
vip->register_save_area[SAVE_COUNT + IRQ_COUNT + i] =
reg_read(vip, registers_to_save[i]);
spin_unlock_irqrestore(&vip->slock, flags);
- /* save pci state */
- pci_save_state(pdev);
- if (pci_set_power_state(pdev, pci_choose_state(pdev, state))) {
- /*
- * do not call pci_disable_device on sta2x11 because it
- * break all other Bus masters on this EP
- */
- vip->disabled = 1;
- }
+
+ vip->disabled = 1;
pr_info("VIP: suspend\n");
return 0;
@@ -1214,45 +1204,23 @@ static int sta2x11_vip_suspend(struct pci_dev *pdev, pm_message_t state)
/**
* sta2x11_vip_resume - resume device operation
- * @pdev : PCI device
- *
- * re-enable device, set PCI state to powered and restore registers.
- * resume normal device operation afterwards.
+ * @dev_d : PCI device
*
* return value: 0, no error.
*
* other, could not set device to power on state.
*/
-static int sta2x11_vip_resume(struct pci_dev *pdev)
+static int __maybe_unused sta2x11_vip_resume(struct device *dev_d)
{
- struct v4l2_device *v4l2_dev = pci_get_drvdata(pdev);
+ struct v4l2_device *v4l2_dev = dev_get_drvdata(dev_d);
struct sta2x11_vip *vip =
container_of(v4l2_dev, struct sta2x11_vip, v4l2_dev);
unsigned long flags;
- int ret, i;
+ int i;
pr_info("VIP: resume\n");
- /* restore pci state */
- if (vip->disabled) {
- ret = pci_enable_device(pdev);
- if (ret) {
- pr_warn("VIP: Can't enable device.\n");
- return ret;
- }
- vip->disabled = 0;
- }
- ret = pci_set_power_state(pdev, PCI_D0);
- if (ret) {
- /*
- * do not call pci_disable_device on sta2x11 because it
- * break all other Bus masters on this EP
- */
- pr_warn("VIP: Can't enable device.\n");
- vip->disabled = 1;
- return ret;
- }
- pci_restore_state(pdev);
+ vip->disabled = 0;
spin_lock_irqsave(&vip->slock, flags);
for (i = 1; i < SAVE_COUNT; i++)
@@ -1266,22 +1234,21 @@ static int sta2x11_vip_resume(struct pci_dev *pdev)
return 0;
}
-#endif
-
static const struct pci_device_id sta2x11_vip_pci_tbl[] = {
{PCI_DEVICE(PCI_VENDOR_ID_STMICRO, PCI_DEVICE_ID_STMICRO_VIP)},
{0,}
};
+static SIMPLE_DEV_PM_OPS(sta2x11_vip_pm_ops,
+ sta2x11_vip_suspend,
+ sta2x11_vip_resume);
+
static struct pci_driver sta2x11_vip_driver = {
.name = KBUILD_MODNAME,
.probe = sta2x11_vip_init_one,
.remove = sta2x11_vip_remove_one,
.id_table = sta2x11_vip_pci_tbl,
-#ifdef CONFIG_PM
- .suspend = sta2x11_vip_suspend,
- .resume = sta2x11_vip_resume,
-#endif
+ .driver.pm = &sta2x11_vip_pm_ops,
};
static int __init sta2x11_vip_init_module(void)
--
2.27.0
^ permalink raw reply related
* [PATCH v2 2/6] cx23885: use generic power management
From: Vaibhav Gupta @ 2020-07-17 3:56 UTC (permalink / raw)
To: Bjorn Helgaas, Bjorn Helgaas, Bjorn Helgaas, Vaibhav Gupta,
Mauro Carvalho Chehab
Cc: Vaibhav Gupta, linux-kernel, linux-media, linux-kernel-mentees,
Shuah Khan
In-Reply-To: <20200717035608.97254-1-vaibhavgupta40@gmail.com>
The .suspend() and .resume() callbacks are not defined for this driver.
Still, their power management structure follows the legacy framework. To
bring it under the generic framework, simply remove the binding of
callbacks from struct "pci_driver".
Compile-tested only.
Signed-off-by: Vaibhav Gupta <vaibhavgupta40@gmail.com>
---
drivers/media/pci/cx23885/cx23885-core.c | 3 ---
1 file changed, 3 deletions(-)
diff --git a/drivers/media/pci/cx23885/cx23885-core.c b/drivers/media/pci/cx23885/cx23885-core.c
index 7e0b0b7cc2a3..4b0c53f61fb7 100644
--- a/drivers/media/pci/cx23885/cx23885-core.c
+++ b/drivers/media/pci/cx23885/cx23885-core.c
@@ -2235,9 +2235,6 @@ static struct pci_driver cx23885_pci_driver = {
.id_table = cx23885_pci_tbl,
.probe = cx23885_initdev,
.remove = cx23885_finidev,
- /* TODO */
- .suspend = NULL,
- .resume = NULL,
};
static int __init cx23885_init(void)
--
2.27.0
^ permalink raw reply related
* [Linux-kernel-mentees] [PATCH v2 2/6] cx23885: use generic power management
From: Vaibhav Gupta @ 2020-07-17 3:56 UTC (permalink / raw)
To: Bjorn Helgaas, Bjorn Helgaas, Bjorn Helgaas, Vaibhav Gupta,
Mauro Carvalho Chehab
Cc: linux-media, linux-kernel-mentees, linux-kernel, Vaibhav Gupta
In-Reply-To: <20200717035608.97254-1-vaibhavgupta40@gmail.com>
The .suspend() and .resume() callbacks are not defined for this driver.
Still, their power management structure follows the legacy framework. To
bring it under the generic framework, simply remove the binding of
callbacks from struct "pci_driver".
Compile-tested only.
Signed-off-by: Vaibhav Gupta <vaibhavgupta40@gmail.com>
---
drivers/media/pci/cx23885/cx23885-core.c | 3 ---
1 file changed, 3 deletions(-)
diff --git a/drivers/media/pci/cx23885/cx23885-core.c b/drivers/media/pci/cx23885/cx23885-core.c
index 7e0b0b7cc2a3..4b0c53f61fb7 100644
--- a/drivers/media/pci/cx23885/cx23885-core.c
+++ b/drivers/media/pci/cx23885/cx23885-core.c
@@ -2235,9 +2235,6 @@ static struct pci_driver cx23885_pci_driver = {
.id_table = cx23885_pci_tbl,
.probe = cx23885_initdev,
.remove = cx23885_finidev,
- /* TODO */
- .suspend = NULL,
- .resume = NULL,
};
static int __init cx23885_init(void)
--
2.27.0
_______________________________________________
Linux-kernel-mentees mailing list
Linux-kernel-mentees@lists.linuxfoundation.org
https://lists.linuxfoundation.org/mailman/listinfo/linux-kernel-mentees
^ permalink raw reply related
* [Linux-kernel-mentees] [PATCH v2 3/6] cx25821: use generic power management
From: Vaibhav Gupta @ 2020-07-17 3:56 UTC (permalink / raw)
To: Bjorn Helgaas, Bjorn Helgaas, Bjorn Helgaas, Vaibhav Gupta,
Mauro Carvalho Chehab
Cc: linux-media, linux-kernel-mentees, linux-kernel, Vaibhav Gupta
In-Reply-To: <20200717035608.97254-1-vaibhavgupta40@gmail.com>
The .suspend() and .resume() callbacks are not defined for this driver.
Still, their power management structure follows the legacy framework. To
bring it under the generic framework, simply remove the binding of
callbacks from struct "pci_driver".
Compile-tested only.
Signed-off-by: Vaibhav Gupta <vaibhavgupta40@gmail.com>
---
drivers/media/pci/cx25821/cx25821-core.c | 3 ---
1 file changed, 3 deletions(-)
diff --git a/drivers/media/pci/cx25821/cx25821-core.c b/drivers/media/pci/cx25821/cx25821-core.c
index 41be22ce66f3..55018d9e439f 100644
--- a/drivers/media/pci/cx25821/cx25821-core.c
+++ b/drivers/media/pci/cx25821/cx25821-core.c
@@ -1374,9 +1374,6 @@ static struct pci_driver cx25821_pci_driver = {
.id_table = cx25821_pci_tbl,
.probe = cx25821_initdev,
.remove = cx25821_finidev,
- /* TODO */
- .suspend = NULL,
- .resume = NULL,
};
static int __init cx25821_init(void)
--
2.27.0
_______________________________________________
Linux-kernel-mentees mailing list
Linux-kernel-mentees@lists.linuxfoundation.org
https://lists.linuxfoundation.org/mailman/listinfo/linux-kernel-mentees
^ permalink raw reply related
* [PATCH v2 3/6] cx25821: use generic power management
From: Vaibhav Gupta @ 2020-07-17 3:56 UTC (permalink / raw)
To: Bjorn Helgaas, Bjorn Helgaas, Bjorn Helgaas, Vaibhav Gupta,
Mauro Carvalho Chehab
Cc: Vaibhav Gupta, linux-kernel, linux-media, linux-kernel-mentees,
Shuah Khan
In-Reply-To: <20200717035608.97254-1-vaibhavgupta40@gmail.com>
The .suspend() and .resume() callbacks are not defined for this driver.
Still, their power management structure follows the legacy framework. To
bring it under the generic framework, simply remove the binding of
callbacks from struct "pci_driver".
Compile-tested only.
Signed-off-by: Vaibhav Gupta <vaibhavgupta40@gmail.com>
---
drivers/media/pci/cx25821/cx25821-core.c | 3 ---
1 file changed, 3 deletions(-)
diff --git a/drivers/media/pci/cx25821/cx25821-core.c b/drivers/media/pci/cx25821/cx25821-core.c
index 41be22ce66f3..55018d9e439f 100644
--- a/drivers/media/pci/cx25821/cx25821-core.c
+++ b/drivers/media/pci/cx25821/cx25821-core.c
@@ -1374,9 +1374,6 @@ static struct pci_driver cx25821_pci_driver = {
.id_table = cx25821_pci_tbl,
.probe = cx25821_initdev,
.remove = cx25821_finidev,
- /* TODO */
- .suspend = NULL,
- .resume = NULL,
};
static int __init cx25821_init(void)
--
2.27.0
^ permalink raw reply related
* [PATCH v2 4/6] cx88: use generic power management
From: Vaibhav Gupta @ 2020-07-17 3:56 UTC (permalink / raw)
To: Bjorn Helgaas, Bjorn Helgaas, Bjorn Helgaas, Vaibhav Gupta,
Mauro Carvalho Chehab
Cc: Vaibhav Gupta, linux-kernel, linux-media, linux-kernel-mentees,
Shuah Khan
In-Reply-To: <20200717035608.97254-1-vaibhavgupta40@gmail.com>
With legacy PM, drivers themselves were responsible for managing the
device's power states and takes care of register states.
After upgrading to the generic structure, PCI core will take care of
required tasks and drivers should do only device-specific operations.
The driver was invoking PCI helper functions like pci_save/restore_state(),
pci_enable/disable_device() and pci_set_power_state(), which is not
recommended.
Compile-tested only.
Signed-off-by: Vaibhav Gupta <vaibhavgupta40@gmail.com>
---
drivers/media/pci/cx88/cx88-video.c | 52 ++++++++---------------------
1 file changed, 13 insertions(+), 39 deletions(-)
diff --git a/drivers/media/pci/cx88/cx88-video.c b/drivers/media/pci/cx88/cx88-video.c
index ba0e9660a047..a06d5b8f31b9 100644
--- a/drivers/media/pci/cx88/cx88-video.c
+++ b/drivers/media/pci/cx88/cx88-video.c
@@ -1551,10 +1551,9 @@ static void cx8800_finidev(struct pci_dev *pci_dev)
kfree(dev);
}
-#ifdef CONFIG_PM
-static int cx8800_suspend(struct pci_dev *pci_dev, pm_message_t state)
+static int __maybe_unused cx8800_suspend(struct device *dev_d)
{
- struct cx8800_dev *dev = pci_get_drvdata(pci_dev);
+ struct cx8800_dev *dev = dev_get_drvdata(dev_d);
struct cx88_core *core = dev->core;
unsigned long flags;
@@ -1575,40 +1574,17 @@ static int cx8800_suspend(struct pci_dev *pci_dev, pm_message_t state)
/* FIXME -- shutdown device */
cx88_shutdown(core);
- pci_save_state(pci_dev);
- if (pci_set_power_state(pci_dev,
- pci_choose_state(pci_dev, state)) != 0) {
- pci_disable_device(pci_dev);
- dev->state.disabled = 1;
- }
+ dev->state.disabled = 1;
return 0;
}
-static int cx8800_resume(struct pci_dev *pci_dev)
+static int __maybe_unused cx8800_resume(struct device *dev_d)
{
- struct cx8800_dev *dev = pci_get_drvdata(pci_dev);
+ struct cx8800_dev *dev = dev_get_drvdata(dev_d);
struct cx88_core *core = dev->core;
unsigned long flags;
- int err;
-
- if (dev->state.disabled) {
- err = pci_enable_device(pci_dev);
- if (err) {
- pr_err("can't enable device\n");
- return err;
- }
-
- dev->state.disabled = 0;
- }
- err = pci_set_power_state(pci_dev, PCI_D0);
- if (err) {
- pr_err("can't set power state\n");
- pci_disable_device(pci_dev);
- dev->state.disabled = 1;
- return err;
- }
- pci_restore_state(pci_dev);
+ dev->state.disabled = 0;
/* FIXME: re-initialize hardware */
cx88_reset(core);
@@ -1631,7 +1607,6 @@ static int cx8800_resume(struct pci_dev *pci_dev)
return 0;
}
-#endif
/* ----------------------------------------------------------- */
@@ -1647,15 +1622,14 @@ static const struct pci_device_id cx8800_pci_tbl[] = {
};
MODULE_DEVICE_TABLE(pci, cx8800_pci_tbl);
+static SIMPLE_DEV_PM_OPS(cx8800_pm_ops, cx8800_suspend, cx8800_resume);
+
static struct pci_driver cx8800_pci_driver = {
- .name = "cx8800",
- .id_table = cx8800_pci_tbl,
- .probe = cx8800_initdev,
- .remove = cx8800_finidev,
-#ifdef CONFIG_PM
- .suspend = cx8800_suspend,
- .resume = cx8800_resume,
-#endif
+ .name = "cx8800",
+ .id_table = cx8800_pci_tbl,
+ .probe = cx8800_initdev,
+ .remove = cx8800_finidev,
+ .driver.pm = &cx8800_pm_ops,
};
module_pci_driver(cx8800_pci_driver);
--
2.27.0
^ permalink raw reply related
* [Linux-kernel-mentees] [PATCH v2 4/6] cx88: use generic power management
From: Vaibhav Gupta @ 2020-07-17 3:56 UTC (permalink / raw)
To: Bjorn Helgaas, Bjorn Helgaas, Bjorn Helgaas, Vaibhav Gupta,
Mauro Carvalho Chehab
Cc: linux-media, linux-kernel-mentees, linux-kernel, Vaibhav Gupta
In-Reply-To: <20200717035608.97254-1-vaibhavgupta40@gmail.com>
With legacy PM, drivers themselves were responsible for managing the
device's power states and takes care of register states.
After upgrading to the generic structure, PCI core will take care of
required tasks and drivers should do only device-specific operations.
The driver was invoking PCI helper functions like pci_save/restore_state(),
pci_enable/disable_device() and pci_set_power_state(), which is not
recommended.
Compile-tested only.
Signed-off-by: Vaibhav Gupta <vaibhavgupta40@gmail.com>
---
drivers/media/pci/cx88/cx88-video.c | 52 ++++++++---------------------
1 file changed, 13 insertions(+), 39 deletions(-)
diff --git a/drivers/media/pci/cx88/cx88-video.c b/drivers/media/pci/cx88/cx88-video.c
index ba0e9660a047..a06d5b8f31b9 100644
--- a/drivers/media/pci/cx88/cx88-video.c
+++ b/drivers/media/pci/cx88/cx88-video.c
@@ -1551,10 +1551,9 @@ static void cx8800_finidev(struct pci_dev *pci_dev)
kfree(dev);
}
-#ifdef CONFIG_PM
-static int cx8800_suspend(struct pci_dev *pci_dev, pm_message_t state)
+static int __maybe_unused cx8800_suspend(struct device *dev_d)
{
- struct cx8800_dev *dev = pci_get_drvdata(pci_dev);
+ struct cx8800_dev *dev = dev_get_drvdata(dev_d);
struct cx88_core *core = dev->core;
unsigned long flags;
@@ -1575,40 +1574,17 @@ static int cx8800_suspend(struct pci_dev *pci_dev, pm_message_t state)
/* FIXME -- shutdown device */
cx88_shutdown(core);
- pci_save_state(pci_dev);
- if (pci_set_power_state(pci_dev,
- pci_choose_state(pci_dev, state)) != 0) {
- pci_disable_device(pci_dev);
- dev->state.disabled = 1;
- }
+ dev->state.disabled = 1;
return 0;
}
-static int cx8800_resume(struct pci_dev *pci_dev)
+static int __maybe_unused cx8800_resume(struct device *dev_d)
{
- struct cx8800_dev *dev = pci_get_drvdata(pci_dev);
+ struct cx8800_dev *dev = dev_get_drvdata(dev_d);
struct cx88_core *core = dev->core;
unsigned long flags;
- int err;
-
- if (dev->state.disabled) {
- err = pci_enable_device(pci_dev);
- if (err) {
- pr_err("can't enable device\n");
- return err;
- }
-
- dev->state.disabled = 0;
- }
- err = pci_set_power_state(pci_dev, PCI_D0);
- if (err) {
- pr_err("can't set power state\n");
- pci_disable_device(pci_dev);
- dev->state.disabled = 1;
- return err;
- }
- pci_restore_state(pci_dev);
+ dev->state.disabled = 0;
/* FIXME: re-initialize hardware */
cx88_reset(core);
@@ -1631,7 +1607,6 @@ static int cx8800_resume(struct pci_dev *pci_dev)
return 0;
}
-#endif
/* ----------------------------------------------------------- */
@@ -1647,15 +1622,14 @@ static const struct pci_device_id cx8800_pci_tbl[] = {
};
MODULE_DEVICE_TABLE(pci, cx8800_pci_tbl);
+static SIMPLE_DEV_PM_OPS(cx8800_pm_ops, cx8800_suspend, cx8800_resume);
+
static struct pci_driver cx8800_pci_driver = {
- .name = "cx8800",
- .id_table = cx8800_pci_tbl,
- .probe = cx8800_initdev,
- .remove = cx8800_finidev,
-#ifdef CONFIG_PM
- .suspend = cx8800_suspend,
- .resume = cx8800_resume,
-#endif
+ .name = "cx8800",
+ .id_table = cx8800_pci_tbl,
+ .probe = cx8800_initdev,
+ .remove = cx8800_finidev,
+ .driver.pm = &cx8800_pm_ops,
};
module_pci_driver(cx8800_pci_driver);
--
2.27.0
_______________________________________________
Linux-kernel-mentees mailing list
Linux-kernel-mentees@lists.linuxfoundation.org
https://lists.linuxfoundation.org/mailman/listinfo/linux-kernel-mentees
^ permalink raw reply related
* [PATCH v2 5/6] meye: use generic power management
From: Vaibhav Gupta @ 2020-07-17 3:56 UTC (permalink / raw)
To: Bjorn Helgaas, Bjorn Helgaas, Bjorn Helgaas, Vaibhav Gupta,
Mauro Carvalho Chehab
Cc: Vaibhav Gupta, linux-kernel, linux-media, linux-kernel-mentees,
Shuah Khan
In-Reply-To: <20200717035608.97254-1-vaibhavgupta40@gmail.com>
With legacy PM, drivers themselves were responsible for managing the
device's power states and takes care of register states.
After upgrading to the generic structure, PCI core will take care of
required tasks and drivers should do only device-specific operations.
The driver was invoking PCI helper functions like pci_save/restore_state()
which is not recommended.
Compile-tested only.
Signed-off-by: Vaibhav Gupta <vaibhavgupta40@gmail.com>
---
drivers/media/pci/meye/meye.c | 15 +++++----------
1 file changed, 5 insertions(+), 10 deletions(-)
diff --git a/drivers/media/pci/meye/meye.c b/drivers/media/pci/meye/meye.c
index 73e064e6f56d..7fb3b1853b87 100644
--- a/drivers/media/pci/meye/meye.c
+++ b/drivers/media/pci/meye/meye.c
@@ -1528,19 +1528,16 @@ static const struct v4l2_ctrl_ops meye_ctrl_ops = {
.s_ctrl = meye_s_ctrl,
};
-#ifdef CONFIG_PM
-static int meye_suspend(struct pci_dev *pdev, pm_message_t state)
+static int __maybe_unused meye_suspend(struct device *dev)
{
- pci_save_state(pdev);
meye.pm_mchip_mode = meye.mchip_mode;
mchip_hic_stop();
mchip_set(MCHIP_MM_INTA, 0x0);
return 0;
}
-static int meye_resume(struct pci_dev *pdev)
+static int __maybe_unused meye_resume(struct device *dev)
{
- pci_restore_state(pdev);
pci_write_config_word(meye.mchip_dev, MCHIP_PCI_SOFTRESET_SET, 1);
mchip_delay(MCHIP_HIC_CMD, 0);
@@ -1562,7 +1559,6 @@ static int meye_resume(struct pci_dev *pdev)
}
return 0;
}
-#endif
static int meye_probe(struct pci_dev *pcidev, const struct pci_device_id *ent)
{
@@ -1788,15 +1784,14 @@ static const struct pci_device_id meye_pci_tbl[] = {
MODULE_DEVICE_TABLE(pci, meye_pci_tbl);
+static SIMPLE_DEV_PM_OPS(meye_pm_ops, meye_suspend, meye_resume);
+
static struct pci_driver meye_driver = {
.name = "meye",
.id_table = meye_pci_tbl,
.probe = meye_probe,
.remove = meye_remove,
-#ifdef CONFIG_PM
- .suspend = meye_suspend,
- .resume = meye_resume,
-#endif
+ .driver.pm = &meye_pm_ops,
};
static int __init meye_init(void)
--
2.27.0
^ permalink raw reply related
* [Linux-kernel-mentees] [PATCH v2 5/6] meye: use generic power management
From: Vaibhav Gupta @ 2020-07-17 3:56 UTC (permalink / raw)
To: Bjorn Helgaas, Bjorn Helgaas, Bjorn Helgaas, Vaibhav Gupta,
Mauro Carvalho Chehab
Cc: linux-media, linux-kernel-mentees, linux-kernel, Vaibhav Gupta
In-Reply-To: <20200717035608.97254-1-vaibhavgupta40@gmail.com>
With legacy PM, drivers themselves were responsible for managing the
device's power states and takes care of register states.
After upgrading to the generic structure, PCI core will take care of
required tasks and drivers should do only device-specific operations.
The driver was invoking PCI helper functions like pci_save/restore_state()
which is not recommended.
Compile-tested only.
Signed-off-by: Vaibhav Gupta <vaibhavgupta40@gmail.com>
---
drivers/media/pci/meye/meye.c | 15 +++++----------
1 file changed, 5 insertions(+), 10 deletions(-)
diff --git a/drivers/media/pci/meye/meye.c b/drivers/media/pci/meye/meye.c
index 73e064e6f56d..7fb3b1853b87 100644
--- a/drivers/media/pci/meye/meye.c
+++ b/drivers/media/pci/meye/meye.c
@@ -1528,19 +1528,16 @@ static const struct v4l2_ctrl_ops meye_ctrl_ops = {
.s_ctrl = meye_s_ctrl,
};
-#ifdef CONFIG_PM
-static int meye_suspend(struct pci_dev *pdev, pm_message_t state)
+static int __maybe_unused meye_suspend(struct device *dev)
{
- pci_save_state(pdev);
meye.pm_mchip_mode = meye.mchip_mode;
mchip_hic_stop();
mchip_set(MCHIP_MM_INTA, 0x0);
return 0;
}
-static int meye_resume(struct pci_dev *pdev)
+static int __maybe_unused meye_resume(struct device *dev)
{
- pci_restore_state(pdev);
pci_write_config_word(meye.mchip_dev, MCHIP_PCI_SOFTRESET_SET, 1);
mchip_delay(MCHIP_HIC_CMD, 0);
@@ -1562,7 +1559,6 @@ static int meye_resume(struct pci_dev *pdev)
}
return 0;
}
-#endif
static int meye_probe(struct pci_dev *pcidev, const struct pci_device_id *ent)
{
@@ -1788,15 +1784,14 @@ static const struct pci_device_id meye_pci_tbl[] = {
MODULE_DEVICE_TABLE(pci, meye_pci_tbl);
+static SIMPLE_DEV_PM_OPS(meye_pm_ops, meye_suspend, meye_resume);
+
static struct pci_driver meye_driver = {
.name = "meye",
.id_table = meye_pci_tbl,
.probe = meye_probe,
.remove = meye_remove,
-#ifdef CONFIG_PM
- .suspend = meye_suspend,
- .resume = meye_resume,
-#endif
+ .driver.pm = &meye_pm_ops,
};
static int __init meye_init(void)
--
2.27.0
_______________________________________________
Linux-kernel-mentees mailing list
Linux-kernel-mentees@lists.linuxfoundation.org
https://lists.linuxfoundation.org/mailman/listinfo/linux-kernel-mentees
^ permalink raw reply related
* drivers/video/fbdev/aty/atyfb_base.c:3715:37: sparse: sparse: incorrect type in argument 1 (different address spaces)
From: kernel test robot @ 2020-07-17 3:58 UTC (permalink / raw)
To: Luc Van Oostenryck; +Cc: kbuild-all, linux-kernel
[-- Attachment #1: Type: text/plain, Size: 6557 bytes --]
tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head: 07a56bb875afbe39dabbf6ba7b83783d166863db
commit: 670d0a4b10704667765f7d18f7592993d02783aa sparse: use identifiers to define address spaces
date: 4 weeks ago
config: arc-randconfig-s032-20200717 (attached as .config)
compiler: arc-elf-gcc (GCC) 9.3.0
reproduce:
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# apt-get install sparse
# sparse version: v0.6.2-49-g707c5017-dirty
git checkout 670d0a4b10704667765f7d18f7592993d02783aa
# save the attached .config to linux build tree
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' ARCH=arc
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
sparse warnings: (new ones prefixed by >>)
>> drivers/video/fbdev/aty/atyfb_base.c:3715:37: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const [noderef] __iomem *addr @@ got unsigned char [usertype] *addr @@
>> drivers/video/fbdev/aty/atyfb_base.c:3715:37: sparse: expected void const [noderef] __iomem *addr
drivers/video/fbdev/aty/atyfb_base.c:3715:37: sparse: got unsigned char [usertype] *addr
--
>> sound/pci/echoaudio/echoaudio.c:1824:21: sparse: sparse: incorrect type in argument 1 (different modifiers) @@ expected void const [noderef] __iomem *addr @@ got unsigned int volatile [noderef] [usertype] __iomem *dsp_registers @@
>> sound/pci/echoaudio/echoaudio.c:1824:21: sparse: expected void const [noderef] __iomem *addr
sound/pci/echoaudio/echoaudio.c:1824:21: sparse: got unsigned int volatile [noderef] [usertype] __iomem *dsp_registers
vim +3715 drivers/video/fbdev/aty/atyfb_base.c
c98959f566e0c6 drivers/video/aty/atyfb_base.c Ville Syrjala 2006-12-08 3691
48c68c4f1b5424 drivers/video/aty/atyfb_base.c Greg Kroah-Hartman 2012-12-21 3692 static void atyfb_remove(struct fb_info *info)
^1da177e4c3f41 drivers/video/aty/atyfb_base.c Linus Torvalds 2005-04-16 3693 {
^1da177e4c3f41 drivers/video/aty/atyfb_base.c Linus Torvalds 2005-04-16 3694 struct atyfb_par *par = (struct atyfb_par *) info->par;
^1da177e4c3f41 drivers/video/aty/atyfb_base.c Linus Torvalds 2005-04-16 3695
^1da177e4c3f41 drivers/video/aty/atyfb_base.c Linus Torvalds 2005-04-16 3696 /* restore video mode */
eafad22a05fdac drivers/video/aty/atyfb_base.c Ville Syrjala 2009-06-30 3697 aty_set_crtc(par, &par->saved_crtc);
eafad22a05fdac drivers/video/aty/atyfb_base.c Ville Syrjala 2009-06-30 3698 par->pll_ops->set_pll(info, &par->saved_pll);
^1da177e4c3f41 drivers/video/aty/atyfb_base.c Linus Torvalds 2005-04-16 3699
37ce69a57ff217 drivers/video/aty/atyfb_base.c Richard Purdie 2007-02-10 3700 unregister_framebuffer(info);
37ce69a57ff217 drivers/video/aty/atyfb_base.c Richard Purdie 2007-02-10 3701
5474c120aafe78 drivers/video/aty/atyfb_base.c Michael Hanselmann 2006-06-25 3702 #ifdef CONFIG_FB_ATY_BACKLIGHT
5474c120aafe78 drivers/video/aty/atyfb_base.c Michael Hanselmann 2006-06-25 3703 if (M64_HAS(MOBIL_BUS))
37ce69a57ff217 drivers/video/aty/atyfb_base.c Richard Purdie 2007-02-10 3704 aty_bl_exit(info->bl_dev);
5474c120aafe78 drivers/video/aty/atyfb_base.c Michael Hanselmann 2006-06-25 3705 #endif
7d89a3cb159aec drivers/video/fbdev/aty/atyfb_base.c Luis R. Rodriguez 2015-07-09 3706 arch_phys_wc_del(par->wc_cookie);
5474c120aafe78 drivers/video/aty/atyfb_base.c Michael Hanselmann 2006-06-25 3707
^1da177e4c3f41 drivers/video/aty/atyfb_base.c Linus Torvalds 2005-04-16 3708 #ifndef __sparc__
^1da177e4c3f41 drivers/video/aty/atyfb_base.c Linus Torvalds 2005-04-16 3709 if (par->ati_regbase)
^1da177e4c3f41 drivers/video/aty/atyfb_base.c Linus Torvalds 2005-04-16 3710 iounmap(par->ati_regbase);
^1da177e4c3f41 drivers/video/aty/atyfb_base.c Linus Torvalds 2005-04-16 3711 if (info->screen_base)
^1da177e4c3f41 drivers/video/aty/atyfb_base.c Linus Torvalds 2005-04-16 3712 iounmap(info->screen_base);
^1da177e4c3f41 drivers/video/aty/atyfb_base.c Linus Torvalds 2005-04-16 3713 #ifdef __BIG_ENDIAN
^1da177e4c3f41 drivers/video/aty/atyfb_base.c Linus Torvalds 2005-04-16 3714 if (info->sprite.addr)
^1da177e4c3f41 drivers/video/aty/atyfb_base.c Linus Torvalds 2005-04-16 @3715 iounmap(info->sprite.addr);
^1da177e4c3f41 drivers/video/aty/atyfb_base.c Linus Torvalds 2005-04-16 3716 #endif
^1da177e4c3f41 drivers/video/aty/atyfb_base.c Linus Torvalds 2005-04-16 3717 #endif
^1da177e4c3f41 drivers/video/aty/atyfb_base.c Linus Torvalds 2005-04-16 3718 #ifdef __sparc__
^1da177e4c3f41 drivers/video/aty/atyfb_base.c Linus Torvalds 2005-04-16 3719 kfree(par->mmap_map);
^1da177e4c3f41 drivers/video/aty/atyfb_base.c Linus Torvalds 2005-04-16 3720 #endif
^1da177e4c3f41 drivers/video/aty/atyfb_base.c Linus Torvalds 2005-04-16 3721 if (par->aux_start)
^1da177e4c3f41 drivers/video/aty/atyfb_base.c Linus Torvalds 2005-04-16 3722 release_mem_region(par->aux_start, par->aux_size);
^1da177e4c3f41 drivers/video/aty/atyfb_base.c Linus Torvalds 2005-04-16 3723
^1da177e4c3f41 drivers/video/aty/atyfb_base.c Linus Torvalds 2005-04-16 3724 if (par->res_start)
^1da177e4c3f41 drivers/video/aty/atyfb_base.c Linus Torvalds 2005-04-16 3725 release_mem_region(par->res_start, par->res_size);
^1da177e4c3f41 drivers/video/aty/atyfb_base.c Linus Torvalds 2005-04-16 3726
^1da177e4c3f41 drivers/video/aty/atyfb_base.c Linus Torvalds 2005-04-16 3727 framebuffer_release(info);
^1da177e4c3f41 drivers/video/aty/atyfb_base.c Linus Torvalds 2005-04-16 3728 }
^1da177e4c3f41 drivers/video/aty/atyfb_base.c Linus Torvalds 2005-04-16 3729
:::::: The code at line 3715 was first introduced by commit
:::::: 1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 Linux-2.6.12-rc2
:::::: TO: Linus Torvalds <torvalds@ppc970.osdl.org>
:::::: CC: Linus Torvalds <torvalds@ppc970.osdl.org>
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 31924 bytes --]
^ permalink raw reply
* [Linux-kernel-mentees] [PATCH v2 6/6] tw68: use generic power management
From: Vaibhav Gupta @ 2020-07-17 3:56 UTC (permalink / raw)
To: Bjorn Helgaas, Bjorn Helgaas, Bjorn Helgaas, Vaibhav Gupta,
Mauro Carvalho Chehab
Cc: linux-media, linux-kernel-mentees, linux-kernel, Vaibhav Gupta
In-Reply-To: <20200717035608.97254-1-vaibhavgupta40@gmail.com>
With legacy PM, drivers themselves were responsible for managing the
device's power states and takes care of register states.
After upgrading to the generic structure, PCI core will take care of
required tasks and drivers should do only device-specific operations.
The driver was invoking PCI helper functions like pci_save/restore_state()
which is not recommended.
Compile-Tested only.
Signed-off-by: Vaibhav Gupta <vaibhavgupta40@gmail.com>
---
drivers/media/pci/tw68/tw68-core.c | 30 +++++++++++-------------------
1 file changed, 11 insertions(+), 19 deletions(-)
diff --git a/drivers/media/pci/tw68/tw68-core.c b/drivers/media/pci/tw68/tw68-core.c
index b45f3ffa3de5..065420b09250 100644
--- a/drivers/media/pci/tw68/tw68-core.c
+++ b/drivers/media/pci/tw68/tw68-core.c
@@ -359,10 +359,9 @@ static void tw68_finidev(struct pci_dev *pci_dev)
v4l2_device_unregister(&dev->v4l2_dev);
}
-#ifdef CONFIG_PM
-
-static int tw68_suspend(struct pci_dev *pci_dev , pm_message_t state)
+static int __maybe_unused tw68_suspend(struct device *dev_d)
{
+ struct pci_dev *pci_dev = to_pci_dev(dev_d);
struct v4l2_device *v4l2_dev = pci_get_drvdata(pci_dev);
struct tw68_dev *dev = container_of(v4l2_dev,
struct tw68_dev, v4l2_dev);
@@ -373,24 +372,19 @@ static int tw68_suspend(struct pci_dev *pci_dev , pm_message_t state)
synchronize_irq(pci_dev->irq);
- pci_save_state(pci_dev);
- pci_set_power_state(pci_dev, pci_choose_state(pci_dev, state));
vb2_discard_done(&dev->vidq);
return 0;
}
-static int tw68_resume(struct pci_dev *pci_dev)
+static int __maybe_unused tw68_resume(struct device *dev_d)
{
- struct v4l2_device *v4l2_dev = pci_get_drvdata(pci_dev);
+ struct v4l2_device *v4l2_dev = dev_get_drvdata(dev_d);
struct tw68_dev *dev = container_of(v4l2_dev,
struct tw68_dev, v4l2_dev);
struct tw68_buf *buf;
unsigned long flags;
- pci_set_power_state(pci_dev, PCI_D0);
- pci_restore_state(pci_dev);
-
/* Do things that are done in tw68_initdev ,
except of initializing memory structures.*/
@@ -408,19 +402,17 @@ static int tw68_resume(struct pci_dev *pci_dev)
return 0;
}
-#endif
/* ----------------------------------------------------------- */
+static SIMPLE_DEV_PM_OPS(tw68_pm_ops, tw68_suspend, tw68_resume);
+
static struct pci_driver tw68_pci_driver = {
- .name = "tw68",
- .id_table = tw68_pci_tbl,
- .probe = tw68_initdev,
- .remove = tw68_finidev,
-#ifdef CONFIG_PM
- .suspend = tw68_suspend,
- .resume = tw68_resume
-#endif
+ .name = "tw68",
+ .id_table = tw68_pci_tbl,
+ .probe = tw68_initdev,
+ .remove = tw68_finidev,
+ .driver.pm = &tw68_pm_ops,
};
module_pci_driver(tw68_pci_driver);
--
2.27.0
_______________________________________________
Linux-kernel-mentees mailing list
Linux-kernel-mentees@lists.linuxfoundation.org
https://lists.linuxfoundation.org/mailman/listinfo/linux-kernel-mentees
^ permalink raw reply related
* [PATCH v2 6/6] tw68: use generic power management
From: Vaibhav Gupta @ 2020-07-17 3:56 UTC (permalink / raw)
To: Bjorn Helgaas, Bjorn Helgaas, Bjorn Helgaas, Vaibhav Gupta,
Mauro Carvalho Chehab
Cc: Vaibhav Gupta, linux-kernel, linux-media, linux-kernel-mentees,
Shuah Khan
In-Reply-To: <20200717035608.97254-1-vaibhavgupta40@gmail.com>
With legacy PM, drivers themselves were responsible for managing the
device's power states and takes care of register states.
After upgrading to the generic structure, PCI core will take care of
required tasks and drivers should do only device-specific operations.
The driver was invoking PCI helper functions like pci_save/restore_state()
which is not recommended.
Compile-Tested only.
Signed-off-by: Vaibhav Gupta <vaibhavgupta40@gmail.com>
---
drivers/media/pci/tw68/tw68-core.c | 30 +++++++++++-------------------
1 file changed, 11 insertions(+), 19 deletions(-)
diff --git a/drivers/media/pci/tw68/tw68-core.c b/drivers/media/pci/tw68/tw68-core.c
index b45f3ffa3de5..065420b09250 100644
--- a/drivers/media/pci/tw68/tw68-core.c
+++ b/drivers/media/pci/tw68/tw68-core.c
@@ -359,10 +359,9 @@ static void tw68_finidev(struct pci_dev *pci_dev)
v4l2_device_unregister(&dev->v4l2_dev);
}
-#ifdef CONFIG_PM
-
-static int tw68_suspend(struct pci_dev *pci_dev , pm_message_t state)
+static int __maybe_unused tw68_suspend(struct device *dev_d)
{
+ struct pci_dev *pci_dev = to_pci_dev(dev_d);
struct v4l2_device *v4l2_dev = pci_get_drvdata(pci_dev);
struct tw68_dev *dev = container_of(v4l2_dev,
struct tw68_dev, v4l2_dev);
@@ -373,24 +372,19 @@ static int tw68_suspend(struct pci_dev *pci_dev , pm_message_t state)
synchronize_irq(pci_dev->irq);
- pci_save_state(pci_dev);
- pci_set_power_state(pci_dev, pci_choose_state(pci_dev, state));
vb2_discard_done(&dev->vidq);
return 0;
}
-static int tw68_resume(struct pci_dev *pci_dev)
+static int __maybe_unused tw68_resume(struct device *dev_d)
{
- struct v4l2_device *v4l2_dev = pci_get_drvdata(pci_dev);
+ struct v4l2_device *v4l2_dev = dev_get_drvdata(dev_d);
struct tw68_dev *dev = container_of(v4l2_dev,
struct tw68_dev, v4l2_dev);
struct tw68_buf *buf;
unsigned long flags;
- pci_set_power_state(pci_dev, PCI_D0);
- pci_restore_state(pci_dev);
-
/* Do things that are done in tw68_initdev ,
except of initializing memory structures.*/
@@ -408,19 +402,17 @@ static int tw68_resume(struct pci_dev *pci_dev)
return 0;
}
-#endif
/* ----------------------------------------------------------- */
+static SIMPLE_DEV_PM_OPS(tw68_pm_ops, tw68_suspend, tw68_resume);
+
static struct pci_driver tw68_pci_driver = {
- .name = "tw68",
- .id_table = tw68_pci_tbl,
- .probe = tw68_initdev,
- .remove = tw68_finidev,
-#ifdef CONFIG_PM
- .suspend = tw68_suspend,
- .resume = tw68_resume
-#endif
+ .name = "tw68",
+ .id_table = tw68_pci_tbl,
+ .probe = tw68_initdev,
+ .remove = tw68_finidev,
+ .driver.pm = &tw68_pm_ops,
};
module_pci_driver(tw68_pci_driver);
--
2.27.0
^ permalink raw reply related
* Re: [PATCH V2 2/2] arm64: imx: Select TPM driver by default
From: Daniel Lezcano @ 2020-07-17 3:57 UTC (permalink / raw)
To: Anson Huang, catalin.marinas, will, tglx, linux-arm-kernel,
linux-kernel
Cc: Linux-imx
In-Reply-To: <1594178168-13007-2-git-send-email-Anson.Huang@nxp.com>
On 08/07/2020 05:16, Anson Huang wrote:
> Select CLKSRC_IMX_TPM for ARCH_MXC by default.
>
> Signed-off-by: Anson Huang <Anson.Huang@nxp.com>
> ---
> No change.
> ---
> arch/arm64/Kconfig.platforms | 1 +
> 1 file changed, 1 insertion(+)
>
> diff --git a/arch/arm64/Kconfig.platforms b/arch/arm64/Kconfig.platforms
> index 8dd05b2..c52b7a0 100644
> --- a/arch/arm64/Kconfig.platforms
> +++ b/arch/arm64/Kconfig.platforms
> @@ -169,6 +169,7 @@ config ARCH_MXC
> bool "ARMv8 based NXP i.MX SoC family"
> select ARM64_ERRATUM_843419
> select ARM64_ERRATUM_845719 if COMPAT
> + select CLKSRC_IMX_TPM
> select IMX_GPCV2
> select IMX_GPCV2_PM_DOMAINS
> select PM
Shall I take this patch also or just 1/2 ?
--
<http://www.linaro.org/> Linaro.org │ Open source software for ARM SoCs
Follow Linaro: <http://www.facebook.com/pages/Linaro> Facebook |
<http://twitter.com/#!/linaroorg> Twitter |
<http://www.linaro.org/linaro-blog/> Blog
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply
* Re: [PATCH] usb: gadget: udc: Flush pending work also in error path
From: Peter Chen @ 2020-07-17 3:59 UTC (permalink / raw)
To: Marek Szyprowski
Cc: linux-usb@vger.kernel.org, linux-kernel@vger.kernel.org,
Felipe Balbi, Minas Harutyunyan, Bartlomiej Zolnierkiewicz,
Greg Kroah-Hartman
In-Reply-To: <20200716115525.27519-1-m.szyprowski@samsung.com>
On 20-07-16 13:55:25, Marek Szyprowski wrote:
> When binding an UDC driver to the pending gadget fails in
> check_pending_gadget_drivers(), the usb_add_gadget_udc_release() function
> ends without waiting for the usb_gadget_state_work to finish, what in
> turn might cause the whole struct usb_gadget being freed by the caller
> before the usb_gadget_state_work being executed.
>
> This can be observed on some boards with USB Mass Storage gadget
> compiled-in and kernel booted without the needed module parameters:
>
> dwc2 12480000.hsotg: dwc2_check_params: Invalid parameter besl=1
> dwc2 12480000.hsotg: dwc2_check_params: Invalid parameter g_np_tx_fifo_size=1024
> dwc2 12480000.hsotg: EPs: 16, dedicated fifos, 7808 entries in SPRAM
> Mass Storage Function, version: 2009/09/11
> LUN: removable file: (no medium)
> no file given for LUN0
> g_mass_storage 12480000.hsotg: failed to start g_mass_storage: -22
> dwc2: probe of 12480000.hsotg failed with error -22
> 8<--- cut here ---
> Unable to handle kernel NULL pointer dereference at virtual address 00000004
> pgd = (ptrval)
> [00000004] *pgd=00000000
> Internal error: Oops: 5 [#1] PREEMPT SMP ARM
> Modules linked in:
> CPU: 1 PID: 88 Comm: kworker/1:2 Not tainted 5.8.0-rc5-next-20200715-00062-gc5bb489ae825-dirty #8792
> Hardware name: Samsung Exynos (Flattened Device Tree)
> Workqueue: 0x0 (rcu_gp)
> PC is at process_one_work+0x44/0x7dc
> ...
> Process kworker/1:2 (pid: 88, stack limit = 0x(ptrval))
> Stack: (0xed9f1f00 to 0xed9f2000)
> ...
> [<c0148590>] (process_one_work) from [<c0148d6c>] (worker_thread+0x44/0x51c)
> [<c0148d6c>] (worker_thread) from [<c01500c0>] (kthread+0x158/0x1a0)
> [<c01500c0>] (kthread) from [<c0100114>] (ret_from_fork+0x14/0x20)
> Exception stack(0xed9f1fb0 to 0xed9f1ff8)
> ...
> ---[ end trace 5033c1326a62e5f3 ]---
> note: kworker/1:2[88] exited with preempt_count 1
>
> Fix this by flushing pending work in error path.
>
> Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com>
> ---
> drivers/usb/gadget/udc/core.c | 1 +
> 1 file changed, 1 insertion(+)
>
> diff --git a/drivers/usb/gadget/udc/core.c b/drivers/usb/gadget/udc/core.c
> index c33ad8a333ad..4f82bcd31fd3 100644
> --- a/drivers/usb/gadget/udc/core.c
> +++ b/drivers/usb/gadget/udc/core.c
> @@ -1230,6 +1230,7 @@ int usb_add_gadget_udc_release(struct device *parent, struct usb_gadget *gadget,
> return 0;
>
> err_del_udc:
> + flush_work(&gadget->work);
> device_del(&udc->dev);
>
> err_unlist_udc:
> --
> 2.17.1
>
Reviewed-by: Peter Chen <peter.chen@nxp.com>
--
Thanks,
Peter Chen
^ permalink raw reply
* [PATCH] mtd: mtdpart: use uint64_t instead of int for cur_off
From: Heiko Schocher @ 2020-07-17 4:00 UTC (permalink / raw)
To: u-boot
In-Reply-To: <20200713124002.20882-1-martin.kaistra@linutronix.de>
Hello Martin,
Am 13.07.2020 um 14:40 schrieb Martin Kaistra:
> The types of "offset" and "size" of "struct mtd_partition" are uint64_t,
> while mtd_parse_partitions() uses int to work with these values. When
> the offset reaches 2GB, it is interpreted as a negative value, which
> leads to error messages like
>
> mtd: partition "<partition name>" is out of reach -- disabled
>
> eg. when using the "ubi part" command.
>
> Fix this by using uint64_t for cur_off and cur_sz.
>
> Signed-off-by: Martin Kaistra <martin.kaistra@linutronix.de>
> Reviewed-by: Kurt Kanzenbach <kurt@linutronix.de>
> ---
> drivers/mtd/mtdpart.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
Reviewed-by: Heiko Schocher <hs@denx.de>
bye,
Heiko
--
DENX Software Engineering GmbH, Managing Director: Wolfgang Denk
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: +49-8142-66989-52 Fax: +49-8142-66989-80 Email: hs at denx.de
^ permalink raw reply
* Re: [PATCH V2 2/6] kvm: detect assigned device via irqbypass manager
From: Jason Wang @ 2020-07-17 4:01 UTC (permalink / raw)
To: Zhu Lingshan, mst, alex.williamson, pbonzini,
sean.j.christopherson, wanpengli
Cc: virtualization, netdev, kvm
In-Reply-To: <1594898629-18790-3-git-send-email-lingshan.zhu@intel.com>
On 2020/7/16 下午7:23, Zhu Lingshan wrote:
> vDPA devices has dedicated backed hardware like
> passthrough-ed devices. Then it is possible to setup irq
> offloading to vCPU for vDPA devices. Thus this patch tries to
> manipulated assigned device counters via irqbypass manager.
This part needs some tweak, e.g why assigned device could be detected
through this way.
>
> We will increase/decrease the assigned device counter in kvm/x86.
And you need explain why we don't need similar thing in other arch.
Thanks
> Both vDPA and VFIO would go through this code path.
>
> This code path only affect x86 for now.
>
> Signed-off-by: Zhu Lingshan <lingshan.zhu@intel.com>
> Suggested-by: Jason Wang <jasowang@redhat.com>
> ---
> arch/x86/kvm/x86.c | 10 ++++++++--
> 1 file changed, 8 insertions(+), 2 deletions(-)
>
> diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
> index 00c88c2..20c07d3 100644
> --- a/arch/x86/kvm/x86.c
> +++ b/arch/x86/kvm/x86.c
> @@ -10624,11 +10624,17 @@ int kvm_arch_irq_bypass_add_producer(struct irq_bypass_consumer *cons,
> {
> struct kvm_kernel_irqfd *irqfd =
> container_of(cons, struct kvm_kernel_irqfd, consumer);
> + int ret;
>
> irqfd->producer = prod;
> + kvm_arch_start_assignment(irqfd->kvm);
> + ret = kvm_x86_ops.update_pi_irte(irqfd->kvm,
> + prod->irq, irqfd->gsi, 1);
> +
> + if (ret)
> + kvm_arch_end_assignment(irqfd->kvm);
>
> - return kvm_x86_ops.update_pi_irte(irqfd->kvm,
> - prod->irq, irqfd->gsi, 1);
> + return ret;
> }
>
> void kvm_arch_irq_bypass_del_producer(struct irq_bypass_consumer *cons,
^ permalink raw reply
* Re: Regression: squashfs issues since change "squashfs: migrate from ll_rw_block usage to BIO"
From: Bernd Amend @ 2020-07-17 4:01 UTC (permalink / raw)
To: Phillip Lougher; +Cc: Andrew Morton, Phillip Lougher, LKML, Stefan Rommel
In-Reply-To: <CAB3wodcmaiB+AOiSYvoE6D3ATx7Kj7FMHfW+uwTfZEOGuWjX7Q@mail.gmail.com>
On Fri, Jul 17, 2020 at 3:22 AM Phillip Lougher
<phillip.lougher@gmail.com> wrote:
>
> On Fri, Jul 17, 2020 at 12:07 AM Andrew Morton
> <akpm@linux-foundation.org> wrote:
> >
> > On Tue, 14 Jul 2020 21:41:07 +0200 Bernd Amend <bernd.amend@gmail.com> wrote:
> >
> > > Hi,
> > >
> > > With the Linux Kernel version 5.8-rc5/master I am unable to mount some
> > > squashfs filesystems compressed with "-comp lz4".
> > > If I try to mount them I get the following error:
> > > [ 1.084246] SQUASHFS error: lz4 decompression failed, data probably corrupt
> > > [ 1.084545] SQUASHFS error: Failed to read block 0x873e1001: -5
> > > [ 1.084761] SQUASHFS error: Unable to read metadata cache entry [873e0fff]
> > > [ 1.084983] SQUASHFS error: Unable to read directory block [873e0fff:1586]
> > > [ 1.122564] SQUASHFS error: Unable to read metadata cache entry [873e0fff]
> > > [ 1.122708] SQUASHFS error: Unable to read directory block [873e0fff:1586]
> > > [ 1.122862] Starting init: /sbin/init exists but couldn't execute
> > > it (error -5)
> > > [ 1.123027] SQUASHFS error: Unable to read metadata cache entry [873e0fff]
> > > [ 1.123152] SQUASHFS error: Unable to read directory block [873e0fff:1586]
> > > [ 1.123279] Starting init: /etc/init exists but couldn't execute it
> > > (error -5)
> > > [ 1.123444] SQUASHFS error: Unable to read metadata cache entry [873e0fff]
> > > [ 1.123573] SQUASHFS error: Unable to read directory block [873e0fff:1586]
> > > [ 1.123713] Starting init: /bin/init exists but couldn't execute it
> > > (error -5)
> > > [ 1.123900] SQUASHFS error: Unable to read metadata cache entry [873e0fff]
> > >
> > > or
> > >
> > > [ 4960.910693] attempt to access beyond end of device
> > > [ 4960.910695] loop0: rw=2048, want=46, limit=40
> > > [ 4960.910696] SQUASHFS error: Failed to read block 0x4001: -5
> > > [ 4960.910697] SQUASHFS error: Unable to read metadata cache entry [3fff]
> > > [ 4960.910698] SQUASHFS error: Unable to read inode 0x20c5000c
> > >
> > > I bisected the issue to the commit "squashfs: migrate from ll_rw_block
> > > usage to BIO"
> > > https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/fs/squashfs?id=93e72b3c612adcaca13d874fcc86c53e6c8da541
> > >
> > > The issue can be reproduced by downloading
> > > https://theworldsend.eu/demo.squashfs (20K) and the following command
> > > line.
> > > # mount demo.squashfs mnt && ls mnt && umount mnt
> > >
> > > The same squashfs can be mounted using Linux <=5.7.8.
> > > The kernel config is identical to the Arch Linux Kernel configuration,
> > > build using gcc 9 and 10 on x86_64.
> >
> > Thanks. I queued a reversion patch. I'll go ahead with this if we are
> > unable to get this fixed in the next week or so.
> >
>
> Yes, there is a bug in the patch. I have tracked it down today, and I
> will send out a fix patch tomorrow.
>
> The bug is here:
>
> + /* Extract the length of the metadata block */
> + data = page_address(bvec->bv_page) + bvec->bv_offset;
> + length = data[offset];
> + if (offset <= bvec->bv_len - 1) {
>
> This check is wrong, it should be
>
> + if (offset < bvec->bv_len - 1) {
>
>
> Phillip
Thanks, this change resolves the issue for me.
Bernd
>
> > Are you able to check that the below fixes things up?
> >
> > Thanks.
> >
> >
> > From: Andrew Morton <akpm@linux-foundation.org>
> > Subject: revert "squashfs: migrate from ll_rw_block usage to BIO"
> >
> > Revert 93e72b3c612adc ("squashfs: migrate from ll_rw_block usage to BIO")
> > due to a regression reported by Bernd Amend.
> >
> > Link: http://lkml.kernel.org/r/CAF31+H5ZB7zn73obrc5svLzgfsTnyYe5TKvr7-6atUOqrRY+2w@mail.gmail.com
> > Reported-by: Bernd Amend <bernd.amend@gmail.com>
> > Cc: Philippe Liard <pliard@google.com>
> > Cc: Christoph Hellwig <hch@lst.de>
> > Cc: Adrien Schildknecht <adrien+dev@schischi.me>
> > Cc: Phillip Lougher <phillip@squashfs.org.uk>
> > Cc: Guenter Roeck <groeck@chromium.org>
> > Cc: Daniel Rosenberg <drosen@google.com>
> > Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
> > ---
> >
> > fs/squashfs/block.c | 273 ++++++++++------------
> > fs/squashfs/decompressor.h | 5
> > fs/squashfs/decompressor_multi.c | 9
> > fs/squashfs/decompressor_multi_percpu.c | 6
> > fs/squashfs/decompressor_single.c | 9
> > fs/squashfs/lz4_wrapper.c | 17 -
> > fs/squashfs/lzo_wrapper.c | 17 -
> > fs/squashfs/squashfs.h | 4
> > fs/squashfs/xz_wrapper.c | 51 +---
> > fs/squashfs/zlib_wrapper.c | 63 ++---
> > fs/squashfs/zstd_wrapper.c | 62 ++--
> > 11 files changed, 237 insertions(+), 279 deletions(-)
> >
> > --- a/fs/squashfs/block.c~revert-squashfs-migrate-from-ll_rw_block-usage-to-bio
> > +++ a/fs/squashfs/block.c
> > @@ -13,7 +13,6 @@
> > * datablocks and metadata blocks.
> > */
> >
> > -#include <linux/blkdev.h>
> > #include <linux/fs.h>
> > #include <linux/vfs.h>
> > #include <linux/slab.h>
> > @@ -28,104 +27,45 @@
> > #include "page_actor.h"
> >
> > /*
> > - * Returns the amount of bytes copied to the page actor.
> > + * Read the metadata block length, this is stored in the first two
> > + * bytes of the metadata block.
> > */
> > -static int copy_bio_to_actor(struct bio *bio,
> > - struct squashfs_page_actor *actor,
> > - int offset, int req_length)
> > -{
> > - void *actor_addr = squashfs_first_page(actor);
> > - struct bvec_iter_all iter_all = {};
> > - struct bio_vec *bvec = bvec_init_iter_all(&iter_all);
> > - int copied_bytes = 0;
> > - int actor_offset = 0;
> > -
> > - if (WARN_ON_ONCE(!bio_next_segment(bio, &iter_all)))
> > - return 0;
> > -
> > - while (copied_bytes < req_length) {
> > - int bytes_to_copy = min_t(int, bvec->bv_len - offset,
> > - PAGE_SIZE - actor_offset);
> > -
> > - bytes_to_copy = min_t(int, bytes_to_copy,
> > - req_length - copied_bytes);
> > - memcpy(actor_addr + actor_offset,
> > - page_address(bvec->bv_page) + bvec->bv_offset + offset,
> > - bytes_to_copy);
> > -
> > - actor_offset += bytes_to_copy;
> > - copied_bytes += bytes_to_copy;
> > - offset += bytes_to_copy;
> > -
> > - if (actor_offset >= PAGE_SIZE) {
> > - actor_addr = squashfs_next_page(actor);
> > - if (!actor_addr)
> > - break;
> > - actor_offset = 0;
> > - }
> > - if (offset >= bvec->bv_len) {
> > - if (!bio_next_segment(bio, &iter_all))
> > - break;
> > - offset = 0;
> > - }
> > - }
> > - squashfs_finish_page(actor);
> > - return copied_bytes;
> > -}
> > -
> > -static int squashfs_bio_read(struct super_block *sb, u64 index, int length,
> > - struct bio **biop, int *block_offset)
> > +static struct buffer_head *get_block_length(struct super_block *sb,
> > + u64 *cur_index, int *offset, int *length)
> > {
> > struct squashfs_sb_info *msblk = sb->s_fs_info;
> > - const u64 read_start = round_down(index, msblk->devblksize);
> > - const sector_t block = read_start >> msblk->devblksize_log2;
> > - const u64 read_end = round_up(index + length, msblk->devblksize);
> > - const sector_t block_end = read_end >> msblk->devblksize_log2;
> > - int offset = read_start - round_down(index, PAGE_SIZE);
> > - int total_len = (block_end - block) << msblk->devblksize_log2;
> > - const int page_count = DIV_ROUND_UP(total_len + offset, PAGE_SIZE);
> > - int error, i;
> > - struct bio *bio;
> > -
> > - bio = bio_alloc(GFP_NOIO, page_count);
> > - if (!bio)
> > - return -ENOMEM;
> > + struct buffer_head *bh;
> >
> > - bio_set_dev(bio, sb->s_bdev);
> > - bio->bi_opf = READ;
> > - bio->bi_iter.bi_sector = block * (msblk->devblksize >> SECTOR_SHIFT);
> > -
> > - for (i = 0; i < page_count; ++i) {
> > - unsigned int len =
> > - min_t(unsigned int, PAGE_SIZE - offset, total_len);
> > - struct page *page = alloc_page(GFP_NOIO);
> > -
> > - if (!page) {
> > - error = -ENOMEM;
> > - goto out_free_bio;
> > - }
> > - if (!bio_add_page(bio, page, len, offset)) {
> > - error = -EIO;
> > - goto out_free_bio;
> > + bh = sb_bread(sb, *cur_index);
> > + if (bh == NULL)
> > + return NULL;
> > +
> > + if (msblk->devblksize - *offset == 1) {
> > + *length = (unsigned char) bh->b_data[*offset];
> > + put_bh(bh);
> > + bh = sb_bread(sb, ++(*cur_index));
> > + if (bh == NULL)
> > + return NULL;
> > + *length |= (unsigned char) bh->b_data[0] << 8;
> > + *offset = 1;
> > + } else {
> > + *length = (unsigned char) bh->b_data[*offset] |
> > + (unsigned char) bh->b_data[*offset + 1] << 8;
> > + *offset += 2;
> > +
> > + if (*offset == msblk->devblksize) {
> > + put_bh(bh);
> > + bh = sb_bread(sb, ++(*cur_index));
> > + if (bh == NULL)
> > + return NULL;
> > + *offset = 0;
> > }
> > - offset = 0;
> > - total_len -= len;
> > }
> >
> > - error = submit_bio_wait(bio);
> > - if (error)
> > - goto out_free_bio;
> > -
> > - *biop = bio;
> > - *block_offset = index & ((1 << msblk->devblksize_log2) - 1);
> > - return 0;
> > -
> > -out_free_bio:
> > - bio_free_pages(bio);
> > - bio_put(bio);
> > - return error;
> > + return bh;
> > }
> >
> > +
> > /*
> > * Read and decompress a metadata block or datablock. Length is non-zero
> > * if a datablock is being read (the size is stored elsewhere in the
> > @@ -136,88 +76,129 @@ out_free_bio:
> > * algorithms).
> > */
> > int squashfs_read_data(struct super_block *sb, u64 index, int length,
> > - u64 *next_index, struct squashfs_page_actor *output)
> > + u64 *next_index, struct squashfs_page_actor *output)
> > {
> > struct squashfs_sb_info *msblk = sb->s_fs_info;
> > - struct bio *bio = NULL;
> > - int compressed;
> > - int res;
> > - int offset;
> > + struct buffer_head **bh;
> > + int offset = index & ((1 << msblk->devblksize_log2) - 1);
> > + u64 cur_index = index >> msblk->devblksize_log2;
> > + int bytes, compressed, b = 0, k = 0, avail, i;
> > +
> > + bh = kcalloc(((output->length + msblk->devblksize - 1)
> > + >> msblk->devblksize_log2) + 1, sizeof(*bh), GFP_KERNEL);
> > + if (bh == NULL)
> > + return -ENOMEM;
> >
> > if (length) {
> > /*
> > * Datablock.
> > */
> > + bytes = -offset;
> > compressed = SQUASHFS_COMPRESSED_BLOCK(length);
> > length = SQUASHFS_COMPRESSED_SIZE_BLOCK(length);
> > + if (next_index)
> > + *next_index = index + length;
> > +
> > TRACE("Block @ 0x%llx, %scompressed size %d, src size %d\n",
> > index, compressed ? "" : "un", length, output->length);
> > +
> > + if (length < 0 || length > output->length ||
> > + (index + length) > msblk->bytes_used)
> > + goto read_failure;
> > +
> > + for (b = 0; bytes < length; b++, cur_index++) {
> > + bh[b] = sb_getblk(sb, cur_index);
> > + if (bh[b] == NULL)
> > + goto block_release;
> > + bytes += msblk->devblksize;
> > + }
> > + ll_rw_block(REQ_OP_READ, 0, b, bh);
> > } else {
> > /*
> > * Metadata block.
> > */
> > - const u8 *data;
> > - struct bvec_iter_all iter_all = {};
> > - struct bio_vec *bvec = bvec_init_iter_all(&iter_all);
> > -
> > - if (index + 2 > msblk->bytes_used) {
> > - res = -EIO;
> > - goto out;
> > - }
> > - res = squashfs_bio_read(sb, index, 2, &bio, &offset);
> > - if (res)
> > - goto out;
> > -
> > - if (WARN_ON_ONCE(!bio_next_segment(bio, &iter_all))) {
> > - res = -EIO;
> > - goto out_free_bio;
> > - }
> > - /* Extract the length of the metadata block */
> > - data = page_address(bvec->bv_page) + bvec->bv_offset;
> > - length = data[offset];
> > - if (offset <= bvec->bv_len - 1) {
> > - length |= data[offset + 1] << 8;
> > - } else {
> > - if (WARN_ON_ONCE(!bio_next_segment(bio, &iter_all))) {
> > - res = -EIO;
> > - goto out_free_bio;
> > - }
> > - data = page_address(bvec->bv_page) + bvec->bv_offset;
> > - length |= data[0] << 8;
> > - }
> > - bio_free_pages(bio);
> > - bio_put(bio);
> > + if ((index + 2) > msblk->bytes_used)
> > + goto read_failure;
> >
> > + bh[0] = get_block_length(sb, &cur_index, &offset, &length);
> > + if (bh[0] == NULL)
> > + goto read_failure;
> > + b = 1;
> > +
> > + bytes = msblk->devblksize - offset;
> > compressed = SQUASHFS_COMPRESSED(length);
> > length = SQUASHFS_COMPRESSED_SIZE(length);
> > - index += 2;
> > + if (next_index)
> > + *next_index = index + length + 2;
> >
> > TRACE("Block @ 0x%llx, %scompressed size %d\n", index,
> > - compressed ? "" : "un", length);
> > + compressed ? "" : "un", length);
> > +
> > + if (length < 0 || length > output->length ||
> > + (index + length) > msblk->bytes_used)
> > + goto block_release;
> > +
> > + for (; bytes < length; b++) {
> > + bh[b] = sb_getblk(sb, ++cur_index);
> > + if (bh[b] == NULL)
> > + goto block_release;
> > + bytes += msblk->devblksize;
> > + }
> > + ll_rw_block(REQ_OP_READ, 0, b - 1, bh + 1);
> > }
> > - if (next_index)
> > - *next_index = index + length;
> >
> > - res = squashfs_bio_read(sb, index, length, &bio, &offset);
> > - if (res)
> > - goto out;
> > + for (i = 0; i < b; i++) {
> > + wait_on_buffer(bh[i]);
> > + if (!buffer_uptodate(bh[i]))
> > + goto block_release;
> > + }
> >
> > if (compressed) {
> > - if (!msblk->stream) {
> > - res = -EIO;
> > - goto out_free_bio;
> > - }
> > - res = squashfs_decompress(msblk, bio, offset, length, output);
> > + if (!msblk->stream)
> > + goto read_failure;
> > + length = squashfs_decompress(msblk, bh, b, offset, length,
> > + output);
> > + if (length < 0)
> > + goto read_failure;
> > } else {
> > - res = copy_bio_to_actor(bio, output, offset, length);
> > + /*
> > + * Block is uncompressed.
> > + */
> > + int in, pg_offset = 0;
> > + void *data = squashfs_first_page(output);
> > +
> > + for (bytes = length; k < b; k++) {
> > + in = min(bytes, msblk->devblksize - offset);
> > + bytes -= in;
> > + while (in) {
> > + if (pg_offset == PAGE_SIZE) {
> > + data = squashfs_next_page(output);
> > + pg_offset = 0;
> > + }
> > + avail = min_t(int, in, PAGE_SIZE -
> > + pg_offset);
> > + memcpy(data + pg_offset, bh[k]->b_data + offset,
> > + avail);
> > + in -= avail;
> > + pg_offset += avail;
> > + offset += avail;
> > + }
> > + offset = 0;
> > + put_bh(bh[k]);
> > + }
> > + squashfs_finish_page(output);
> > }
> >
> > -out_free_bio:
> > - bio_free_pages(bio);
> > - bio_put(bio);
> > -out:
> > - if (res < 0)
> > - ERROR("Failed to read block 0x%llx: %d\n", index, res);
> > + kfree(bh);
> > + return length;
> >
> > - return res;
> > +block_release:
> > + for (; k < b; k++)
> > + put_bh(bh[k]);
> > +
> > +read_failure:
> > + ERROR("squashfs_read_data failed to read block 0x%llx\n",
> > + (unsigned long long) index);
> > + kfree(bh);
> > + return -EIO;
> > }
> > --- a/fs/squashfs/decompressor.h~revert-squashfs-migrate-from-ll_rw_block-usage-to-bio
> > +++ a/fs/squashfs/decompressor.h
> > @@ -10,14 +10,13 @@
> > * decompressor.h
> > */
> >
> > -#include <linux/bio.h>
> > -
> > struct squashfs_decompressor {
> > void *(*init)(struct squashfs_sb_info *, void *);
> > void *(*comp_opts)(struct squashfs_sb_info *, void *, int);
> > void (*free)(void *);
> > int (*decompress)(struct squashfs_sb_info *, void *,
> > - struct bio *, int, int, struct squashfs_page_actor *);
> > + struct buffer_head **, int, int, int,
> > + struct squashfs_page_actor *);
> > int id;
> > char *name;
> > int supported;
> > --- a/fs/squashfs/decompressor_multi.c~revert-squashfs-migrate-from-ll_rw_block-usage-to-bio
> > +++ a/fs/squashfs/decompressor_multi.c
> > @@ -6,7 +6,7 @@
> > #include <linux/types.h>
> > #include <linux/mutex.h>
> > #include <linux/slab.h>
> > -#include <linux/bio.h>
> > +#include <linux/buffer_head.h>
> > #include <linux/sched.h>
> > #include <linux/wait.h>
> > #include <linux/cpumask.h>
> > @@ -180,15 +180,14 @@ wait:
> > }
> >
> >
> > -int squashfs_decompress(struct squashfs_sb_info *msblk, struct bio *bio,
> > - int offset, int length,
> > - struct squashfs_page_actor *output)
> > +int squashfs_decompress(struct squashfs_sb_info *msblk, struct buffer_head **bh,
> > + int b, int offset, int length, struct squashfs_page_actor *output)
> > {
> > int res;
> > struct squashfs_stream *stream = msblk->stream;
> > struct decomp_stream *decomp_stream = get_decomp_stream(msblk, stream);
> > res = msblk->decompressor->decompress(msblk, decomp_stream->stream,
> > - bio, offset, length, output);
> > + bh, b, offset, length, output);
> > put_decomp_stream(decomp_stream, stream);
> > if (res < 0)
> > ERROR("%s decompression failed, data probably corrupt\n",
> > --- a/fs/squashfs/decompressor_multi_percpu.c~revert-squashfs-migrate-from-ll_rw_block-usage-to-bio
> > +++ a/fs/squashfs/decompressor_multi_percpu.c
> > @@ -75,8 +75,8 @@ void squashfs_decompressor_destroy(struc
> > }
> > }
> >
> > -int squashfs_decompress(struct squashfs_sb_info *msblk, struct bio *bio,
> > - int offset, int length, struct squashfs_page_actor *output)
> > +int squashfs_decompress(struct squashfs_sb_info *msblk, struct buffer_head **bh,
> > + int b, int offset, int length, struct squashfs_page_actor *output)
> > {
> > struct squashfs_stream *stream;
> > int res;
> > @@ -84,7 +84,7 @@ int squashfs_decompress(struct squashfs_
> > local_lock(&msblk->stream->lock);
> > stream = this_cpu_ptr(msblk->stream);
> >
> > - res = msblk->decompressor->decompress(msblk, stream->stream, bio,
> > + res = msblk->decompressor->decompress(msblk, stream->stream, bh, b,
> > offset, length, output);
> >
> > local_unlock(&msblk->stream->lock);
> > --- a/fs/squashfs/decompressor_single.c~revert-squashfs-migrate-from-ll_rw_block-usage-to-bio
> > +++ a/fs/squashfs/decompressor_single.c
> > @@ -7,7 +7,7 @@
> > #include <linux/types.h>
> > #include <linux/mutex.h>
> > #include <linux/slab.h>
> > -#include <linux/bio.h>
> > +#include <linux/buffer_head.h>
> >
> > #include "squashfs_fs.h"
> > #include "squashfs_fs_sb.h"
> > @@ -59,15 +59,14 @@ void squashfs_decompressor_destroy(struc
> > }
> > }
> >
> > -int squashfs_decompress(struct squashfs_sb_info *msblk, struct bio *bio,
> > - int offset, int length,
> > - struct squashfs_page_actor *output)
> > +int squashfs_decompress(struct squashfs_sb_info *msblk, struct buffer_head **bh,
> > + int b, int offset, int length, struct squashfs_page_actor *output)
> > {
> > int res;
> > struct squashfs_stream *stream = msblk->stream;
> >
> > mutex_lock(&stream->mutex);
> > - res = msblk->decompressor->decompress(msblk, stream->stream, bio,
> > + res = msblk->decompressor->decompress(msblk, stream->stream, bh, b,
> > offset, length, output);
> > mutex_unlock(&stream->mutex);
> >
> > --- a/fs/squashfs/lz4_wrapper.c~revert-squashfs-migrate-from-ll_rw_block-usage-to-bio
> > +++ a/fs/squashfs/lz4_wrapper.c
> > @@ -4,7 +4,7 @@
> > * Phillip Lougher <phillip@squashfs.org.uk>
> > */
> >
> > -#include <linux/bio.h>
> > +#include <linux/buffer_head.h>
> > #include <linux/mutex.h>
> > #include <linux/slab.h>
> > #include <linux/vmalloc.h>
> > @@ -89,23 +89,20 @@ static void lz4_free(void *strm)
> >
> >
> > static int lz4_uncompress(struct squashfs_sb_info *msblk, void *strm,
> > - struct bio *bio, int offset, int length,
> > + struct buffer_head **bh, int b, int offset, int length,
> > struct squashfs_page_actor *output)
> > {
> > - struct bvec_iter_all iter_all = {};
> > - struct bio_vec *bvec = bvec_init_iter_all(&iter_all);
> > struct squashfs_lz4 *stream = strm;
> > void *buff = stream->input, *data;
> > - int bytes = length, res;
> > + int avail, i, bytes = length, res;
> >
> > - while (bio_next_segment(bio, &iter_all)) {
> > - int avail = min(bytes, ((int)bvec->bv_len) - offset);
> > -
> > - data = page_address(bvec->bv_page) + bvec->bv_offset;
> > - memcpy(buff, data + offset, avail);
> > + for (i = 0; i < b; i++) {
> > + avail = min(bytes, msblk->devblksize - offset);
> > + memcpy(buff, bh[i]->b_data + offset, avail);
> > buff += avail;
> > bytes -= avail;
> > offset = 0;
> > + put_bh(bh[i]);
> > }
> >
> > res = LZ4_decompress_safe(stream->input, stream->output,
> > --- a/fs/squashfs/lzo_wrapper.c~revert-squashfs-migrate-from-ll_rw_block-usage-to-bio
> > +++ a/fs/squashfs/lzo_wrapper.c
> > @@ -9,7 +9,7 @@
> > */
> >
> > #include <linux/mutex.h>
> > -#include <linux/bio.h>
> > +#include <linux/buffer_head.h>
> > #include <linux/slab.h>
> > #include <linux/vmalloc.h>
> > #include <linux/lzo.h>
> > @@ -63,24 +63,21 @@ static void lzo_free(void *strm)
> >
> >
> > static int lzo_uncompress(struct squashfs_sb_info *msblk, void *strm,
> > - struct bio *bio, int offset, int length,
> > + struct buffer_head **bh, int b, int offset, int length,
> > struct squashfs_page_actor *output)
> > {
> > - struct bvec_iter_all iter_all = {};
> > - struct bio_vec *bvec = bvec_init_iter_all(&iter_all);
> > struct squashfs_lzo *stream = strm;
> > void *buff = stream->input, *data;
> > - int bytes = length, res;
> > + int avail, i, bytes = length, res;
> > size_t out_len = output->length;
> >
> > - while (bio_next_segment(bio, &iter_all)) {
> > - int avail = min(bytes, ((int)bvec->bv_len) - offset);
> > -
> > - data = page_address(bvec->bv_page) + bvec->bv_offset;
> > - memcpy(buff, data + offset, avail);
> > + for (i = 0; i < b; i++) {
> > + avail = min(bytes, msblk->devblksize - offset);
> > + memcpy(buff, bh[i]->b_data + offset, avail);
> > buff += avail;
> > bytes -= avail;
> > offset = 0;
> > + put_bh(bh[i]);
> > }
> >
> > res = lzo1x_decompress_safe(stream->input, (size_t)length,
> > --- a/fs/squashfs/squashfs.h~revert-squashfs-migrate-from-ll_rw_block-usage-to-bio
> > +++ a/fs/squashfs/squashfs.h
> > @@ -40,8 +40,8 @@ extern void *squashfs_decompressor_setup
> > /* decompressor_xxx.c */
> > extern void *squashfs_decompressor_create(struct squashfs_sb_info *, void *);
> > extern void squashfs_decompressor_destroy(struct squashfs_sb_info *);
> > -extern int squashfs_decompress(struct squashfs_sb_info *, struct bio *,
> > - int, int, struct squashfs_page_actor *);
> > +extern int squashfs_decompress(struct squashfs_sb_info *, struct buffer_head **,
> > + int, int, int, struct squashfs_page_actor *);
> > extern int squashfs_max_decompressors(void);
> >
> > /* export.c */
> > --- a/fs/squashfs/xz_wrapper.c~revert-squashfs-migrate-from-ll_rw_block-usage-to-bio
> > +++ a/fs/squashfs/xz_wrapper.c
> > @@ -10,7 +10,7 @@
> >
> >
> > #include <linux/mutex.h>
> > -#include <linux/bio.h>
> > +#include <linux/buffer_head.h>
> > #include <linux/slab.h>
> > #include <linux/xz.h>
> > #include <linux/bitops.h>
> > @@ -117,12 +117,11 @@ static void squashfs_xz_free(void *strm)
> >
> >
> > static int squashfs_xz_uncompress(struct squashfs_sb_info *msblk, void *strm,
> > - struct bio *bio, int offset, int length,
> > + struct buffer_head **bh, int b, int offset, int length,
> > struct squashfs_page_actor *output)
> > {
> > - struct bvec_iter_all iter_all = {};
> > - struct bio_vec *bvec = bvec_init_iter_all(&iter_all);
> > - int total = 0, error = 0;
> > + enum xz_ret xz_err;
> > + int avail, total = 0, k = 0;
> > struct squashfs_xz *stream = strm;
> >
> > xz_dec_reset(stream->state);
> > @@ -132,23 +131,11 @@ static int squashfs_xz_uncompress(struct
> > stream->buf.out_size = PAGE_SIZE;
> > stream->buf.out = squashfs_first_page(output);
> >
> > - for (;;) {
> > - enum xz_ret xz_err;
> > -
> > - if (stream->buf.in_pos == stream->buf.in_size) {
> > - const void *data;
> > - int avail;
> > -
> > - if (!bio_next_segment(bio, &iter_all)) {
> > - /* XZ_STREAM_END must be reached. */
> > - error = -EIO;
> > - break;
> > - }
> > -
> > - avail = min(length, ((int)bvec->bv_len) - offset);
> > - data = page_address(bvec->bv_page) + bvec->bv_offset;
> > + do {
> > + if (stream->buf.in_pos == stream->buf.in_size && k < b) {
> > + avail = min(length, msblk->devblksize - offset);
> > length -= avail;
> > - stream->buf.in = data + offset;
> > + stream->buf.in = bh[k]->b_data + offset;
> > stream->buf.in_size = avail;
> > stream->buf.in_pos = 0;
> > offset = 0;
> > @@ -163,17 +150,23 @@ static int squashfs_xz_uncompress(struct
> > }
> >
> > xz_err = xz_dec_run(stream->state, &stream->buf);
> > - if (xz_err == XZ_STREAM_END)
> > - break;
> > - if (xz_err != XZ_OK) {
> > - error = -EIO;
> > - break;
> > - }
> > - }
> > +
> > + if (stream->buf.in_pos == stream->buf.in_size && k < b)
> > + put_bh(bh[k++]);
> > + } while (xz_err == XZ_OK);
> >
> > squashfs_finish_page(output);
> >
> > - return error ? error : total + stream->buf.out_pos;
> > + if (xz_err != XZ_STREAM_END || k < b)
> > + goto out;
> > +
> > + return total + stream->buf.out_pos;
> > +
> > +out:
> > + for (; k < b; k++)
> > + put_bh(bh[k]);
> > +
> > + return -EIO;
> > }
> >
> > const struct squashfs_decompressor squashfs_xz_comp_ops = {
> > --- a/fs/squashfs/zlib_wrapper.c~revert-squashfs-migrate-from-ll_rw_block-usage-to-bio
> > +++ a/fs/squashfs/zlib_wrapper.c
> > @@ -10,7 +10,7 @@
> >
> >
> > #include <linux/mutex.h>
> > -#include <linux/bio.h>
> > +#include <linux/buffer_head.h>
> > #include <linux/slab.h>
> > #include <linux/zlib.h>
> > #include <linux/vmalloc.h>
> > @@ -50,35 +50,21 @@ static void zlib_free(void *strm)
> >
> >
> > static int zlib_uncompress(struct squashfs_sb_info *msblk, void *strm,
> > - struct bio *bio, int offset, int length,
> > + struct buffer_head **bh, int b, int offset, int length,
> > struct squashfs_page_actor *output)
> > {
> > - struct bvec_iter_all iter_all = {};
> > - struct bio_vec *bvec = bvec_init_iter_all(&iter_all);
> > - int zlib_init = 0, error = 0;
> > + int zlib_err, zlib_init = 0, k = 0;
> > z_stream *stream = strm;
> >
> > stream->avail_out = PAGE_SIZE;
> > stream->next_out = squashfs_first_page(output);
> > stream->avail_in = 0;
> >
> > - for (;;) {
> > - int zlib_err;
> > -
> > - if (stream->avail_in == 0) {
> > - const void *data;
> > - int avail;
> > -
> > - if (!bio_next_segment(bio, &iter_all)) {
> > - /* Z_STREAM_END must be reached. */
> > - error = -EIO;
> > - break;
> > - }
> > -
> > - avail = min(length, ((int)bvec->bv_len) - offset);
> > - data = page_address(bvec->bv_page) + bvec->bv_offset;
> > + do {
> > + if (stream->avail_in == 0 && k < b) {
> > + int avail = min(length, msblk->devblksize - offset);
> > length -= avail;
> > - stream->next_in = data + offset;
> > + stream->next_in = bh[k]->b_data + offset;
> > stream->avail_in = avail;
> > offset = 0;
> > }
> > @@ -92,28 +78,37 @@ static int zlib_uncompress(struct squash
> > if (!zlib_init) {
> > zlib_err = zlib_inflateInit(stream);
> > if (zlib_err != Z_OK) {
> > - error = -EIO;
> > - break;
> > + squashfs_finish_page(output);
> > + goto out;
> > }
> > zlib_init = 1;
> > }
> >
> > zlib_err = zlib_inflate(stream, Z_SYNC_FLUSH);
> > - if (zlib_err == Z_STREAM_END)
> > - break;
> > - if (zlib_err != Z_OK) {
> > - error = -EIO;
> > - break;
> > - }
> > - }
> > +
> > + if (stream->avail_in == 0 && k < b)
> > + put_bh(bh[k++]);
> > + } while (zlib_err == Z_OK);
> >
> > squashfs_finish_page(output);
> >
> > - if (!error)
> > - if (zlib_inflateEnd(stream) != Z_OK)
> > - error = -EIO;
> > + if (zlib_err != Z_STREAM_END)
> > + goto out;
> > +
> > + zlib_err = zlib_inflateEnd(stream);
> > + if (zlib_err != Z_OK)
> > + goto out;
> > +
> > + if (k < b)
> > + goto out;
> > +
> > + return stream->total_out;
> > +
> > +out:
> > + for (; k < b; k++)
> > + put_bh(bh[k]);
> >
> > - return error ? error : stream->total_out;
> > + return -EIO;
> > }
> >
> > const struct squashfs_decompressor squashfs_zlib_comp_ops = {
> > --- a/fs/squashfs/zstd_wrapper.c~revert-squashfs-migrate-from-ll_rw_block-usage-to-bio
> > +++ a/fs/squashfs/zstd_wrapper.c
> > @@ -9,7 +9,7 @@
> > */
> >
> > #include <linux/mutex.h>
> > -#include <linux/bio.h>
> > +#include <linux/buffer_head.h>
> > #include <linux/slab.h>
> > #include <linux/zstd.h>
> > #include <linux/vmalloc.h>
> > @@ -59,44 +59,33 @@ static void zstd_free(void *strm)
> >
> >
> > static int zstd_uncompress(struct squashfs_sb_info *msblk, void *strm,
> > - struct bio *bio, int offset, int length,
> > + struct buffer_head **bh, int b, int offset, int length,
> > struct squashfs_page_actor *output)
> > {
> > struct workspace *wksp = strm;
> > ZSTD_DStream *stream;
> > size_t total_out = 0;
> > - int error = 0;
> > + size_t zstd_err;
> > + int k = 0;
> > ZSTD_inBuffer in_buf = { NULL, 0, 0 };
> > ZSTD_outBuffer out_buf = { NULL, 0, 0 };
> > - struct bvec_iter_all iter_all = {};
> > - struct bio_vec *bvec = bvec_init_iter_all(&iter_all);
> >
> > stream = ZSTD_initDStream(wksp->window_size, wksp->mem, wksp->mem_size);
> >
> > if (!stream) {
> > ERROR("Failed to initialize zstd decompressor\n");
> > - return -EIO;
> > + goto out;
> > }
> >
> > out_buf.size = PAGE_SIZE;
> > out_buf.dst = squashfs_first_page(output);
> >
> > - for (;;) {
> > - size_t zstd_err;
> > + do {
> > + if (in_buf.pos == in_buf.size && k < b) {
> > + int avail = min(length, msblk->devblksize - offset);
> >
> > - if (in_buf.pos == in_buf.size) {
> > - const void *data;
> > - int avail;
> > -
> > - if (!bio_next_segment(bio, &iter_all)) {
> > - error = -EIO;
> > - break;
> > - }
> > -
> > - avail = min(length, ((int)bvec->bv_len) - offset);
> > - data = page_address(bvec->bv_page) + bvec->bv_offset;
> > length -= avail;
> > - in_buf.src = data + offset;
> > + in_buf.src = bh[k]->b_data + offset;
> > in_buf.size = avail;
> > in_buf.pos = 0;
> > offset = 0;
> > @@ -108,8 +97,8 @@ static int zstd_uncompress(struct squash
> > /* Shouldn't run out of pages
> > * before stream is done.
> > */
> > - error = -EIO;
> > - break;
> > + squashfs_finish_page(output);
> > + goto out;
> > }
> > out_buf.pos = 0;
> > out_buf.size = PAGE_SIZE;
> > @@ -118,20 +107,29 @@ static int zstd_uncompress(struct squash
> > total_out -= out_buf.pos;
> > zstd_err = ZSTD_decompressStream(stream, &out_buf, &in_buf);
> > total_out += out_buf.pos; /* add the additional data produced */
> > - if (zstd_err == 0)
> > - break;
> >
> > - if (ZSTD_isError(zstd_err)) {
> > - ERROR("zstd decompression error: %d\n",
> > - (int)ZSTD_getErrorCode(zstd_err));
> > - error = -EIO;
> > - break;
> > - }
> > - }
> > + if (in_buf.pos == in_buf.size && k < b)
> > + put_bh(bh[k++]);
> > + } while (zstd_err != 0 && !ZSTD_isError(zstd_err));
> >
> > squashfs_finish_page(output);
> >
> > - return error ? error : total_out;
> > + if (ZSTD_isError(zstd_err)) {
> > + ERROR("zstd decompression error: %d\n",
> > + (int)ZSTD_getErrorCode(zstd_err));
> > + goto out;
> > + }
> > +
> > + if (k < b)
> > + goto out;
> > +
> > + return (int)total_out;
> > +
> > +out:
> > + for (; k < b; k++)
> > + put_bh(bh[k]);
> > +
> > + return -EIO;
> > }
> >
> > const struct squashfs_decompressor squashfs_zstd_comp_ops = {
> > _
> >
^ permalink raw reply
* [igt-dev] ✓ Fi.CI.IGT: success for i915/perf: Sanity check reports in mapped OA buffer (rev2)
From: Patchwork @ 2020-07-17 4:02 UTC (permalink / raw)
To: Umesh Nerlige Ramappa; +Cc: igt-dev
In-Reply-To: <20200717015419.37439-1-umesh.nerlige.ramappa@intel.com>
[-- Attachment #1.1: Type: text/plain, Size: 23164 bytes --]
== Series Details ==
Series: i915/perf: Sanity check reports in mapped OA buffer (rev2)
URL : https://patchwork.freedesktop.org/series/79459/
State : success
== Summary ==
CI Bug Log - changes from CI_DRM_8759_full -> IGTPW_4773_full
====================================================
Summary
-------
**SUCCESS**
No regressions found.
External URL: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4773/index.html
Possible new issues
-------------------
Here are the unknown changes that may have been introduced in IGTPW_4773_full:
### IGT changes ###
#### Possible regressions ####
* {igt@perf@mapped-oa-buffer} (NEW):
- shard-tglb: NOTRUN -> [SKIP][1]
[1]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4773/shard-tglb2/igt@perf@mapped-oa-buffer.html
- shard-iclb: NOTRUN -> [SKIP][2]
[2]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4773/shard-iclb4/igt@perf@mapped-oa-buffer.html
New tests
---------
New tests have been introduced between CI_DRM_8759_full and IGTPW_4773_full:
### New IGT tests (1) ###
* igt@perf@mapped-oa-buffer:
- Statuses : 7 skip(s)
- Exec time: [0.0] s
Known issues
------------
Here are the changes found in IGTPW_4773_full that come from known issues:
### IGT changes ###
#### Issues hit ####
* igt@gen9_exec_parse@allowed-all:
- shard-kbl: [PASS][3] -> [DMESG-WARN][4] ([i915#1436] / [i915#716])
[3]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8759/shard-kbl2/igt@gen9_exec_parse@allowed-all.html
[4]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4773/shard-kbl6/igt@gen9_exec_parse@allowed-all.html
* igt@i915_module_load@reload:
- shard-tglb: [PASS][5] -> [DMESG-WARN][6] ([i915#402])
[5]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8759/shard-tglb7/igt@i915_module_load@reload.html
[6]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4773/shard-tglb7/igt@i915_module_load@reload.html
* igt@i915_selftest@mock@requests:
- shard-apl: [PASS][7] -> [INCOMPLETE][8] ([i915#1635] / [i915#2110])
[7]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8759/shard-apl3/igt@i915_selftest@mock@requests.html
[8]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4773/shard-apl2/igt@i915_selftest@mock@requests.html
- shard-hsw: [PASS][9] -> [INCOMPLETE][10] ([i915#2110])
[9]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8759/shard-hsw2/igt@i915_selftest@mock@requests.html
[10]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4773/shard-hsw6/igt@i915_selftest@mock@requests.html
* igt@kms_big_fb@x-tiled-64bpp-rotate-0:
- shard-glk: [PASS][11] -> [DMESG-FAIL][12] ([i915#118] / [i915#95]) +1 similar issue
[11]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8759/shard-glk9/igt@kms_big_fb@x-tiled-64bpp-rotate-0.html
[12]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4773/shard-glk8/igt@kms_big_fb@x-tiled-64bpp-rotate-0.html
* igt@kms_cursor_crc@pipe-b-cursor-64x64-rapid-movement:
- shard-snb: [PASS][13] -> [TIMEOUT][14] ([i915#1958] / [i915#2119]) +1 similar issue
[13]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8759/shard-snb2/igt@kms_cursor_crc@pipe-b-cursor-64x64-rapid-movement.html
[14]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4773/shard-snb5/igt@kms_cursor_crc@pipe-b-cursor-64x64-rapid-movement.html
* igt@kms_cursor_edge_walk@pipe-b-64x64-left-edge:
- shard-glk: [PASS][15] -> [DMESG-WARN][16] ([i915#1982])
[15]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8759/shard-glk5/igt@kms_cursor_edge_walk@pipe-b-64x64-left-edge.html
[16]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4773/shard-glk2/igt@kms_cursor_edge_walk@pipe-b-64x64-left-edge.html
* igt@kms_flip@flip-vs-expired-vblank@a-hdmi-a2:
- shard-glk: [PASS][17] -> [FAIL][18] ([i915#79])
[17]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8759/shard-glk8/igt@kms_flip@flip-vs-expired-vblank@a-hdmi-a2.html
[18]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4773/shard-glk6/igt@kms_flip@flip-vs-expired-vblank@a-hdmi-a2.html
* igt@kms_frontbuffer_tracking@psr-farfromfence:
- shard-tglb: [PASS][19] -> [DMESG-WARN][20] ([i915#1982]) +4 similar issues
[19]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8759/shard-tglb2/igt@kms_frontbuffer_tracking@psr-farfromfence.html
[20]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4773/shard-tglb5/igt@kms_frontbuffer_tracking@psr-farfromfence.html
* igt@kms_psr2_su@frontbuffer:
- shard-tglb: [PASS][21] -> [SKIP][22] ([i915#1911])
[21]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8759/shard-tglb3/igt@kms_psr2_su@frontbuffer.html
[22]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4773/shard-tglb6/igt@kms_psr2_su@frontbuffer.html
- shard-iclb: [PASS][23] -> [SKIP][24] ([i915#1911])
[23]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8759/shard-iclb2/igt@kms_psr2_su@frontbuffer.html
[24]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4773/shard-iclb2/igt@kms_psr2_su@frontbuffer.html
* igt@kms_psr@psr2_cursor_render:
- shard-iclb: [PASS][25] -> [SKIP][26] ([fdo#109441]) +1 similar issue
[25]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8759/shard-iclb2/igt@kms_psr@psr2_cursor_render.html
[26]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4773/shard-iclb4/igt@kms_psr@psr2_cursor_render.html
* igt@kms_vblank@pipe-a-ts-continuation-suspend:
- shard-kbl: [PASS][27] -> [DMESG-WARN][28] ([i915#180]) +8 similar issues
[27]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8759/shard-kbl7/igt@kms_vblank@pipe-a-ts-continuation-suspend.html
[28]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4773/shard-kbl1/igt@kms_vblank@pipe-a-ts-continuation-suspend.html
* igt@perf@gen8-unprivileged-single-ctx-counters:
- shard-apl: [PASS][29] -> [TIMEOUT][30] ([i915#1635] / [i915#1958] / [i915#2119])
[29]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8759/shard-apl8/igt@perf@gen8-unprivileged-single-ctx-counters.html
[30]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4773/shard-apl2/igt@perf@gen8-unprivileged-single-ctx-counters.html
- shard-glk: [PASS][31] -> [TIMEOUT][32] ([i915#1958] / [i915#2119])
[31]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8759/shard-glk4/igt@perf@gen8-unprivileged-single-ctx-counters.html
[32]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4773/shard-glk4/igt@perf@gen8-unprivileged-single-ctx-counters.html
- shard-iclb: [PASS][33] -> [TIMEOUT][34] ([i915#1958] / [i915#2119])
[33]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8759/shard-iclb7/igt@perf@gen8-unprivileged-single-ctx-counters.html
[34]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4773/shard-iclb4/igt@perf@gen8-unprivileged-single-ctx-counters.html
- shard-kbl: [PASS][35] -> [TIMEOUT][36] ([i915#1958] / [i915#2119])
[35]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8759/shard-kbl6/igt@perf@gen8-unprivileged-single-ctx-counters.html
[36]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4773/shard-kbl1/igt@perf@gen8-unprivileged-single-ctx-counters.html
* igt@perf@rc6-disable:
- shard-iclb: [PASS][37] -> [TIMEOUT][38] ([i915#2119])
[37]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8759/shard-iclb2/igt@perf@rc6-disable.html
[38]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4773/shard-iclb1/igt@perf@rc6-disable.html
- shard-hsw: [PASS][39] -> [TIMEOUT][40] ([i915#2119])
[39]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8759/shard-hsw1/igt@perf@rc6-disable.html
[40]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4773/shard-hsw1/igt@perf@rc6-disable.html
- shard-kbl: [PASS][41] -> [TIMEOUT][42] ([i915#2119])
[41]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8759/shard-kbl2/igt@perf@rc6-disable.html
[42]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4773/shard-kbl7/igt@perf@rc6-disable.html
- shard-apl: [PASS][43] -> [TIMEOUT][44] ([i915#1635] / [i915#2119])
[43]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8759/shard-apl4/igt@perf@rc6-disable.html
[44]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4773/shard-apl3/igt@perf@rc6-disable.html
- shard-tglb: [PASS][45] -> [TIMEOUT][46] ([i915#2119])
[45]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8759/shard-tglb8/igt@perf@rc6-disable.html
[46]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4773/shard-tglb1/igt@perf@rc6-disable.html
- shard-glk: [PASS][47] -> [TIMEOUT][48] ([i915#2119])
[47]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8759/shard-glk4/igt@perf@rc6-disable.html
[48]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4773/shard-glk5/igt@perf@rc6-disable.html
* igt@syncobj_wait@invalid-reset-one-illegal-handle:
- shard-hsw: [PASS][49] -> [TIMEOUT][50] ([i915#1958] / [i915#2119]) +2 similar issues
[49]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8759/shard-hsw1/igt@syncobj_wait@invalid-reset-one-illegal-handle.html
[50]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4773/shard-hsw6/igt@syncobj_wait@invalid-reset-one-illegal-handle.html
#### Possible fixes ####
* igt@dumb_buffer@map-invalid-size:
- shard-hsw: [TIMEOUT][51] ([i915#1958] / [i915#2119]) -> [PASS][52] +3 similar issues
[51]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8759/shard-hsw2/igt@dumb_buffer@map-invalid-size.html
[52]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4773/shard-hsw2/igt@dumb_buffer@map-invalid-size.html
* igt@gem_exec_balancer@bonded-early:
- shard-kbl: [FAIL][53] ([i915#2079]) -> [PASS][54]
[53]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8759/shard-kbl2/igt@gem_exec_balancer@bonded-early.html
[54]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4773/shard-kbl7/igt@gem_exec_balancer@bonded-early.html
* igt@gem_exec_params@sol-reset-not-gen7:
- shard-tglb: [DMESG-WARN][55] ([i915#402]) -> [PASS][56] +2 similar issues
[55]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8759/shard-tglb1/igt@gem_exec_params@sol-reset-not-gen7.html
[56]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4773/shard-tglb2/igt@gem_exec_params@sol-reset-not-gen7.html
* igt@gem_exec_whisper@basic-queues-all:
- shard-glk: [DMESG-WARN][57] ([i915#118] / [i915#95]) -> [PASS][58] +1 similar issue
[57]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8759/shard-glk2/igt@gem_exec_whisper@basic-queues-all.html
[58]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4773/shard-glk7/igt@gem_exec_whisper@basic-queues-all.html
* {igt@gem_huc_copy@huc-copy}:
- shard-tglb: [SKIP][59] ([i915#2190]) -> [PASS][60]
[59]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8759/shard-tglb6/igt@gem_huc_copy@huc-copy.html
[60]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4773/shard-tglb2/igt@gem_huc_copy@huc-copy.html
* igt@kms_big_fb@linear-64bpp-rotate-180:
- shard-glk: [DMESG-FAIL][61] ([i915#118] / [i915#95]) -> [PASS][62]
[61]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8759/shard-glk8/igt@kms_big_fb@linear-64bpp-rotate-180.html
[62]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4773/shard-glk3/igt@kms_big_fb@linear-64bpp-rotate-180.html
* igt@kms_big_fb@x-tiled-8bpp-rotate-180:
- shard-apl: [DMESG-WARN][63] ([i915#1635] / [i915#1982]) -> [PASS][64] +2 similar issues
[63]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8759/shard-apl7/igt@kms_big_fb@x-tiled-8bpp-rotate-180.html
[64]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4773/shard-apl6/igt@kms_big_fb@x-tiled-8bpp-rotate-180.html
- shard-glk: [DMESG-WARN][65] ([i915#1982]) -> [PASS][66]
[65]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8759/shard-glk9/igt@kms_big_fb@x-tiled-8bpp-rotate-180.html
[66]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4773/shard-glk9/igt@kms_big_fb@x-tiled-8bpp-rotate-180.html
* igt@kms_cursor_crc@pipe-c-cursor-suspend:
- shard-kbl: [DMESG-WARN][67] ([i915#180]) -> [PASS][68] +5 similar issues
[67]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8759/shard-kbl1/igt@kms_cursor_crc@pipe-c-cursor-suspend.html
[68]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4773/shard-kbl1/igt@kms_cursor_crc@pipe-c-cursor-suspend.html
* igt@kms_cursor_legacy@flip-vs-cursor-atomic-transitions:
- shard-snb: [TIMEOUT][69] ([i915#1958] / [i915#2119]) -> [PASS][70] +2 similar issues
[69]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8759/shard-snb2/igt@kms_cursor_legacy@flip-vs-cursor-atomic-transitions.html
[70]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4773/shard-snb4/igt@kms_cursor_legacy@flip-vs-cursor-atomic-transitions.html
* igt@kms_cursor_legacy@short-flip-after-cursor-atomic-transitions:
- shard-tglb: [DMESG-WARN][71] ([i915#1982]) -> [PASS][72] +2 similar issues
[71]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8759/shard-tglb2/igt@kms_cursor_legacy@short-flip-after-cursor-atomic-transitions.html
[72]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4773/shard-tglb8/igt@kms_cursor_legacy@short-flip-after-cursor-atomic-transitions.html
* igt@kms_flip_tiling@flip-changes-tiling-yf:
- shard-kbl: [DMESG-WARN][73] ([i915#1982]) -> [PASS][74] +1 similar issue
[73]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8759/shard-kbl7/igt@kms_flip_tiling@flip-changes-tiling-yf.html
[74]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4773/shard-kbl7/igt@kms_flip_tiling@flip-changes-tiling-yf.html
* igt@kms_psr@psr2_sprite_mmap_gtt:
- shard-iclb: [SKIP][75] ([fdo#109441]) -> [PASS][76] +3 similar issues
[75]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8759/shard-iclb6/igt@kms_psr@psr2_sprite_mmap_gtt.html
[76]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4773/shard-iclb2/igt@kms_psr@psr2_sprite_mmap_gtt.html
* igt@kms_setmode@basic:
- shard-hsw: [FAIL][77] ([i915#31]) -> [PASS][78]
[77]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8759/shard-hsw7/igt@kms_setmode@basic.html
[78]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4773/shard-hsw1/igt@kms_setmode@basic.html
* igt@perf@blocking-parameterized:
- shard-iclb: [FAIL][79] ([i915#1542]) -> [PASS][80]
[79]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8759/shard-iclb4/igt@perf@blocking-parameterized.html
[80]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4773/shard-iclb6/igt@perf@blocking-parameterized.html
* igt@perf_pmu@busy-idle@rcs0:
- shard-snb: [FAIL][81] ([i915#1958]) -> [PASS][82] +1 similar issue
[81]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8759/shard-snb2/igt@perf_pmu@busy-idle@rcs0.html
[82]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4773/shard-snb2/igt@perf_pmu@busy-idle@rcs0.html
* igt@perf_pmu@busy-idle@vcs0:
- shard-hsw: [FAIL][83] ([i915#1958]) -> [PASS][84] +2 similar issues
[83]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8759/shard-hsw2/igt@perf_pmu@busy-idle@vcs0.html
[84]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4773/shard-hsw2/igt@perf_pmu@busy-idle@vcs0.html
- shard-snb: [INCOMPLETE][85] ([i915#2119] / [i915#82]) -> [PASS][86]
[85]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8759/shard-snb2/igt@perf_pmu@busy-idle@vcs0.html
[86]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4773/shard-snb2/igt@perf_pmu@busy-idle@vcs0.html
* igt@perf_pmu@busy-idle@vecs0:
- shard-hsw: [DMESG-FAIL][87] ([i915#2119]) -> [PASS][88]
[87]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8759/shard-hsw2/igt@perf_pmu@busy-idle@vecs0.html
[88]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4773/shard-hsw2/igt@perf_pmu@busy-idle@vecs0.html
#### Warnings ####
* igt@gem_exec_reloc@basic-spin-others@vcs0:
- shard-snb: [WARN][89] ([i915#2021]) -> [WARN][90] ([i915#2036])
[89]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8759/shard-snb1/igt@gem_exec_reloc@basic-spin-others@vcs0.html
[90]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4773/shard-snb6/igt@gem_exec_reloc@basic-spin-others@vcs0.html
* igt@kms_ccs@pipe-c-ccs-on-another-bo:
- shard-hsw: [TIMEOUT][91] ([i915#1958] / [i915#2119]) -> [SKIP][92] ([fdo#109271])
[91]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8759/shard-hsw2/igt@kms_ccs@pipe-c-ccs-on-another-bo.html
[92]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4773/shard-hsw1/igt@kms_ccs@pipe-c-ccs-on-another-bo.html
- shard-snb: [TIMEOUT][93] ([i915#1958] / [i915#2119]) -> [SKIP][94] ([fdo#109271]) +1 similar issue
[93]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8759/shard-snb2/igt@kms_ccs@pipe-c-ccs-on-another-bo.html
[94]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4773/shard-snb4/igt@kms_ccs@pipe-c-ccs-on-another-bo.html
* igt@kms_content_protection@srm:
- shard-kbl: [TIMEOUT][95] ([i915#1319] / [i915#1958] / [i915#2119]) -> [TIMEOUT][96] ([i915#1319] / [i915#2119])
[95]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8759/shard-kbl4/igt@kms_content_protection@srm.html
[96]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4773/shard-kbl2/igt@kms_content_protection@srm.html
* igt@kms_cursor_crc@pipe-a-cursor-512x170-offscreen:
- shard-hsw: [SKIP][97] ([fdo#109271]) -> [TIMEOUT][98] ([i915#1958] / [i915#2119]) +2 similar issues
[97]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8759/shard-hsw2/igt@kms_cursor_crc@pipe-a-cursor-512x170-offscreen.html
[98]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4773/shard-hsw6/igt@kms_cursor_crc@pipe-a-cursor-512x170-offscreen.html
* igt@kms_dp_dsc@basic-dsc-enable-edp:
- shard-iclb: [SKIP][99] ([fdo#109349]) -> [DMESG-WARN][100] ([i915#1226])
[99]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8759/shard-iclb8/igt@kms_dp_dsc@basic-dsc-enable-edp.html
[100]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4773/shard-iclb2/igt@kms_dp_dsc@basic-dsc-enable-edp.html
* igt@kms_frontbuffer_tracking@fbc-suspend:
- shard-kbl: [DMESG-WARN][101] ([i915#1982]) -> [DMESG-WARN][102] ([i915#180])
[101]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8759/shard-kbl7/igt@kms_frontbuffer_tracking@fbc-suspend.html
[102]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4773/shard-kbl7/igt@kms_frontbuffer_tracking@fbc-suspend.html
* igt@kms_plane_lowres@pipe-d-tiling-y:
- shard-snb: [SKIP][103] ([fdo#109271]) -> [TIMEOUT][104] ([i915#1958] / [i915#2119]) +3 similar issues
[103]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8759/shard-snb6/igt@kms_plane_lowres@pipe-d-tiling-y.html
[104]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4773/shard-snb5/igt@kms_plane_lowres@pipe-d-tiling-y.html
* igt@runner@aborted:
- shard-kbl: ([FAIL][105], [FAIL][106], [FAIL][107], [FAIL][108], [FAIL][109], [FAIL][110]) ([i915#1436] / [i915#1784] / [i915#2110]) -> ([FAIL][111], [FAIL][112]) ([fdo#109271] / [i915#1436] / [i915#1784] / [i915#2110] / [i915#716])
[105]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8759/shard-kbl4/igt@runner@aborted.html
[106]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8759/shard-kbl4/igt@runner@aborted.html
[107]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8759/shard-kbl7/igt@runner@aborted.html
[108]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8759/shard-kbl6/igt@runner@aborted.html
[109]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8759/shard-kbl3/igt@runner@aborted.html
[110]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8759/shard-kbl2/igt@runner@aborted.html
[111]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4773/shard-kbl6/igt@runner@aborted.html
[112]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4773/shard-kbl7/igt@runner@aborted.html
- shard-apl: ([FAIL][113], [FAIL][114]) ([i915#1610] / [i915#1635] / [i915#2110]) -> [FAIL][115] ([i915#1635] / [i915#2110])
[113]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8759/shard-apl7/igt@runner@aborted.html
[114]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8759/shard-apl6/igt@runner@aborted.html
[115]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4773/shard-apl2/igt@runner@aborted.html
{name}: This element is suppressed. This means it is ignored when computing
the status of the difference (SUCCESS, WARNING, or FAILURE).
[fdo#109271]: https://bugs.freedesktop.org/show_bug.cgi?id=109271
[fdo#109349]: https://bugs.freedesktop.org/show_bug.cgi?id=109349
[fdo#109441]: https://bugs.freedesktop.org/show_bug.cgi?id=109441
[i915#118]: https://gitlab.freedesktop.org/drm/intel/issues/118
[i915#1226]: https://gitlab.freedesktop.org/drm/intel/issues/1226
[i915#1319]: https://gitlab.freedesktop.org/drm/intel/issues/1319
[i915#1436]: https://gitlab.freedesktop.org/drm/intel/issues/1436
[i915#1542]: https://gitlab.freedesktop.org/drm/intel/issues/1542
[i915#1610]: https://gitlab.freedesktop.org/drm/intel/issues/1610
[i915#1635]: https://gitlab.freedesktop.org/drm/intel/issues/1635
[i915#1784]: https://gitlab.freedesktop.org/drm/intel/issues/1784
[i915#180]: https://gitlab.freedesktop.org/drm/intel/issues/180
[i915#1911]: https://gitlab.freedesktop.org/drm/intel/issues/1911
[i915#1958]: https://gitlab.freedesktop.org/drm/intel/issues/1958
[i915#1982]: https://gitlab.freedesktop.org/drm/intel/issues/1982
[i915#2021]: https://gitlab.freedesktop.org/drm/intel/issues/2021
[i915#2036]: https://gitlab.freedesktop.org/drm/intel/issues/2036
[i915#2079]: https://gitlab.freedesktop.org/drm/intel/issues/2079
[i915#2110]: https://gitlab.freedesktop.org/drm/intel/issues/2110
[i915#2119]: https://gitlab.freedesktop.org/drm/intel/issues/2119
[i915#2190]: https://gitlab.freedesktop.org/drm/intel/issues/2190
[i915#31]: https://gitlab.freedesktop.org/drm/intel/issues/31
[i915#402]: https://gitlab.freedesktop.org/drm/intel/issues/402
[i915#716]: https://gitlab.freedesktop.org/drm/intel/issues/716
[i915#79]: https://gitlab.freedesktop.org/drm/intel/issues/79
[i915#82]: https://gitlab.freedesktop.org/drm/intel/issues/82
[i915#95]: https://gitlab.freedesktop.org/drm/intel/issues/95
Participating hosts (10 -> 8)
------------------------------
Missing (2): pig-skl-6260u pig-glk-j5005
Build changes
-------------
* CI: CI-20190529 -> None
* IGT: IGT_5738 -> IGTPW_4773
* Piglit: piglit_4509 -> None
CI-20190529: 20190529
CI_DRM_8759: 9136d875406863759c4c7939f4b32edf7d76b007 @ git://anongit.freedesktop.org/gfx-ci/linux
IGTPW_4773: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4773/index.html
IGT_5738: bc8b56fe177af34fbde7b96f1f66614a0014c6ef @ git://anongit.freedesktop.org/xorg/app/intel-gpu-tools
piglit_4509: fdc5a4ca11124ab8413c7988896eec4c97336694 @ git://anongit.freedesktop.org/piglit
== Logs ==
For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4773/index.html
[-- Attachment #1.2: Type: text/html, Size: 29945 bytes --]
[-- Attachment #2: Type: text/plain, Size: 154 bytes --]
_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev
^ permalink raw reply
* drivers/tty/serial/ucc_uart.c:286:6: warning: no previous prototype for 'qe_uart_set_mctrl'
From: kernel test robot @ 2020-07-17 4:06 UTC (permalink / raw)
To: kbuild-all
[-- Attachment #1: Type: text/plain, Size: 2767 bytes --]
Hi Rasmus,
First bad commit (maybe != root cause):
tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head: 07a56bb875afbe39dabbf6ba7b83783d166863db
commit: 5a35435ef4e6e4bd2aabd6706b146b298a9cffe5 soc: fsl: qe: remove PPC32 dependency from CONFIG_QUICC_ENGINE
date: 7 months ago
config: c6x-randconfig-r011-20200717 (attached as .config)
compiler: c6x-elf-gcc (GCC) 9.3.0
reproduce (this is a W=1 build):
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
git checkout 5a35435ef4e6e4bd2aabd6706b146b298a9cffe5
# save the attached .config to linux build tree
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross ARCH=c6x
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
All warnings (new ones prefixed by >>):
>> drivers/tty/serial/ucc_uart.c:286:6: warning: no previous prototype for 'qe_uart_set_mctrl' [-Wmissing-prototypes]
286 | void qe_uart_set_mctrl(struct uart_port *port, unsigned int mctrl)
| ^~~~~~~~~~~~~~~~~
vim +/qe_uart_set_mctrl +286 drivers/tty/serial/ucc_uart.c
d7584ed2b994a5 drivers/serial/ucc_uart.c Timur Tabi 2008-01-15 278
d7584ed2b994a5 drivers/serial/ucc_uart.c Timur Tabi 2008-01-15 279 /*
d7584ed2b994a5 drivers/serial/ucc_uart.c Timur Tabi 2008-01-15 280 * Set the modem control lines
d7584ed2b994a5 drivers/serial/ucc_uart.c Timur Tabi 2008-01-15 281 *
d7584ed2b994a5 drivers/serial/ucc_uart.c Timur Tabi 2008-01-15 282 * Although the QE can control the modem control lines (e.g. CTS), we
d7584ed2b994a5 drivers/serial/ucc_uart.c Timur Tabi 2008-01-15 283 * don't need that support. This function must exist, however, otherwise
d7584ed2b994a5 drivers/serial/ucc_uart.c Timur Tabi 2008-01-15 284 * the kernel will panic.
d7584ed2b994a5 drivers/serial/ucc_uart.c Timur Tabi 2008-01-15 285 */
d7584ed2b994a5 drivers/serial/ucc_uart.c Timur Tabi 2008-01-15 @286 void qe_uart_set_mctrl(struct uart_port *port, unsigned int mctrl)
d7584ed2b994a5 drivers/serial/ucc_uart.c Timur Tabi 2008-01-15 287 {
d7584ed2b994a5 drivers/serial/ucc_uart.c Timur Tabi 2008-01-15 288 }
d7584ed2b994a5 drivers/serial/ucc_uart.c Timur Tabi 2008-01-15 289
:::::: The code at line 286 was first introduced by commit
:::::: d7584ed2b994a572326650b0c4d2c25961e6f49d [POWERPC] qe-uart: add support for Freescale QUICCEngine UART
:::::: TO: Timur Tabi <timur@freescale.com>
:::::: CC: Kumar Gala <galak@kernel.crashing.org>
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org
[-- Attachment #2: config.gz --]
[-- Type: application/gzip, Size: 25952 bytes --]
^ permalink raw reply
* + revert-squashfs-migrate-from-ll_rw_block-usage-to-bio-fix.patch added to -mm tree
From: Andrew Morton @ 2020-07-17 4:06 UTC (permalink / raw)
To: akpm, mm-commits
In-Reply-To: <20200703151445.b6a0cfee402c7c5c4651f1b1@linux-foundation.org>
The patch titled
Subject: revert-squashfs-migrate-from-ll_rw_block-usage-to-bio-fix
has been added to the -mm tree. Its filename is
revert-squashfs-migrate-from-ll_rw_block-usage-to-bio-fix.patch
This patch should soon appear at
http://ozlabs.org/~akpm/mmots/broken-out/revert-squashfs-migrate-from-ll_rw_block-usage-to-bio-fix.patch
and later at
http://ozlabs.org/~akpm/mmotm/broken-out/revert-squashfs-migrate-from-ll_rw_block-usage-to-bio-fix.patch
Before you just go and hit "reply", please:
a) Consider who else should be cc'ed
b) Prefer to cc a suitable mailing list as well
c) Ideally: find the original patch on the mailing list and do a
reply-to-all to that, adding suitable additional cc's
*** Remember to use Documentation/process/submit-checklist.rst when testing your code ***
The -mm tree is included into linux-next and is updated
there every 3-4 working days
------------------------------------------------------
From: Andrew Morton <akpm@linux-foundation.org>
Subject: revert-squashfs-migrate-from-ll_rw_block-usage-to-bio-fix
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
---
fs/squashfs/super.c | 1 +
1 file changed, 1 insertion(+)
--- a/fs/squashfs/super.c~revert-squashfs-migrate-from-ll_rw_block-usage-to-bio-fix
+++ a/fs/squashfs/super.c
@@ -26,6 +26,7 @@
#include <linux/module.h>
#include <linux/magic.h>
#include <linux/xattr.h>
+#include <linux/blk_types.h>
#include "squashfs_fs.h"
#include "squashfs_fs_sb.h"
_
Patches currently in -mm which might be from akpm@linux-foundation.org are
mm-close-race-between-munmap-and-expand_upwards-downwards-fix.patch
revert-squashfs-migrate-from-ll_rw_block-usage-to-bio.patch
mm.patch
mm-handle-page-mapping-better-in-dump_page-fix.patch
mm-memcg-percpu-account-percpu-memory-to-memory-cgroups-fix.patch
mm-memcg-percpu-account-percpu-memory-to-memory-cgroups-fix-fix.patch
mm-thp-replace-http-links-with-https-ones-fix.patch
mm-vmstat-add-events-for-thp-migration-without-split-fix.patch
linux-next-rejects.patch
linux-next-git-rejects.patch
mm-migrate-clear-__gfp_reclaim-to-make-the-migration-callback-consistent-with-regular-thp-allocations-fix.patch
mm-madvise-introduce-process_madvise-syscall-an-external-memory-hinting-api-fix.patch
mm-madvise-introduce-process_madvise-syscall-an-external-memory-hinting-api-fix-2.patch
kernel-forkc-export-kernel_thread-to-modules.patch
revert-squashfs-migrate-from-ll_rw_block-usage-to-bio-fix.patch
^ permalink raw reply
* drivers/tty/serial/ucc_uart.c:286:6: warning: no previous prototype for 'qe_uart_set_mctrl'
From: kernel test robot @ 2020-07-17 4:06 UTC (permalink / raw)
To: Rasmus Villemoes; +Cc: kbuild-all, linux-kernel, Li Yang, Timur Tabi
[-- Attachment #1: Type: text/plain, Size: 2715 bytes --]
Hi Rasmus,
First bad commit (maybe != root cause):
tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head: 07a56bb875afbe39dabbf6ba7b83783d166863db
commit: 5a35435ef4e6e4bd2aabd6706b146b298a9cffe5 soc: fsl: qe: remove PPC32 dependency from CONFIG_QUICC_ENGINE
date: 7 months ago
config: c6x-randconfig-r011-20200717 (attached as .config)
compiler: c6x-elf-gcc (GCC) 9.3.0
reproduce (this is a W=1 build):
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
git checkout 5a35435ef4e6e4bd2aabd6706b146b298a9cffe5
# save the attached .config to linux build tree
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross ARCH=c6x
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
All warnings (new ones prefixed by >>):
>> drivers/tty/serial/ucc_uart.c:286:6: warning: no previous prototype for 'qe_uart_set_mctrl' [-Wmissing-prototypes]
286 | void qe_uart_set_mctrl(struct uart_port *port, unsigned int mctrl)
| ^~~~~~~~~~~~~~~~~
vim +/qe_uart_set_mctrl +286 drivers/tty/serial/ucc_uart.c
d7584ed2b994a5 drivers/serial/ucc_uart.c Timur Tabi 2008-01-15 278
d7584ed2b994a5 drivers/serial/ucc_uart.c Timur Tabi 2008-01-15 279 /*
d7584ed2b994a5 drivers/serial/ucc_uart.c Timur Tabi 2008-01-15 280 * Set the modem control lines
d7584ed2b994a5 drivers/serial/ucc_uart.c Timur Tabi 2008-01-15 281 *
d7584ed2b994a5 drivers/serial/ucc_uart.c Timur Tabi 2008-01-15 282 * Although the QE can control the modem control lines (e.g. CTS), we
d7584ed2b994a5 drivers/serial/ucc_uart.c Timur Tabi 2008-01-15 283 * don't need that support. This function must exist, however, otherwise
d7584ed2b994a5 drivers/serial/ucc_uart.c Timur Tabi 2008-01-15 284 * the kernel will panic.
d7584ed2b994a5 drivers/serial/ucc_uart.c Timur Tabi 2008-01-15 285 */
d7584ed2b994a5 drivers/serial/ucc_uart.c Timur Tabi 2008-01-15 @286 void qe_uart_set_mctrl(struct uart_port *port, unsigned int mctrl)
d7584ed2b994a5 drivers/serial/ucc_uart.c Timur Tabi 2008-01-15 287 {
d7584ed2b994a5 drivers/serial/ucc_uart.c Timur Tabi 2008-01-15 288 }
d7584ed2b994a5 drivers/serial/ucc_uart.c Timur Tabi 2008-01-15 289
:::::: The code at line 286 was first introduced by commit
:::::: d7584ed2b994a572326650b0c4d2c25961e6f49d [POWERPC] qe-uart: add support for Freescale QUICCEngine UART
:::::: TO: Timur Tabi <timur@freescale.com>
:::::: CC: Kumar Gala <galak@kernel.crashing.org>
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 25952 bytes --]
^ permalink raw reply
page: next (older) | prev (newer) | latest
- recent:[subjects (threaded)|topics (new)|topics (active)]
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.