Skip to content

Commit

Permalink
vmw_balloon: simplify vmballoon_send_get_target()
Browse files Browse the repository at this point in the history
As we want to leave as little as possible on the global balloon
structure, to avoid possible future races, we want to get rid sysinfo.
We can actually get the total_ram directly, and simplify the logic of
vmballoon_send_get_target() a little.

While we are doing that, let's return int and avoid mistakes due to
bool/int conversions.

Reviewed-by: Xavier Deguillard <xdeguillard@vmware.com>
Signed-off-by: Nadav Amit <namit@vmware.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
  • Loading branch information
Nadav Amit authored and Greg Kroah-Hartman committed Sep 25, 2018
1 parent 8b079cd commit 0395be3
Showing 1 changed file with 14 additions and 21 deletions.
35 changes: 14 additions & 21 deletions drivers/misc/vmw_balloon.c
Original file line number Diff line number Diff line change
Expand Up @@ -223,8 +223,6 @@ struct vmballoon {
struct dentry *dbg_entry;
#endif

struct sysinfo sysinfo;

struct delayed_work dwork;

struct vmci_handle vmci_doorbell;
Expand Down Expand Up @@ -353,34 +351,29 @@ static u16 vmballoon_page_size(bool is_2m_page)
return 1;
}

/*
* Retrieve desired balloon size from the host.
/**
* vmballoon_send_get_target() - Retrieve desired balloon size from the host.
*
* @b: pointer to the balloon.
*
* Return: zero on success, EINVAL if limit does not fit in 32-bit, as required
* by the host-guest protocol and EIO if an error occurred in communicating with
* the host.
*/
static bool vmballoon_send_get_target(struct vmballoon *b)
static int vmballoon_send_get_target(struct vmballoon *b)
{
unsigned long status;
unsigned long limit;
u32 limit32;

/*
* si_meminfo() is cheap. Moreover, we want to provide dynamic
* max balloon size later. So let us call si_meminfo() every
* iteration.
*/
si_meminfo(&b->sysinfo);
limit = b->sysinfo.totalram;
limit = totalram_pages;

/* Ensure limit fits in 32-bits */
limit32 = (u32)limit;
if (limit != limit32)
return false;
if (limit != (u32)limit)
return -EINVAL;

status = vmballoon_cmd(b, VMW_BALLOON_CMD_GET_TARGET, limit, 0);

if (status == VMW_BALLOON_SUCCESS)
return true;

return false;
return status == VMW_BALLOON_SUCCESS ? 0 : -EIO;
}

static struct page *vmballoon_alloc_page(bool is_2m_page)
Expand Down Expand Up @@ -962,7 +955,7 @@ static void vmballoon_work(struct work_struct *work)
if (b->reset_required)
vmballoon_reset(b);

if (vmballoon_send_get_target(b))
if (!vmballoon_send_get_target(b))
change = vmballoon_change(b);

if (change != 0) {
Expand Down

0 comments on commit 0395be3

Please sign in to comment.