linux/drivers
Vitaly Kuznetsov 0a1a86ac04 Drivers: hv: hv_balloon: survive ballooning request with num_pages=0
... and simplify alloc_balloon_pages() interface by removing redundant
alloc_error from it.

If we happen to enter balloon_up() with balloon_wrk.num_pages = 0 we will enter
infinite 'while (!done)' loop as alloc_balloon_pages() will be always returning
0 and not setting alloc_error. We will also be sending a meaningless message to
the host on every iteration.

The 'alloc_unit == 1 && alloc_error -> num_ballooned == 0' change and
alloc_error elimination requires a special comment. We do alloc_balloon_pages()
with 2 different alloc_unit values and there are 4 different
alloc_balloon_pages() results, let's check them all.

alloc_unit = 512:
1) num_ballooned = 0, alloc_error = 0: we do 'alloc_unit=1' and retry pre- and
  post-patch.
2) num_ballooned > 0, alloc_error = 0: we check 'num_ballooned == num_pages'
  and act accordingly,  pre- and post-patch.
3) num_ballooned > 0, alloc_error > 0: we report this chunk and remain within
  the loop, no changes here.
4) num_ballooned = 0, alloc_error > 0: we do 'alloc_unit=1' and retry pre- and
  post-patch.

alloc_unit = 1:
1) num_ballooned = 0, alloc_error = 0: this can happen in two cases: when we
  passed 'num_pages=0' to alloc_balloon_pages() or when there was no space in
  bl_resp to place a single response. The second option is not possible as
  bl_resp is of PAGE_SIZE size and single response 'union dm_mem_page_range' is
  8 bytes, but the first one is (in theory, I think that Hyper-V host never
  places such requests). Pre-patch code loops forever, post-patch code sends
  a reply with more_pages = 0 and finishes.
2) num_ballooned > 0, alloc_error = 0: we ran out of space in bl_resp, we
  report partial success and remain within the loop, no changes pre- and
  post-patch.
3) num_ballooned > 0, alloc_error > 0: pre-patch code finishes, post-patch code
  does one more try and if there is no progress (we finish with
  'num_ballooned = 0') we finish. So we try a bit harder with this patch.
4) num_ballooned = 0, alloc_error > 0: both pre- and post-patch code enter
 'more_pages = 0' branch and finish.

So this patch has two real effects:
1) We reply with an empty response to 'num_pages=0' request.
2) We try a bit harder on alloc_unit=1 allocations (and reply with an empty
   tail reply in case we fail).

An empty reply should be supported by host as we were able to send it even with
pre-patch code when we were not able to allocate a single page.

