vmw_balloon: simplify vmballoon_send_get_target()
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>
This commit is contained in:
parent
8b079cd00f
commit
0395be3ece
|
@ -223,8 +223,6 @@ struct vmballoon {
|
||||||
struct dentry *dbg_entry;
|
struct dentry *dbg_entry;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
struct sysinfo sysinfo;
|
|
||||||
|
|
||||||
struct delayed_work dwork;
|
struct delayed_work dwork;
|
||||||
|
|
||||||
struct vmci_handle vmci_doorbell;
|
struct vmci_handle vmci_doorbell;
|
||||||
|
@ -353,34 +351,29 @@ static u16 vmballoon_page_size(bool is_2m_page)
|
||||||
return 1;
|
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 status;
|
||||||
unsigned long limit;
|
unsigned long limit;
|
||||||
u32 limit32;
|
|
||||||
|
|
||||||
/*
|
limit = totalram_pages;
|
||||||
* 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;
|
|
||||||
|
|
||||||
/* Ensure limit fits in 32-bits */
|
/* Ensure limit fits in 32-bits */
|
||||||
limit32 = (u32)limit;
|
if (limit != (u32)limit)
|
||||||
if (limit != limit32)
|
return -EINVAL;
|
||||||
return false;
|
|
||||||
|
|
||||||
status = vmballoon_cmd(b, VMW_BALLOON_CMD_GET_TARGET, limit, 0);
|
status = vmballoon_cmd(b, VMW_BALLOON_CMD_GET_TARGET, limit, 0);
|
||||||
|
|
||||||
if (status == VMW_BALLOON_SUCCESS)
|
return status == VMW_BALLOON_SUCCESS ? 0 : -EIO;
|
||||||
return true;
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct page *vmballoon_alloc_page(bool is_2m_page)
|
static struct page *vmballoon_alloc_page(bool is_2m_page)
|
||||||
|
@ -962,7 +955,7 @@ static void vmballoon_work(struct work_struct *work)
|
||||||
if (b->reset_required)
|
if (b->reset_required)
|
||||||
vmballoon_reset(b);
|
vmballoon_reset(b);
|
||||||
|
|
||||||
if (vmballoon_send_get_target(b))
|
if (!vmballoon_send_get_target(b))
|
||||||
change = vmballoon_change(b);
|
change = vmballoon_change(b);
|
||||||
|
|
||||||
if (change != 0) {
|
if (change != 0) {
|
||||||
|
|
Loading…
Reference in New Issue