You can subscribe to this list here.
1999 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
(8) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2000 |
Jan
(19) |
Feb
(11) |
Mar
(56) |
Apr
(31) |
May
(37) |
Jun
(21) |
Jul
(30) |
Aug
(31) |
Sep
(25) |
Oct
(60) |
Nov
(28) |
Dec
(57) |
2001 |
Jan
(47) |
Feb
(119) |
Mar
(279) |
Apr
(198) |
May
(336) |
Jun
(201) |
Jul
(136) |
Aug
(123) |
Sep
(123) |
Oct
(185) |
Nov
(66) |
Dec
(97) |
2002 |
Jan
(318) |
Feb
(101) |
Mar
(167) |
Apr
(233) |
May
(249) |
Jun
(134) |
Jul
(195) |
Aug
(99) |
Sep
(278) |
Oct
(435) |
Nov
(326) |
Dec
(325) |
2003 |
Jan
(214) |
Feb
(309) |
Mar
(142) |
Apr
(141) |
May
(210) |
Jun
(86) |
Jul
(133) |
Aug
(218) |
Sep
(315) |
Oct
(152) |
Nov
(162) |
Dec
(288) |
2004 |
Jan
(277) |
Feb
(267) |
Mar
(182) |
Apr
(168) |
May
(254) |
Jun
(131) |
Jul
(168) |
Aug
(177) |
Sep
(262) |
Oct
(309) |
Nov
(262) |
Dec
(255) |
2005 |
Jan
(258) |
Feb
(169) |
Mar
(282) |
Apr
(208) |
May
(262) |
Jun
(187) |
Jul
(207) |
Aug
(171) |
Sep
(283) |
Oct
(216) |
Nov
(307) |
Dec
(107) |
2006 |
Jan
(207) |
Feb
(82) |
Mar
(192) |
Apr
(165) |
May
(121) |
Jun
(108) |
Jul
(120) |
Aug
(126) |
Sep
(101) |
Oct
(216) |
Nov
(95) |
Dec
(125) |
2007 |
Jan
(176) |
Feb
(117) |
Mar
(240) |
Apr
(120) |
May
(81) |
Jun
(82) |
Jul
(62) |
Aug
(120) |
Sep
(103) |
Oct
(109) |
Nov
(181) |
Dec
(87) |
2008 |
Jan
(145) |
Feb
(69) |
Mar
(31) |
Apr
(98) |
May
(91) |
Jun
(43) |
Jul
(68) |
Aug
(135) |
Sep
(48) |
Oct
(18) |
Nov
(29) |
Dec
(16) |
2009 |
Jan
(26) |
Feb
(15) |
Mar
(83) |
Apr
(39) |
May
(23) |
Jun
(35) |
Jul
(11) |
Aug
(3) |
Sep
(11) |
Oct
(2) |
Nov
(28) |
Dec
(8) |
2010 |
Jan
(4) |
Feb
(40) |
Mar
(4) |
Apr
(46) |
May
(35) |
Jun
(46) |
Jul
(10) |
Aug
(4) |
Sep
(50) |
Oct
(70) |
Nov
(31) |
Dec
(24) |
2011 |
Jan
(17) |
Feb
(8) |
Mar
(35) |
Apr
(50) |
May
(75) |
Jun
(55) |
Jul
(72) |
Aug
(272) |
Sep
(10) |
Oct
(9) |
Nov
(11) |
Dec
(15) |
2012 |
Jan
(36) |
Feb
(49) |
Mar
(54) |
Apr
(47) |
May
(8) |
Jun
(82) |
Jul
(20) |
Aug
(50) |
Sep
(51) |
Oct
(20) |
Nov
(10) |
Dec
(25) |
2013 |
Jan
(34) |
Feb
(4) |
Mar
(24) |
Apr
(40) |
May
(101) |
Jun
(30) |
Jul
(55) |
Aug
(84) |
Sep
(53) |
Oct
(49) |
Nov
(61) |
Dec
(36) |
2014 |
Jan
(26) |
Feb
(22) |
Mar
(30) |
Apr
(4) |
May
(43) |
Jun
(33) |
Jul
(44) |
Aug
(61) |
Sep
(46) |
Oct
(154) |
Nov
(16) |
Dec
(12) |
2015 |
Jan
(18) |
Feb
(2) |
Mar
(122) |
Apr
(23) |
May
(56) |
Jun
(29) |
Jul
(35) |
Aug
(15) |
Sep
|
Oct
(45) |
Nov
(94) |
Dec
(38) |
2016 |
Jan
(50) |
Feb
(39) |
Mar
(39) |
Apr
(1) |
May
(14) |
Jun
(12) |
Jul
(19) |
Aug
(12) |
Sep
(9) |
Oct
(1) |
Nov
(13) |
Dec
(7) |
2017 |
Jan
(6) |
Feb
(1) |
Mar
(16) |
Apr
(5) |
May
(61) |
Jun
(18) |
Jul
(43) |
Aug
(1) |
Sep
(8) |
Oct
(25) |
Nov
(30) |
Dec
(6) |
2018 |
Jan
(5) |
Feb
(2) |
Mar
(25) |
Apr
(15) |
May
(2) |
Jun
(1) |
Jul
|
Aug
|
Sep
|
Oct
(1) |
Nov
|
Dec
|
2019 |
Jan
|
Feb
(2) |
Mar
|
Apr
(1) |
May
|
Jun
(1) |
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
From: Richard W. <ri...@no...> - 2016-01-25 22:42:25
|
Am 25.01.2016 um 23:24 schrieb Richard Weinberger: > Not every arch has io memory. > So, unbreak the build by fixing the dependencies. > > Signed-off-by: Richard Weinberger <ri...@no...> > --- > drivers/leds/Kconfig | 2 ++ > 1 file changed, 2 insertions(+) > > diff --git a/drivers/leds/Kconfig b/drivers/leds/Kconfig > index 7f940c2..e76a45c 100644 > --- a/drivers/leds/Kconfig > +++ b/drivers/leds/Kconfig > @@ -54,6 +54,7 @@ config LEDS_BCM6328 > depends on LEDS_CLASS > depends on HAS_IOMEM > depends on OF > + depends on HAS_IOMEM > help > This option enables support for LEDs connected to the BCM6328 > LED HW controller accessed via MMIO registers. > @@ -63,6 +64,7 @@ config LEDS_BCM6358 > depends on LEDS_CLASS > depends on HAS_IOMEM > depends on OF > + depends on HAS_IOMEM Please drop this patch too. Did not notice that this was fixed already. Thanks, //richard |
From: Richard W. <ri...@no...> - 2016-01-25 22:40:53
|
Am 25.01.2016 um 23:24 schrieb Richard Weinberger: > Not every arch has io memory. > So, unbreak the build by fixing the dependencies. > > Signed-off-by: Richard Weinberger <ri...@no...> > --- > drivers/pwm/Kconfig | 1 + > 1 file changed, 1 insertion(+) > > diff --git a/drivers/pwm/Kconfig b/drivers/pwm/Kconfig > index 8cf0dae..e83aa94 100644 > --- a/drivers/pwm/Kconfig > +++ b/drivers/pwm/Kconfig > @@ -150,6 +150,7 @@ config PWM_FSL_FTM > tristate "Freescale FlexTimer Module (FTM) PWM support" > depends on HAS_IOMEM > depends on OF > + depends on HAS_IOMEM Please drop this patch. It was created before: commit 36d5be4bc9059f8123e818c8b63a4049cf1d0e0f Author: Vegard Nossum <veg...@or...> Date: Sat Jan 2 14:02:07 2016 +0100 pwm: add HAS_IOMEM dependency to PWM_FSL_FTM git am did not notice^^ Thanks, //richard |
From: Richard W. <ri...@no...> - 2016-01-25 22:33:52
|
Commit db2f24dc240856fb1d78005307f1523b7b3c121b was plain wrong. I did not realize the we are allowed to loop here. In fact we have to loop and must not return to userspace before all SIGSEGVs have been delivered. Other archs do this directly in their entry code, UML does it here. Reported-by: Al Viro <vi...@ze...> Signed-off-by: Richard Weinberger <ri...@no...> diff --git a/arch/um/kernel/signal.c b/arch/um/kernel/signal.c index fc8be0e..57acbd6 100644 --- a/arch/um/kernel/signal.c +++ b/arch/um/kernel/signal.c @@ -69,7 +69,7 @@ void do_signal(struct pt_regs *regs) struct ksignal ksig; int handled_sig = 0; - if (get_signal(&ksig)) { + while (get_signal(&ksig)) { handled_sig = 1; /* Whee! Actually deliver the signal. */ handle_signal(&ksig, regs); -- 1.8.4.5 |
From: Richard W. <ri...@no...> - 2016-01-25 22:25:15
|
...modules are using this symbol. Export it like all other archs to. Signed-off-by: Richard Weinberger <ri...@no...> --- arch/um/kernel/reboot.c | 1 + 1 file changed, 1 insertion(+) diff --git a/arch/um/kernel/reboot.c b/arch/um/kernel/reboot.c index 9bdf67a..b60a9f8 100644 --- a/arch/um/kernel/reboot.c +++ b/arch/um/kernel/reboot.c @@ -12,6 +12,7 @@ #include <skas.h> void (*pm_power_off)(void); +EXPORT_SYMBOL(pm_power_off); static void kill_off_processes(void) { -- 1.8.4.5 |
From: Richard W. <ri...@no...> - 2016-01-25 22:25:10
|
Not every arch has io memory. So, unbreak the build by fixing the dependencies. [rw: Found these linker issues after resolving a pile of other build issues.] Signed-off-by: Richard Weinberger <ri...@no...> --- drivers/clocksource/Kconfig | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/drivers/clocksource/Kconfig b/drivers/clocksource/Kconfig index 56777f0..224841e 100644 --- a/drivers/clocksource/Kconfig +++ b/drivers/clocksource/Kconfig @@ -30,6 +30,7 @@ config CLKSRC_MMIO config DIGICOLOR_TIMER bool "Digicolor timer driver" if COMPILE_TEST depends on GENERIC_CLOCKEVENTS + depends on HAS_IOMEM help Enables the support for the digicolor timer driver. @@ -76,6 +77,7 @@ config ORION_TIMER config SUN4I_TIMER bool "Sun4i timer driver" if COMPILE_TEST depends on GENERIC_CLOCKEVENTS + depends on HAS_IOMEM select CLKSRC_MMIO help Enables support for the Sun4i timer. @@ -96,6 +98,7 @@ config TEGRA_TIMER config VT8500_TIMER bool "VT8500 timer driver" if COMPILE_TEST depends on GENERIC_CLOCKEVENTS + depends on HAS_IOMEM help Enables support for the VT8500 driver. @@ -131,6 +134,7 @@ config CLKSRC_NOMADIK_MTU_SCHED_CLOCK config CLKSRC_DBX500_PRCMU bool "Clocksource PRCMU Timer" if COMPILE_TEST depends on GENERIC_CLOCKEVENTS + depends on HAS_IOMEM help Use the always on PRCMU Timer as clocksource @@ -248,6 +252,7 @@ config CLKSRC_EXYNOS_MCT config CLKSRC_SAMSUNG_PWM bool "PWM timer drvier for Samsung S3C, S5P" if COMPILE_TEST depends on GENERIC_CLOCKEVENTS + depends on HAS_IOMEM help This is a new clocksource driver for the PWM timer found in Samsung S3C, S5P and Exynos SoCs, replacing an earlier driver @@ -257,6 +262,7 @@ config CLKSRC_SAMSUNG_PWM config FSL_FTM_TIMER bool "Freescale FlexTimer Module driver" if COMPILE_TEST depends on GENERIC_CLOCKEVENTS + depends on HAS_IOMEM select CLKSRC_MMIO help Support for Freescale FlexTimer Module (FTM) timer. @@ -360,6 +366,7 @@ config CLKSRC_TANGO_XTAL config CLKSRC_PXA bool "Clocksource for PXA or SA-11x0 platform" if COMPILE_TEST depends on GENERIC_CLOCKEVENTS + depends on HAS_IOMEM select CLKSRC_MMIO help This enables OST0 support available on PXA and SA-11x0 -- 1.8.4.5 |
From: Richard W. <ri...@no...> - 2016-01-25 22:25:10
|
Not every arch has io memory. So, unbreak the build by fixing the dependencies. Signed-off-by: Richard Weinberger <ri...@no...> --- drivers/thermal/Kconfig | 7 +++++++ drivers/thermal/ti-soc-thermal/Kconfig | 1 + 2 files changed, 8 insertions(+) diff --git a/drivers/thermal/Kconfig b/drivers/thermal/Kconfig index 8cc4ac6..8876c7e 100644 --- a/drivers/thermal/Kconfig +++ b/drivers/thermal/Kconfig @@ -178,6 +178,7 @@ config THERMAL_EMULATION config HISI_THERMAL tristate "Hisilicon thermal driver" depends on (ARCH_HISI && CPU_THERMAL && OF) || COMPILE_TEST + depends on HAS_IOMEM help Enable this to plug hisilicon's thermal sensor driver into the Linux thermal framework. cpufreq is used as the cooling device to throttle @@ -198,6 +199,7 @@ config SPEAR_THERMAL bool "SPEAr thermal sensor driver" depends on PLAT_SPEAR || COMPILE_TEST depends on OF + depends on HAS_IOMEM help Enable this to plug the SPEAr thermal sensor driver into the Linux thermal framework. @@ -206,6 +208,7 @@ config ROCKCHIP_THERMAL tristate "Rockchip thermal driver" depends on ARCH_ROCKCHIP || COMPILE_TEST depends on RESET_CONTROLLER + depends on HAS_IOMEM help Rockchip thermal driver provides support for Temperature sensor ADC (TS-ADC) found on Rockchip SoCs. It supports one critical @@ -224,6 +227,7 @@ config KIRKWOOD_THERMAL tristate "Temperature sensor on Marvell Kirkwood SoCs" depends on MACH_KIRKWOOD || COMPILE_TEST depends on OF + depends on HAS_IOMEM help Support for the Kirkwood thermal sensor driver into the Linux thermal framework. Only kirkwood 88F6282 and 88F6283 have this sensor. @@ -232,6 +236,7 @@ config DOVE_THERMAL tristate "Temperature sensor on Marvell Dove SoCs" depends on ARCH_DOVE || MACH_DOVE || COMPILE_TEST depends on OF + depends on HAS_IOMEM help Support for the Dove thermal sensor driver in the Linux thermal framework. @@ -250,6 +255,7 @@ config ARMADA_THERMAL tristate "Armada 370/XP thermal management" depends on ARCH_MVEBU || COMPILE_TEST depends on OF + depends on HAS_IOMEM help Enable this option if you want to have support for thermal management controller present in Armada 370 and Armada XP SoC. @@ -372,6 +378,7 @@ endmenu menu "Samsung thermal drivers" depends on ARCH_EXYNOS || COMPILE_TEST +depends on HAS_IOMEM source "drivers/thermal/samsung/Kconfig" endmenu diff --git a/drivers/thermal/ti-soc-thermal/Kconfig b/drivers/thermal/ti-soc-thermal/Kconfig index ea8283f..283d794 100644 --- a/drivers/thermal/ti-soc-thermal/Kconfig +++ b/drivers/thermal/ti-soc-thermal/Kconfig @@ -1,5 +1,6 @@ config TI_SOC_THERMAL tristate "Texas Instruments SoCs temperature sensor driver" + depends on HAS_IOMEM help If you say yes here you get support for the Texas Instruments OMAP4460+ on die bandgap temperature sensor support. The register -- 1.8.4.5 |
From: Richard W. <ri...@no...> - 2016-01-25 22:25:09
|
Not every arch has io memory. So, unbreak the build by fixing the dependencies. Signed-off-by: Richard Weinberger <ri...@no...> --- drivers/irqchip/Kconfig | 1 + 1 file changed, 1 insertion(+) diff --git a/drivers/irqchip/Kconfig b/drivers/irqchip/Kconfig index 715923d..fb50911 100644 --- a/drivers/irqchip/Kconfig +++ b/drivers/irqchip/Kconfig @@ -159,6 +159,7 @@ config TB10X_IRQC config TS4800_IRQ tristate "TS-4800 IRQ controller" select IRQ_DOMAIN + depends on HAS_IOMEM help Support for the TS-4800 FPGA IRQ controller -- 1.8.4.5 |
From: Richard W. <ri...@no...> - 2016-01-25 22:25:08
|
Not every arch has io memory. While the driver has correct dependencies the select statement will bypass the HAS_IOMEM dependency. So, unbreak the build by rendering it into a real dependency. Signed-off-by: Richard Weinberger <ri...@no...> --- drivers/media/Kconfig | 3 +-- drivers/media/usb/cx231xx/Kconfig | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/drivers/media/Kconfig b/drivers/media/Kconfig index a8518fb..5553cb1 100644 --- a/drivers/media/Kconfig +++ b/drivers/media/Kconfig @@ -187,8 +187,7 @@ config MEDIA_SUBDRV_AUTOSELECT bool "Autoselect ancillary drivers (tuners, sensors, i2c, frontends)" depends on MEDIA_ANALOG_TV_SUPPORT || MEDIA_DIGITAL_TV_SUPPORT || MEDIA_CAMERA_SUPPORT || MEDIA_SDR_SUPPORT depends on HAS_IOMEM - select I2C - select I2C_MUX + depends on I2C_MUX && I2C default y help By default, a media driver auto-selects all possible ancillary diff --git a/drivers/media/usb/cx231xx/Kconfig b/drivers/media/usb/cx231xx/Kconfig index 0cced3e..30ae67d 100644 --- a/drivers/media/usb/cx231xx/Kconfig +++ b/drivers/media/usb/cx231xx/Kconfig @@ -1,13 +1,13 @@ config VIDEO_CX231XX tristate "Conexant cx231xx USB video capture support" depends on VIDEO_DEV && I2C + depends on I2C_MUX select VIDEO_TUNER select VIDEO_TVEEPROM depends on RC_CORE select VIDEOBUF_VMALLOC select VIDEO_CX25840 select VIDEO_CX2341X - select I2C_MUX ---help--- This is a video4linux driver for Conexant 231xx USB based TV cards. -- 1.8.4.5 |
From: Richard W. <ri...@no...> - 2016-01-25 22:25:06
|
Not every arch has io memory. While the driver has correct dependencies the select statement will bypass the HAS_IOMEM dependency. So, unbreak the build by rendering it into a real dependency. Signed-off-by: Richard Weinberger <ri...@no...> --- drivers/iio/imu/inv_mpu6050/Kconfig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/iio/imu/inv_mpu6050/Kconfig b/drivers/iio/imu/inv_mpu6050/Kconfig index 48fbc0b..8f8d137 100644 --- a/drivers/iio/imu/inv_mpu6050/Kconfig +++ b/drivers/iio/imu/inv_mpu6050/Kconfig @@ -5,9 +5,9 @@ config INV_MPU6050_IIO tristate "Invensense MPU6050 devices" depends on I2C && SYSFS + depends on I2C_MUX select IIO_BUFFER select IIO_TRIGGERED_BUFFER - select I2C_MUX help This driver supports the Invensense MPU6050 devices. This driver can also support MPU6500 in MPU6050 compatibility mode -- 1.8.4.5 |
From: Richard W. <ri...@no...> - 2016-01-25 22:25:04
|
Not every arch has io memory. So, unbreak the build by fixing the dependencies. Signed-off-by: Richard Weinberger <ri...@no...> --- drivers/watchdog/Kconfig | 3 +++ 1 file changed, 3 insertions(+) diff --git a/drivers/watchdog/Kconfig b/drivers/watchdog/Kconfig index 4f0e7be..0bd559a 100644 --- a/drivers/watchdog/Kconfig +++ b/drivers/watchdog/Kconfig @@ -146,6 +146,7 @@ config TANGOX_WATCHDOG tristate "Sigma Designs SMP86xx/SMP87xx watchdog" select WATCHDOG_CORE depends on ARCH_TANGOX || COMPILE_TEST + depends on HAS_IOMEM help Support for the watchdog in Sigma Designs SMP86xx (tango3) and SMP87xx (tango4) family chips. @@ -618,6 +619,7 @@ config DIGICOLOR_WATCHDOG config LPC18XX_WATCHDOG tristate "LPC18xx/43xx Watchdog" depends on ARCH_LPC18XX || COMPILE_TEST + depends on HAS_IOMEM select WATCHDOG_CORE help Say Y here if to include support for the watchdog timer @@ -1374,6 +1376,7 @@ config BCM_KONA_WDT_DEBUG config BCM7038_WDT tristate "BCM7038 Watchdog" select WATCHDOG_CORE + depends on HAS_IOMEM help Watchdog driver for the built-in hardware in Broadcom 7038 SoCs. -- 1.8.4.5 |
From: Richard W. <ri...@no...> - 2016-01-25 22:25:03
|
Not every arch has io memory. So, unbreak the build by fixing the dependencies. Signed-off-by: Richard Weinberger <ri...@no...> --- drivers/pwm/Kconfig | 1 + 1 file changed, 1 insertion(+) diff --git a/drivers/pwm/Kconfig b/drivers/pwm/Kconfig index 8cf0dae..e83aa94 100644 --- a/drivers/pwm/Kconfig +++ b/drivers/pwm/Kconfig @@ -150,6 +150,7 @@ config PWM_FSL_FTM tristate "Freescale FlexTimer Module (FTM) PWM support" depends on HAS_IOMEM depends on OF + depends on HAS_IOMEM select REGMAP_MMIO help Generic FTM PWM framework driver for Freescale VF610 and -- 1.8.4.5 |
From: Richard W. <ri...@no...> - 2016-01-25 22:25:02
|
Not every arch has io memory. So, unbreak the build by fixing the dependencies. Signed-off-by: Richard Weinberger <ri...@no...> --- drivers/net/ethernet/ezchip/Kconfig | 1 + drivers/net/phy/Kconfig | 1 + 2 files changed, 2 insertions(+) diff --git a/drivers/net/ethernet/ezchip/Kconfig b/drivers/net/ethernet/ezchip/Kconfig index 48ecbc8..b423ad3 100644 --- a/drivers/net/ethernet/ezchip/Kconfig +++ b/drivers/net/ethernet/ezchip/Kconfig @@ -18,6 +18,7 @@ if NET_VENDOR_EZCHIP config EZCHIP_NPS_MANAGEMENT_ENET tristate "EZchip NPS management enet support" depends on OF_IRQ && OF_NET + depends on HAS_IOMEM ---help--- Simple LAN device for debug or management purposes. Device supports interrupts for RX and TX(completion). diff --git a/drivers/net/phy/Kconfig b/drivers/net/phy/Kconfig index 60994a8..f0a7702 100644 --- a/drivers/net/phy/Kconfig +++ b/drivers/net/phy/Kconfig @@ -186,6 +186,7 @@ config MDIO_GPIO config MDIO_OCTEON tristate "Support for MDIO buses on Octeon and ThunderX SOCs" depends on 64BIT + depends on HAS_IOMEM help This module provides a driver for the Octeon and ThunderX MDIO -- 1.8.4.5 |
From: Richard W. <ri...@no...> - 2016-01-25 22:24:54
|
Not every arch has io memory. So, unbreak the build by fixing the dependencies. Signed-off-by: Richard Weinberger <ri...@no...> --- drivers/mailbox/Kconfig | 1 + 1 file changed, 1 insertion(+) diff --git a/drivers/mailbox/Kconfig b/drivers/mailbox/Kconfig index 546d05f..b2bbe86 100644 --- a/drivers/mailbox/Kconfig +++ b/drivers/mailbox/Kconfig @@ -81,6 +81,7 @@ config STI_MBOX config MAILBOX_TEST tristate "Mailbox Test Client" depends on OF + depends on HAS_IOMEM help Test client to help with testing new Controller driver implementations. -- 1.8.4.5 |
From: Richard W. <ri...@no...> - 2016-01-25 22:24:54
|
Not every arch has io memory. So, unbreak the build by fixing the dependencies. Signed-off-by: Richard Weinberger <ri...@no...> --- drivers/nvmem/Kconfig | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/drivers/nvmem/Kconfig b/drivers/nvmem/Kconfig index bc4ea58..c675ee9 100644 --- a/drivers/nvmem/Kconfig +++ b/drivers/nvmem/Kconfig @@ -28,6 +28,7 @@ config NVMEM_IMX_OCOTP config NVMEM_MXS_OCOTP tristate "Freescale MXS On-Chip OTP Memory Support" depends on ARCH_MXS || COMPILE_TEST + depends on HAS_IOMEM help If you say Y here, you will get readonly access to the One Time Programmable memory pages that are stored @@ -39,6 +40,7 @@ config NVMEM_MXS_OCOTP config QCOM_QFPROM tristate "QCOM QFPROM Support" depends on ARCH_QCOM || COMPILE_TEST + depends on HAS_IOMEM select REGMAP_MMIO help Say y here to enable QFPROM support. The QFPROM provides access @@ -50,6 +52,7 @@ config QCOM_QFPROM config ROCKCHIP_EFUSE tristate "Rockchip eFuse Support" depends on ARCH_ROCKCHIP || COMPILE_TEST + depends on HAS_IOMEM help This is a simple drive to dump specified values of Rockchip SoC from eFuse, such as cpu-leakage. @@ -71,6 +74,7 @@ config NVMEM_SUNXI_SID config NVMEM_VF610_OCOTP tristate "VF610 SoC OCOTP support" depends on SOC_VF610 || COMPILE_TEST + depends on HAS_IOMEM help This is a driver for the 'OCOTP' peripheral available on Vybrid devices like VF5xx and VF6xx. -- 1.8.4.5 |
From: Richard W. <ri...@no...> - 2016-01-25 22:24:54
|
Not every arch has io memory. So, unbreak the build by fixing the dependencies. Signed-off-by: Richard Weinberger <ri...@no...> --- drivers/leds/Kconfig | 2 ++ 1 file changed, 2 insertions(+) diff --git a/drivers/leds/Kconfig b/drivers/leds/Kconfig index 7f940c2..e76a45c 100644 --- a/drivers/leds/Kconfig +++ b/drivers/leds/Kconfig @@ -54,6 +54,7 @@ config LEDS_BCM6328 depends on LEDS_CLASS depends on HAS_IOMEM depends on OF + depends on HAS_IOMEM help This option enables support for LEDs connected to the BCM6328 LED HW controller accessed via MMIO registers. @@ -63,6 +64,7 @@ config LEDS_BCM6358 depends on LEDS_CLASS depends on HAS_IOMEM depends on OF + depends on HAS_IOMEM help This option enables support for LEDs connected to the BCM6358 LED HW controller accessed via MMIO registers. -- 1.8.4.5 |
From: Richard W. <ri...@no...> - 2016-01-25 22:24:53
|
Not every arch has io memory. So, unbreak the build by fixing the dependencies. Signed-off-by: Richard Weinberger <ri...@no...> --- drivers/hwtracing/intel_th/Kconfig | 1 + 1 file changed, 1 insertion(+) diff --git a/drivers/hwtracing/intel_th/Kconfig b/drivers/hwtracing/intel_th/Kconfig index b7a9073..467dae9 100644 --- a/drivers/hwtracing/intel_th/Kconfig +++ b/drivers/hwtracing/intel_th/Kconfig @@ -1,5 +1,6 @@ config INTEL_TH tristate "Intel(R) Trace Hub controller" + depends on HAS_IOMEM help Intel(R) Trace Hub (TH) is a set of hardware blocks (subdevices) that produce, switch and output trace data from multiple hardware and -- 1.8.4.5 |
From: Richard W. <ri...@no...> - 2016-01-25 22:24:52
|
Not every arch has io memory. So, unbreak the build by fixing the dependencies. Signed-off-by: Richard Weinberger <ri...@no...> --- drivers/fpga/Kconfig | 1 + 1 file changed, 1 insertion(+) diff --git a/drivers/fpga/Kconfig b/drivers/fpga/Kconfig index c9b9fdf..36c54af 100644 --- a/drivers/fpga/Kconfig +++ b/drivers/fpga/Kconfig @@ -21,6 +21,7 @@ config FPGA_MGR_SOCFPGA config FPGA_MGR_ZYNQ_FPGA tristate "Xilinx Zynq FPGA" + depends on HAS_IOMEM help FPGA manager driver support for Xilinx Zynq FPGAs. -- 1.8.4.5 |
From: Richard W. <ri...@no...> - 2016-01-25 22:24:44
|
Not every arch has io or DMA memory. So, unbreak the build by fixing the dependencies. Signed-off-by: Richard Weinberger <ri...@no...> --- drivers/scsi/hisi_sas/Kconfig | 1 + 1 file changed, 1 insertion(+) diff --git a/drivers/scsi/hisi_sas/Kconfig b/drivers/scsi/hisi_sas/Kconfig index 37a0c71..f9157f4 100644 --- a/drivers/scsi/hisi_sas/Kconfig +++ b/drivers/scsi/hisi_sas/Kconfig @@ -2,5 +2,6 @@ config SCSI_HISI_SAS tristate "HiSilicon SAS" select SCSI_SAS_LIBSAS select BLK_DEV_INTEGRITY + depends on HAS_IOMEM && HAS_DMA help This driver supports HiSilicon's SAS HBA -- 1.8.4.5 |
From: Richard W. <ri...@no...> - 2016-01-25 22:24:43
|
Not every arch has io memory. So, unbreak the build by fixing the dependencies. Signed-off-by: Richard Weinberger <ri...@no...> --- drivers/phy/Kconfig | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/drivers/phy/Kconfig b/drivers/phy/Kconfig index e7e117d..ddfbaf9 100644 --- a/drivers/phy/Kconfig +++ b/drivers/phy/Kconfig @@ -33,6 +33,7 @@ config ARMADA375_USBCLUSTER_PHY def_bool y depends on MACH_ARMADA_375 || COMPILE_TEST depends on OF + depends on HAS_IOMEM select GENERIC_PHY config PHY_DM816X_USB @@ -128,6 +129,7 @@ config PHY_RCAR_GEN3_USB2 config OMAP_CONTROL_PHY tristate "OMAP CONTROL PHY Driver" depends on ARCH_OMAP2PLUS || COMPILE_TEST + depends on HAS_IOMEM help Enable this to add support for the PHY part present in the control module. This driver has API to power on the USB2 PHY and to write to @@ -224,6 +226,7 @@ config PHY_MT65XX_USB3 config PHY_HI6220_USB tristate "hi6220 USB PHY support" + depends on HAS_IOMEM select GENERIC_PHY select MFD_SYSCON help @@ -400,6 +403,7 @@ config PHY_BRCMSTB_SATA config PHY_CYGNUS_PCIE tristate "Broadcom Cygnus PCIe PHY driver" depends on OF && (ARCH_BCM_CYGNUS || COMPILE_TEST) + depends on HAS_IOMEM select GENERIC_PHY default ARCH_BCM_CYGNUS help -- 1.8.4.5 |
From: Richard W. <ri...@no...> - 2016-01-25 22:24:41
|
Last few months I was very busy and now I have the mess, UML allmod/yesconfig does not build at all. This large and boring patch series fixes a lot of drivers which cannot work/build on UML. Fixes are grouped by subsystem such that maintainers can review/pickup them. Thanks, //richard [PATCH 01/22] power: reset: Fix dependencies for !HAS_IOMEM archs [PATCH 02/22] phy: Fix dependencies for !HAS_IOMEM archs [PATCH 03/22] scsi: Fix dependencies for !HAS_IOMEM and !HAS_DMA [PATCH 04/22] staging: iio: Fix dependencies for !HAS_IOMEM archs [PATCH 05/22] hw_random: Fix dependencies for !HAS_IOMEM archs [PATCH 06/22] iio: adc: Fix dependencies for !HAS_IOMEM archs [PATCH 07/22] fpga: Fix dependencies for !HAS_IOMEM archs [PATCH 08/22] hwtracing: Fix dependencies for !HAS_IOMEM archs [PATCH 09/22] leds: Fix dependencies for !HAS_IOMEM archs [PATCH 10/22] mailbox: Fix dependencies for !HAS_IOMEM archs [PATCH 11/22] mtd: Fix dependencies for !HAS_IOMEM archs [PATCH 12/22] nvmem: Fix dependencies for !HAS_IOMEM archs [PATCH 13/22] net: Fix dependencies for !HAS_IOMEM archs [PATCH 14/22] pwm: Fix dependencies for !HAS_IOMEM archs [PATCH 15/22] watchdog: Fix dependencies for !HAS_IOMEM archs [PATCH 16/22] iio: imu: Fix dependencies for !HAS_IOMEM archs [PATCH 17/22] media: Fix dependencies for !HAS_IOMEM archs [PATCH 18/22] irqchip: Fix dependencies for !HAS_IOMEM archs [PATCH 19/22] thermal: Fix dependencies for !HAS_IOMEM archs [PATCH 20/22] clocksource: Fix dependencies for !HAS_IOMEM archs [PATCH 21/22] mtd: cs553x: Fix dependencies for !HAS_IOMEM archs [PATCH 22/22] um: Export pm_power_off |
From: Anton I. <ant...@ko...> - 2016-01-12 21:39:55
|
On 12/01/16 21:25, James McMechan wrote: > I am a bit late getting back to you on this but I do have a few comments > The safe_read seems out of tune currently. > Or maybe I am just totally confused :) No, you are not confused, I pushed the send button too early. It is half-done, I was toying with the idea of doing it step by step instead of submitting a huge patch which includes all of the ring buffer and vector IO management. I will do it properly and submit a proper one with ring buffers, etc (and no need to safe_read whatsoever). I will also take whatever is applicable out of your feedback onboard. A. > >> This patch adds support for merging notifications on the ubd >> notification file descriptor. Multiple transactions are processed >> at a time resulting in 10-15% virtual disk speed improvement. >> >> The mechanics are rather primitive - no ring buffers, primitive >> guaranteed flush and guaranteed to-record-size read. >> >> Signed-off-by: Anton Ivanov <ai...@br...> >> --- >> arch/um/drivers/ubd.h | 2 + >> arch/um/drivers/ubd_kern.c | 156 ++++++++++++++++++++++++++++++++++++-------- >> arch/um/drivers/ubd_user.c | 19 +++++- >> arch/um/include/shared/os.h | 1 + >> arch/um/os-Linux/file.c | 12 ++++ >> 5 files changed, 161 insertions(+), 29 deletions(-) >> >> diff --git a/arch/um/drivers/ubd.h b/arch/um/drivers/ubd.h >> index 3b48cd2..2c5e6fd 100644 >> --- a/arch/um/drivers/ubd.h >> +++ b/arch/um/drivers/ubd.h >> @@ -10,6 +10,8 @@ >> extern int start_io_thread(unsigned long sp, int *fds_out); >> extern int io_thread(void *arg); >> extern int kernel_fd; >> +extern void setup_ubd_pollfd(void * fds, int fd); >> +extern int size_of_pollfd(void); >> >> #endif >> >> diff --git a/arch/um/drivers/ubd_kern.c b/arch/um/drivers/ubd_kern.c >> index 39ba207..9f30c50 100644 >> --- a/arch/um/drivers/ubd_kern.c >> +++ b/arch/um/drivers/ubd_kern.c >> @@ -58,6 +58,12 @@ struct io_thread_req { >> int error; >> }; >> >> +static void * kernel_pfd = NULL; > These are pointer to pointers? > so this will be an array of 64 pointers kmalloced? >> +struct io_thread_req **kernel_reqs; >> + >> +struct io_thread_req **helper_reqs; >> + >> static inline int ubd_test_bit(__u64 bit, unsigned char *data) >> { >> __u64 n; >> @@ -442,6 +448,32 @@ static void do_ubd_request(struct request_queue * q); >> static int thread_fd = -1; >> static LIST_HEAD(restart); >> > This would be clearer if it was struct io_thread_req **buffer > Ok this is reading MAX_SG pointers rather than the previous single pointer >> +static int do_safe_read(int fd, void * buffer, int max_size, int record_size){ >> + unsigned char * buf; >> + int n, size; >> + >> + size = 0; >> + buf = (unsigned char *) buffer; >> + >> + return os_read_file(fd, buf + size, max_size - size); > Your function ends here every thing else is dead code? > >> + >> + do { >> + n = os_read_file(fd, buf, max_size - size); > Do you want to return on only no data or a set of complete pointers? > e.g. size % sizeof(void *) == 0 maybe? then return size since we may have several already. > // if we have not read anything yet we can return safely >> + if ((size == 0) && (n == -EAGAIN)) >> + return n; > // update how much we have read so far >> + if (n> 0) >> + size = size + n; > A bit of shuffeling here might make it clearer and > // discard whatever we have read in so far if we were not /going to block/ but errored >> + if ((n < 0) && (n != -EAGAIN)) >> + return n; > max_size should be a multiple of record size so the loop would exit anyway? > It might be better to fold it into the while clause below. > // when we have read the amount requested stop >> + if (size == max_size) >> + break; > // stopping if we hit exactly record_size? so N full pointers have been read. >> + } while ((size % record_size) != 0); > // return how much we actually read >> + return size; >> +} >> + >> + >> /* XXX - move this inside ubd_intr. */ >> /* Called without dev->lock held, and only in interrupt context. */ >> static void ubd_handler(void) >> @@ -450,21 +482,37 @@ static void ubd_handler(void) >> struct ubd *ubd; >> struct list_head *list, *next_ele; >> unsigned long flags; >> - int n; >> + int n, rcount, i; >> >> while(1){ >> - n = os_read_file(thread_fd, &req, >> - sizeof(struct io_thread_req *)); >> - if(n != sizeof(req)){ >> - if(n == -EAGAIN) >> - break; >> - printk(KERN_ERR "spurious interrupt in ubd_handler, " >> - "err = %d\n", -n); >> - return; >> + n = do_safe_read(thread_fd, helper_reqs, >> + sizeof(struct io_thread_req *) * MAX_SG, >> + sizeof(struct io_thread_req *) >> + ); > > // no data pending so drop out of the loop >> + if(n == -EAGAIN){ >> + break; >> + } >> + if(n < 0){ >> + printk("io_thread - read failed, fd = %d, " >> + "err = %d\n", thread_fd, -n); >> + } > // if we have a partial pointer complain >> + if(n % sizeof(struct io_thread_req *) != 0){ >> + printk("kernel_ubd_io - invalid read, fd = %d, " >> + "read = %d\n", thread_fd, n); >> + continue; >> } >> >> - blk_end_request(req->req, 0, req->length); >> - kfree(req); >> + rcount = n / sizeof(struct io_thread_req *); > // step through each io_thread_req * in order >> + for (i = 0; i < rcount; i++) { > Perhaps *helper_reqs[i] might be clearer dereferencing pointers to pointers > is often hard to understand. >> + req = * (helper_reqs + i); >> + blk_end_request(req->req, 0, req->length); >> + kfree(req); >> + >> + } >> } >> reactivate_fd(thread_fd, UBD_IRQ); >> >> @@ -1080,6 +1128,26 @@ late_initcall(ubd_init); >> static int __init ubd_driver_init(void){ >> unsigned long stack; >> int err; >> + >> + kernel_reqs = kmalloc(MAX_SG * sizeof(struct io_thread_req *), GFP_KERNEL); >> + if (kernel_reqs == NULL) { >> + printk("Failed to allocate memory for req buffer\n"); >> + return 0; >> + } >> + >> + >> + kernel_pfd = kmalloc(size_of_pollfd(), GFP_KERNEL); >> + if (kernel_pfd == NULL) { >> + printk("Failed to allocate memory for pollfd\n"); >> + return 0; >> + } >> + >> + helper_reqs = kmalloc(MAX_SG * sizeof(struct io_thread_req *), GFP_KERNEL); >> + if (helper_reqs == NULL) { > Failed to allocate memory for array of pointers to req buffers >> + printk("Failed to allocate memory for req buffer\n"); >> + return 0; >> + } >> + >> >> /* Set by CONFIG_BLK_DEV_UBD_SYNC or ubd=sync.*/ >> if(global_openflags.s){ >> @@ -1458,30 +1526,62 @@ static int io_count = 0; >> int io_thread(void *arg) >> { >> struct io_thread_req *req; >> - int n; >> + unsigned char * buffer; >> + int n, rcount, i; >> >> os_fix_helper_signals(); >> >> + printk("Starting UBD helper thread\n"); >> + >> while(1){ >> - n = os_read_file(kernel_fd, &req, >> - sizeof(struct io_thread_req *)); >> - if(n != sizeof(struct io_thread_req *)){ >> - if(n < 0) > The old code was missing the test for EAGAIN > it was not too likely to fail a 4 byte read or 8 byte on 64bit > but still it should have had it just in case. >> - printk("io_thread - read failed, fd = %d, " >> - "err = %d\n", kernel_fd, -n); >> - else { >> - printk("io_thread - short read, fd = %d, " >> - "length = %d\n", kernel_fd, n); >> - } > Ok, but why do we want to sit in poll here rather than read? > we are nonblocking on purpose right? why build a blocking non-blocking read? >> + setup_ubd_pollfd(kernel_pfd, kernel_fd); >> + os_poll(kernel_pfd, 1, -1); >> + n = do_safe_read(kernel_fd, kernel_reqs, >> + sizeof(struct io_thread_req *) * MAX_SG, >> + sizeof(struct io_thread_req *) * MAX_SG >> + ); >> + if(n == -EAGAIN){ > it is annoying when diff spilts things so oddly > this closes the if n != sizeof in the old code? > I guess it was supposed to read the rest of the > req but if would read it at the beginning of the buffer? >> continue; >> } >> - io_count++; >> - do_io(req); >> - n = os_write_file(kernel_fd, &req, >> - sizeof(struct io_thread_req *)); >> - if(n != sizeof(struct io_thread_req *)) >> + if(n < 0){ >> + printk("io_thread - read failed, fd = %d, " >> + "err = %d\n", kernel_fd, -n); >> + } > Do you get a gain here? to try to read more than one pointer at a time > also you are testing for multiple of the size of the pointer? >> + if(n % sizeof(struct io_thread_req *) != 0){ >> + printk("io_thread - invalid read, fd = %d, " >> + "read = %d\n", kernel_fd, n); >> + continue; >> + } >> + >> + rcount = n / sizeof(struct io_thread_req *); >> + >> + for (i = 0; i < rcount; i++) { >> + >> + io_count++; >> + >> + req = * (kernel_reqs + i); >> + >> + do_io(req); >> + >> + } >> + >> + buffer = (unsigned char *) kernel_reqs; >> + >> + while (n> 0) { >> + i = os_write_file(kernel_fd, buffer, n); >> + if(i>= 0){ >> + buffer = buffer + i; >> + n = n - i; >> + } else { > // We would block try again later >> + if(i != -EAGAIN) >> + break; >> + } >> + } >> + >> + if(n> 0) >> printk("io_thread - write failed, fd = %d, err = %d\n", >> - kernel_fd, -n); >> + kernel_fd, -i); >> } >> >> return 0; >> diff --git a/arch/um/drivers/ubd_user.c b/arch/um/drivers/ubd_user.c >> index e376f9b..3abec4f 100644 >> --- a/arch/um/drivers/ubd_user.c >> +++ b/arch/um/drivers/ubd_user.c >> @@ -17,10 +17,22 @@ >> #include <sys/param.h> >> #include <endian.h> >> #include <byteswap.h> >> +#include <poll.h> >> >> #include "ubd.h" >> #include <os.h> >> >> +void setup_ubd_pollfd(void * fds, int fd) { >> + struct pollfd * pfds = (struct pollfd *) fds; >> + pfds->fd = fd; >> + pfds->events = POLLIN | POLLPRI; >> + pfds->revents = 0; >> +} >> + >> +int size_of_pollfd(void) { >> + return sizeof(struct pollfd); >> +} >> + >> int start_io_thread(unsigned long sp, int *fd_out) >> { >> int pid, fds[2], err; >> @@ -36,10 +48,15 @@ int start_io_thread(unsigned long sp, int *fd_out) >> >> err = os_set_fd_block(*fd_out, 0); >> if (err) { >> - printk("start_io_thread - failed to set nonblocking I/O.\n"); >> + printk("start_io_thread - failed to set nonblocking I/O - kernel_fd.\n"); >> goto out_close; >> } >> >> + err = os_set_fd_block(kernel_fd, 0); >> + if (err) { >> + printk("start_io_thread - failed to set nonblocking I/O - user_fd.\n"); >> + goto out_close; >> + } >> pid = clone(io_thread, (void *) sp, CLONE_FILES | CLONE_VM, NULL); >> if(pid < 0){ >> err = -errno; >> diff --git a/arch/um/include/shared/os.h b/arch/um/include/shared/os.h >> index 7a04ddd..0b75efa 100644 >> --- a/arch/um/include/shared/os.h >> +++ b/arch/um/include/shared/os.h >> @@ -149,6 +149,7 @@ extern int os_file_size(const char *file, unsigned long long *size_out); >> extern int os_pread_file(int fd, void *buf, int len, unsigned long long offset); >> extern int os_pwrite_file(int fd, const void *buf, int count, unsigned long long offset); >> extern int os_file_modtime(const char *file, unsigned long *modtime); >> +extern int os_poll(void *fds, unsigned int nfds, int timeout); >> extern int os_pipe(int *fd, int stream, int close_on_exec); >> extern int os_set_fd_async(int fd); >> extern int os_clear_fd_async(int fd); >> diff --git a/arch/um/os-Linux/file.c b/arch/um/os-Linux/file.c >> index 2db18cb..726b1e1 100644 >> --- a/arch/um/os-Linux/file.c >> +++ b/arch/um/os-Linux/file.c >> @@ -14,6 +14,7 @@ >> #include <sys/stat.h> >> #include <sys/un.h> >> #include <sys/types.h> >> +#include <poll.h> >> #include <os.h> >> >> static void copy_stat(struct uml_stat *dst, const struct stat64 *src) >> @@ -355,6 +356,17 @@ int os_file_modtime(const char *file, unsigned long *modtime) >> return 0; >> } >> >> +int os_poll(void *fds, unsigned int nfds, int timeout) >> +{ >> + int n; >> + >> + CATCH_EINTR(n = poll((struct pollfd *) fds, nfds, timeout)); >> + if (n < 0) >> + return -errno; >> + >> + return n; >> +} >> + >> int os_set_exec_close(int fd) >> { >> int err; > > ------------------------------------------------------------------------------ > Site24x7 APM Insight: Get Deep Visibility into Application Performance > APM + Mobile APM + RUM: Monitor 3 App instances at just $35/Month > Monitor end-to-end web transactions and take corrective actions now > Troubleshoot faster and improve end-user experience. Signup Now! > http://pubads.g.doubleclick.net/gampad/clk?id=267308311&iu=/4140 > _______________________________________________ > User-mode-linux-devel mailing list > Use...@li... > https://lists.sourceforge.net/lists/listinfo/user-mode-linux-devel > |
From: James M. <jam...@ho...> - 2016-01-12 21:25:24
|
I am a bit late getting back to you on this but I do have a few comments The safe_read seems out of tune currently. Or maybe I am just totally confused :) > This patch adds support for merging notifications on the ubd > notification file descriptor. Multiple transactions are processed > at a time resulting in 10-15% virtual disk speed improvement. > > The mechanics are rather primitive - no ring buffers, primitive > guaranteed flush and guaranteed to-record-size read. > > Signed-off-by: Anton Ivanov <ai...@br...> > --- > arch/um/drivers/ubd.h | 2 + > arch/um/drivers/ubd_kern.c | 156 ++++++++++++++++++++++++++++++++++++-------- > arch/um/drivers/ubd_user.c | 19 +++++- > arch/um/include/shared/os.h | 1 + > arch/um/os-Linux/file.c | 12 ++++ > 5 files changed, 161 insertions(+), 29 deletions(-) > > diff --git a/arch/um/drivers/ubd.h b/arch/um/drivers/ubd.h > index 3b48cd2..2c5e6fd 100644 > --- a/arch/um/drivers/ubd.h > +++ b/arch/um/drivers/ubd.h > @@ -10,6 +10,8 @@ > extern int start_io_thread(unsigned long sp, int *fds_out); > extern int io_thread(void *arg); > extern int kernel_fd; > +extern void setup_ubd_pollfd(void * fds, int fd); > +extern int size_of_pollfd(void); > > #endif > > diff --git a/arch/um/drivers/ubd_kern.c b/arch/um/drivers/ubd_kern.c > index 39ba207..9f30c50 100644 > --- a/arch/um/drivers/ubd_kern.c > +++ b/arch/um/drivers/ubd_kern.c > @@ -58,6 +58,12 @@ struct io_thread_req { > int error; > }; > > +static void * kernel_pfd = NULL; These are pointer to pointers? so this will be an array of 64 pointers kmalloced? > +struct io_thread_req **kernel_reqs; > + > +struct io_thread_req **helper_reqs; > + > static inline int ubd_test_bit(__u64 bit, unsigned char *data) > { > __u64 n; > @@ -442,6 +448,32 @@ static void do_ubd_request(struct request_queue * q); > static int thread_fd = -1; > static LIST_HEAD(restart); > This would be clearer if it was struct io_thread_req **buffer Ok this is reading MAX_SG pointers rather than the previous single pointer > +static int do_safe_read(int fd, void * buffer, int max_size, int record_size){ > + unsigned char * buf; > + int n, size; > + > + size = 0; > + buf = (unsigned char *) buffer; > + > + return os_read_file(fd, buf + size, max_size - size); Your function ends here every thing else is dead code? > + > + do { > + n = os_read_file(fd, buf, max_size - size); Do you want to return on only no data or a set of complete pointers? e.g. size % sizeof(void *) == 0 maybe? then return size since we may have several already. // if we have not read anything yet we can return safely > + if ((size == 0) && (n == -EAGAIN)) > + return n; // update how much we have read so far > + if (n> 0) > + size = size + n; A bit of shuffeling here might make it clearer and // discard whatever we have read in so far if we were not /going to block/ but errored > + if ((n < 0) && (n != -EAGAIN)) > + return n; max_size should be a multiple of record size so the loop would exit anyway? It might be better to fold it into the while clause below. // when we have read the amount requested stop > + if (size == max_size) > + break; // stopping if we hit exactly record_size? so N full pointers have been read. > + } while ((size % record_size) != 0); // return how much we actually read > + return size; > +} > + > + > /* XXX - move this inside ubd_intr. */ > /* Called without dev->lock held, and only in interrupt context. */ > static void ubd_handler(void) > @@ -450,21 +482,37 @@ static void ubd_handler(void) > struct ubd *ubd; > struct list_head *list, *next_ele; > unsigned long flags; > - int n; > + int n, rcount, i; > > while(1){ > - n = os_read_file(thread_fd, &req, > - sizeof(struct io_thread_req *)); > - if(n != sizeof(req)){ > - if(n == -EAGAIN) > - break; > - printk(KERN_ERR "spurious interrupt in ubd_handler, " > - "err = %d\n", -n); > - return; > + n = do_safe_read(thread_fd, helper_reqs, > + sizeof(struct io_thread_req *) * MAX_SG, > + sizeof(struct io_thread_req *) > + ); // no data pending so drop out of the loop > + if(n == -EAGAIN){ > + break; > + } > + if(n < 0){ > + printk("io_thread - read failed, fd = %d, " > + "err = %d\n", thread_fd, -n); > + } // if we have a partial pointer complain > + if(n % sizeof(struct io_thread_req *) != 0){ > + printk("kernel_ubd_io - invalid read, fd = %d, " > + "read = %d\n", thread_fd, n); > + continue; > } > > - blk_end_request(req->req, 0, req->length); > - kfree(req); > + rcount = n / sizeof(struct io_thread_req *); // step through each io_thread_req * in order > + for (i = 0; i < rcount; i++) { Perhaps *helper_reqs[i] might be clearer dereferencing pointers to pointers is often hard to understand. > + req = * (helper_reqs + i); > + blk_end_request(req->req, 0, req->length); > + kfree(req); > + > + } > } > reactivate_fd(thread_fd, UBD_IRQ); > > @@ -1080,6 +1128,26 @@ late_initcall(ubd_init); > static int __init ubd_driver_init(void){ > unsigned long stack; > int err; > + > + kernel_reqs = kmalloc(MAX_SG * sizeof(struct io_thread_req *), GFP_KERNEL); > + if (kernel_reqs == NULL) { > + printk("Failed to allocate memory for req buffer\n"); > + return 0; > + } > + > + > + kernel_pfd = kmalloc(size_of_pollfd(), GFP_KERNEL); > + if (kernel_pfd == NULL) { > + printk("Failed to allocate memory for pollfd\n"); > + return 0; > + } > + > + helper_reqs = kmalloc(MAX_SG * sizeof(struct io_thread_req *), GFP_KERNEL); > + if (helper_reqs == NULL) { Failed to allocate memory for array of pointers to req buffers > + printk("Failed to allocate memory for req buffer\n"); > + return 0; > + } > + > > /* Set by CONFIG_BLK_DEV_UBD_SYNC or ubd=sync.*/ > if(global_openflags.s){ > @@ -1458,30 +1526,62 @@ static int io_count = 0; > int io_thread(void *arg) > { > struct io_thread_req *req; > - int n; > + unsigned char * buffer; > + int n, rcount, i; > > os_fix_helper_signals(); > > + printk("Starting UBD helper thread\n"); > + > while(1){ > - n = os_read_file(kernel_fd, &req, > - sizeof(struct io_thread_req *)); > - if(n != sizeof(struct io_thread_req *)){ > - if(n < 0) The old code was missing the test for EAGAIN it was not too likely to fail a 4 byte read or 8 byte on 64bit but still it should have had it just in case. > - printk("io_thread - read failed, fd = %d, " > - "err = %d\n", kernel_fd, -n); > - else { > - printk("io_thread - short read, fd = %d, " > - "length = %d\n", kernel_fd, n); > - } Ok, but why do we want to sit in poll here rather than read? we are nonblocking on purpose right? why build a blocking non-blocking read? > + setup_ubd_pollfd(kernel_pfd, kernel_fd); > + os_poll(kernel_pfd, 1, -1); > + n = do_safe_read(kernel_fd, kernel_reqs, > + sizeof(struct io_thread_req *) * MAX_SG, > + sizeof(struct io_thread_req *) * MAX_SG > + ); > + if(n == -EAGAIN){ it is annoying when diff spilts things so oddly this closes the if n != sizeof in the old code? I guess it was supposed to read the rest of the req but if would read it at the beginning of the buffer? > continue; > } > - io_count++; > - do_io(req); > - n = os_write_file(kernel_fd, &req, > - sizeof(struct io_thread_req *)); > - if(n != sizeof(struct io_thread_req *)) > + if(n < 0){ > + printk("io_thread - read failed, fd = %d, " > + "err = %d\n", kernel_fd, -n); > + } Do you get a gain here? to try to read more than one pointer at a time also you are testing for multiple of the size of the pointer? > + if(n % sizeof(struct io_thread_req *) != 0){ > + printk("io_thread - invalid read, fd = %d, " > + "read = %d\n", kernel_fd, n); > + continue; > + } > + > + rcount = n / sizeof(struct io_thread_req *); > + > + for (i = 0; i < rcount; i++) { > + > + io_count++; > + > + req = * (kernel_reqs + i); > + > + do_io(req); > + > + } > + > + buffer = (unsigned char *) kernel_reqs; > + > + while (n> 0) { > + i = os_write_file(kernel_fd, buffer, n); > + if(i>= 0){ > + buffer = buffer + i; > + n = n - i; > + } else { // We would block try again later > + if(i != -EAGAIN) > + break; > + } > + } > + > + if(n> 0) > printk("io_thread - write failed, fd = %d, err = %d\n", > - kernel_fd, -n); > + kernel_fd, -i); > } > > return 0; > diff --git a/arch/um/drivers/ubd_user.c b/arch/um/drivers/ubd_user.c > index e376f9b..3abec4f 100644 > --- a/arch/um/drivers/ubd_user.c > +++ b/arch/um/drivers/ubd_user.c > @@ -17,10 +17,22 @@ > #include <sys/param.h> > #include <endian.h> > #include <byteswap.h> > +#include <poll.h> > > #include "ubd.h" > #include <os.h> > > +void setup_ubd_pollfd(void * fds, int fd) { > + struct pollfd * pfds = (struct pollfd *) fds; > + pfds->fd = fd; > + pfds->events = POLLIN | POLLPRI; > + pfds->revents = 0; > +} > + > +int size_of_pollfd(void) { > + return sizeof(struct pollfd); > +} > + > int start_io_thread(unsigned long sp, int *fd_out) > { > int pid, fds[2], err; > @@ -36,10 +48,15 @@ int start_io_thread(unsigned long sp, int *fd_out) > > err = os_set_fd_block(*fd_out, 0); > if (err) { > - printk("start_io_thread - failed to set nonblocking I/O.\n"); > + printk("start_io_thread - failed to set nonblocking I/O - kernel_fd.\n"); > goto out_close; > } > > + err = os_set_fd_block(kernel_fd, 0); > + if (err) { > + printk("start_io_thread - failed to set nonblocking I/O - user_fd.\n"); > + goto out_close; > + } > pid = clone(io_thread, (void *) sp, CLONE_FILES | CLONE_VM, NULL); > if(pid < 0){ > err = -errno; > diff --git a/arch/um/include/shared/os.h b/arch/um/include/shared/os.h > index 7a04ddd..0b75efa 100644 > --- a/arch/um/include/shared/os.h > +++ b/arch/um/include/shared/os.h > @@ -149,6 +149,7 @@ extern int os_file_size(const char *file, unsigned long long *size_out); > extern int os_pread_file(int fd, void *buf, int len, unsigned long long offset); > extern int os_pwrite_file(int fd, const void *buf, int count, unsigned long long offset); > extern int os_file_modtime(const char *file, unsigned long *modtime); > +extern int os_poll(void *fds, unsigned int nfds, int timeout); > extern int os_pipe(int *fd, int stream, int close_on_exec); > extern int os_set_fd_async(int fd); > extern int os_clear_fd_async(int fd); > diff --git a/arch/um/os-Linux/file.c b/arch/um/os-Linux/file.c > index 2db18cb..726b1e1 100644 > --- a/arch/um/os-Linux/file.c > +++ b/arch/um/os-Linux/file.c > @@ -14,6 +14,7 @@ > #include <sys/stat.h> > #include <sys/un.h> > #include <sys/types.h> > +#include <poll.h> > #include <os.h> > > static void copy_stat(struct uml_stat *dst, const struct stat64 *src) > @@ -355,6 +356,17 @@ int os_file_modtime(const char *file, unsigned long *modtime) > return 0; > } > > +int os_poll(void *fds, unsigned int nfds, int timeout) > +{ > + int n; > + > + CATCH_EINTR(n = poll((struct pollfd *) fds, nfds, timeout)); > + if (n < 0) > + return -errno; > + > + return n; > +} > + > int os_set_exec_close(int fd) > { > int err; |
From: Richard W. <ri...@no...> - 2016-01-12 20:42:26
|
Am 12.01.2016 um 21:36 schrieb Richard Weinberger: > Linus, > > the following changes since commit 74bf8efb5fa6e958d2d7c7917b8bb672085ec0c6: > > Linux 4.4-rc7 (2015-12-27 18:17:37 -0800) > > are available in the git repository at: > > git://git.kernel.org/pub/scm/linux/kernel/git/rw/uml.git for-linus-4.5-rc1 > > for you to fetch changes up to 3e46b25376321db119bc8507ce8c8841c580e736: > > um: Use race-free temporary file creation (2016-01-10 21:49:50 +0100) > Hit the send button too early, here the summary: This pull request contains beside of random fixes/cleanups two bigger changes: * seccomp support by Mickaël Salaün * IRQ rework by Anton Ivanov Thanks, //richard |
From: Richard W. <ri...@no...> - 2016-01-12 20:36:29
|
Linus, the following changes since commit 74bf8efb5fa6e958d2d7c7917b8bb672085ec0c6: Linux 4.4-rc7 (2015-12-27 18:17:37 -0800) are available in the git repository at: git://git.kernel.org/pub/scm/linux/kernel/git/rw/uml.git for-linus-4.5-rc1 for you to fetch changes up to 3e46b25376321db119bc8507ce8c8841c580e736: um: Use race-free temporary file creation (2016-01-10 21:49:50 +0100) ---------------------------------------------------------------- Anton Ivanov (3): um: Prevent IRQ handler reentrancy um: Do not change hard IRQ flags in soft IRQ processing um: Update UBD to use pread/pwrite family of functions Mickaël Salaün (7): um: Fix ptrace GETREGS/SETREGS bugs selftests/seccomp: Remove the need for HAVE_ARCH_TRACEHOOK um: Add full asm/syscall.h support um: Add seccomp support um: Fix build error and kconfig for i386 um: Do not set unsecure permission for temporary file um: Use race-free temporary file creation Vegard Nossum (3): uml: fix hostfs mknod() uml: flush stdout before forking um: link with -lpthread .../seccomp/seccomp-filter/arch-support.txt | 2 +- arch/um/Kconfig.common | 1 + arch/um/Kconfig.um | 16 +++ arch/um/drivers/ubd_kern.c | 27 +--- arch/um/include/asm/hardirq.h | 23 ++++ arch/um/include/asm/syscall-generic.h | 138 +++++++++++++++++++++ arch/um/include/asm/thread_info.h | 2 + arch/um/include/shared/os.h | 3 +- arch/um/kernel/skas/syscall.c | 31 +++-- arch/um/os-Linux/file.c | 19 +++ arch/um/os-Linux/mem.c | 17 ++- arch/um/os-Linux/signal.c | 16 ++- arch/um/os-Linux/skas/process.c | 7 -- arch/um/os-Linux/start_up.c | 2 + arch/x86/um/Makefile | 2 +- arch/x86/um/asm/syscall.h | 1 + arch/x86/um/ptrace_32.c | 8 +- fs/hostfs/hostfs_kern.c | 4 +- scripts/link-vmlinux.sh | 2 +- tools/testing/selftests/seccomp/seccomp_bpf.c | 27 +++- 20 files changed, 285 insertions(+), 63 deletions(-) create mode 100644 arch/um/include/asm/hardirq.h create mode 100644 arch/um/include/asm/syscall-generic.h |
From: Richard W. <ric...@gm...> - 2016-01-10 22:37:49
|
Hi! I've pushed everything I'd like to see in 4.5 merged. Please speak up now if I forgot something! https://git.kernel.org/cgit/linux/kernel/git/rw/uml.git/log/?h=linux-next -- Thanks, //richard |