Suggested-by: Laszlo Ersek <lersek@redhat.com>
Signed-off-by: Vitaly Kuznetsov <vkuznets@redhat.com>
Signed-off-by: K. Y. Srinivasan <kys@microsoft.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2015-04-03 16:18:02 +02:00
..
accessibility
acpi Revert "x86/PCI: Refine the way to release PCI IRQ resources" 2015-03-20 14:56:19 +01:00
amba
android android: binder: fix binder mmap failures 2015-03-01 18:43:51 -08:00
ata sata-fsl: Apply link speed limits 2015-03-02 12:08:43 -05:00
atm
auxdisplay
base regmap: Fixes for v4.0 2015-03-17 10:41:26 -07:00
bcma
block Merge branch 'for-linus' of git://git.kernel.dk/linux-block 2015-02-28 10:21:57 -08:00
bluetooth Bluetooth: btusb: Fix issue with CSR based Intel Wireless controllers 2015-02-23 09:30:35 +02:00
bus
cdrom
char char: xillybus: Don't return -EFAULT on user-triggered flush 2015-04-03 16:15:30 +02:00
clk The clk fixes for 4.0-rc4 comprise three themes. First are the usual 2015-03-15 15:07:08 -07:00
clocksource clockevents: sun5i: Fix setup_irq init sequence 2015-03-05 15:01:37 +01:00
connector
cpufreq Merge branch 'fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/evalenti/linux-soc-thermal 2015-03-06 13:43:33 -08:00
cpuidle cpuidle: mvebu: Update cpuidle thresholds for Armada XP SOCs 2015-03-13 18:31:29 +01:00
crypto
dca
devfreq
dio
dma dmaengine: pl08x: Define capabilities for generic capabilities reporting 2015-03-18 21:34:29 +05:30
dma-buf
edac
eisa
extcon extcon: Fix missing locking when [un]registering notifiers 2015-03-23 11:06:04 +09:00
firewire
firmware * Fix regression in DMI sysfs code for handling "End of Table" entry 2015-03-02 14:18:57 +01:00
fmc
gpio gpio: tps65912: fix wrong container_of arguments 2015-02-23 15:40:32 +01:00
gpu Merge tag 'drm-intel-fixes-2015-03-19' of git://anongit.freedesktop.org/drm-intel into drm-fixes 2015-03-20 17:32:21 +10:00
hid HID: wacom: check for wacom->shared before following the pointer 2015-03-17 20:59:55 +01:00
hsi
hv Drivers: hv: hv_balloon: survive ballooning request with num_pages=0 2015-04-03 16:18:02 +02:00
hwmon hwmon: (ads7828) Check return value of devm_regmap_init_i2c 2015-02-22 20:10:30 -08:00
hwspinlock
hwtracing/coresight coresight: moving to new "hwtracing" directory 2015-04-03 16:17:04 +02:00
i2c Revert "i2c: core: Dispose OF IRQ mapping at client removal time" 2015-03-12 10:23:05 +01:00
ide ide_tape: convert jiffies with jiffies_to_msecs 2015-03-18 23:25:57 -04:00
idle
iio Second round of IIO fixes for the 4.0 cycle (or round one part two really!) 2015-02-28 07:19:27 -08:00
infiniband IB/mlx4: Saturate RoCE port PMA counters in case of overflow 2015-03-18 15:17:11 -04:00
input Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input 2015-03-19 16:43:10 -07:00
iommu iommu/io-pgtable-arm: Add built time dependency 2015-03-03 14:04:12 +01:00
ipack
irqchip Merge branch 'irqchip/urgent-gic' into irqchip/urgent 2015-03-15 01:41:26 +00:00
isdn isdn: icn: use strlcpy() when parsing setup options 2015-03-15 22:24:37 -04:00
leds
lguest
macintosh
mailbox
mcb mcb: request_mem_region() returns NULL on error 2015-04-03 16:15:30 +02:00
md One fix for md in 4.0-rc4 2015-03-22 16:38:19 -07:00
media
memory memory: jz4780-nemc: driver for the NEMC on JZ4780 SoCs 2015-03-26 23:51:36 +01:00
memstick
message
mfd
misc mic: drop pci_msi_off call on probe 2015-04-03 16:15:30 +02:00
mmc mmc: pwrseq_simple: fix error path in mmc_pwrseq_simple_alloc 2015-03-19 11:26:35 +01:00
mtd This pull request fixes a bug introduced during the v4.0 merge window where we 2015-03-21 10:36:44 -07:00
net Revert "net: cx82310_eth: use common match macro" 2015-03-18 22:37:38 -04:00
nfc
ntb
nubus
of Revert "of: Fix premature bootconsole disable with 'stdout-path'" 2015-03-19 08:46:54 -05:00
oprofile
parisc
parport
pci PCI updates for v4.0: 2015-03-12 09:45:46 -07:00
pcmcia Merge 4.0-rc5 into char-misc-next 2015-03-25 10:51:53 +01:00
phy phy: omap-usb2: Fix missing clk_prepare call when using old dt name 2015-03-13 17:14:39 +05:30
pinctrl pinctrl: sun4i: GPIOs configured as irq must be set to input before reading 2015-03-18 10:56:46 +01:00
platform Merge branch 'x86-platform-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip 2015-02-21 11:12:07 -08:00
pnp Merge branches 'pnp', 'pm-cpuidle' and 'pm-cpufreq' 2015-02-21 04:29:16 +01:00
power
powercap powercap / RAPL: handle domains with different energy units 2015-03-13 23:18:44 +01:00
pps
ps3
ptp
pwm
rapidio
ras
regulator Merge remote-tracking branches 'regulator/fix/gpio-enable' and 'regulator/fix/tps65910' into regulator-linus 2015-03-16 11:43:24 +00:00
remoteproc
reset
rpmsg virtio_rpmsg: set DRIVER_OK before using device 2015-03-13 15:55:42 +10:30
rtc rtc: at91rm9200: double locking bug in at91_rtc_interrupt() 2015-03-18 01:58:16 +01:00
s390 s390/dcss: array index 'i' is used before limits check. 2015-02-26 09:24:48 +01:00
sbus
scsi Merge git://git.kernel.org/pub/scm/linux/kernel/git/nab/target-pending 2015-03-21 11:24:38 -07:00
sfi
sh drivers: sh: Disable PM runtime for multi-platform r8a7740 with genpd 2015-02-24 07:26:12 +09:00
sn
soc
spi Merge remote-tracking branches 'spi/fix/atmel', 'spi/fix/doc', 'spi/fix/dw', 'spi/fix/img-spfi', 'spi/fix/pl022' and 'spi/fix/ti-qspi' into spi-linus 2015-03-06 21:10:56 +00:00
spmi spmi: pmic_arb: remove ARM build time dependency 2015-04-03 16:15:30 +02:00
ssb
staging vt6655: Fix late setting of byRFType. 2015-03-09 11:33:13 +01:00
target target: do not reject FUA CDBs when write cache is enabled but emulate_write_cache is 0 2015-03-19 23:26:46 -07:00
tc
thermal thermal: Make sysfs attributes of cooling devices default attributes 2015-03-05 01:47:57 -04:00
thunderbolt
tty serial: 8250_dw: Fix deadlock in LCR workaround 2015-03-11 16:39:52 +01:00
uio Revert "uio: constify of_device_id array" 2015-04-03 16:04:21 +02:00
usb USB / PHY driver fixes for 4.0-rc5 2015-03-22 11:33:55 -07:00
uwb
vfio vfio-pci: Add missing break to enable VFIO_PCI_ERR_IRQ_INDEX 2015-03-12 09:51:38 -06:00
vhost Merge git://git.kernel.org/pub/scm/linux/kernel/git/nab/target-pending 2015-03-21 11:24:38 -07:00
video OMAPDSS: fix regression with display sysfs files 2015-02-26 10:23:15 +02:00
virt
virtio virtio_mmio: fix access width for mmio 2015-03-17 12:12:21 +10:30
vlynq
vme
w1 w1: constify of_device_id array 2015-03-25 12:25:29 +01:00
watchdog watchdog: at91sam9: request the irq with IRQF_NO_SUSPEND 2015-03-06 00:46:31 +01:00
xen Merge git://git.kernel.org/pub/scm/linux/kernel/git/nab/target-pending 2015-03-21 11:24:38 -07:00
zorro
Kconfig
Makefile coresight: moving to new "hwtracing" directory 2015-04-03 16:17:04 +02:00