power: extend guest channel for frequency query
Extend incoming packet reading API with new packet type which carries CPU frequencies. Signed-off-by: Marcin Hajkowski <marcinx.hajkowski@intel.com> Tested-by: David Hunt <david.hunt@intel.com> Acked-by: Lee Daly <lee.daly@intel.com>
This commit is contained in:
parent
e4d028a0fb
commit
04a8cb8ee9
@ -151,7 +151,7 @@ check_response_cmd(unsigned int lcore_id, int *result)
|
|||||||
struct channel_packet pkt;
|
struct channel_packet pkt;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
ret = rte_power_guest_channel_receive_msg(&pkt, lcore_id);
|
ret = rte_power_guest_channel_receive_msg(&pkt, sizeof pkt, lcore_id);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
|
@ -12,6 +12,8 @@ extern "C" {
|
|||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
|
|
||||||
|
/* --- Incoming messages --- */
|
||||||
|
|
||||||
/* Valid Commands */
|
/* Valid Commands */
|
||||||
#define CPU_POWER 1
|
#define CPU_POWER 1
|
||||||
#define CPU_POWER_CONNECT 2
|
#define CPU_POWER_CONNECT 2
|
||||||
@ -26,10 +28,19 @@ extern "C" {
|
|||||||
#define CPU_POWER_ENABLE_TURBO 5
|
#define CPU_POWER_ENABLE_TURBO 5
|
||||||
#define CPU_POWER_DISABLE_TURBO 6
|
#define CPU_POWER_DISABLE_TURBO 6
|
||||||
|
|
||||||
|
/* CPU Power Queries */
|
||||||
|
#define CPU_POWER_QUERY_FREQ_LIST 7
|
||||||
|
#define CPU_POWER_QUERY_FREQ 8
|
||||||
|
|
||||||
|
/* --- Outgoing messages --- */
|
||||||
|
|
||||||
/* Generic Power Command Response */
|
/* Generic Power Command Response */
|
||||||
#define CPU_POWER_CMD_ACK 1
|
#define CPU_POWER_CMD_ACK 1
|
||||||
#define CPU_POWER_CMD_NACK 2
|
#define CPU_POWER_CMD_NACK 2
|
||||||
|
|
||||||
|
/* CPU Power Query Responses */
|
||||||
|
#define CPU_POWER_FREQ_LIST 3
|
||||||
|
|
||||||
#define HOURS 24
|
#define HOURS 24
|
||||||
|
|
||||||
#define MAX_VFS 10
|
#define MAX_VFS 10
|
||||||
@ -82,6 +93,16 @@ struct channel_packet {
|
|||||||
struct t_boost_status t_boost_status;
|
struct t_boost_status t_boost_status;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct channel_packet_freq_list {
|
||||||
|
uint64_t resource_id; /**< core_num, device */
|
||||||
|
uint32_t unit; /**< scale down/up/min/max */
|
||||||
|
uint32_t command; /**< Power, IO, etc */
|
||||||
|
char vm_name[VM_MAX_NAME_SZ];
|
||||||
|
|
||||||
|
uint32_t freq_list[MAX_VCPU_PER_VM];
|
||||||
|
uint8_t num_vcpu;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
@ -129,13 +129,15 @@ int rte_power_guest_channel_send_msg(struct channel_packet *pkt,
|
|||||||
return guest_channel_send_msg(pkt, lcore_id);
|
return guest_channel_send_msg(pkt, lcore_id);
|
||||||
}
|
}
|
||||||
|
|
||||||
int power_guest_channel_read_msg(struct channel_packet *pkt,
|
int power_guest_channel_read_msg(void *pkt,
|
||||||
unsigned int lcore_id)
|
size_t pkt_len,
|
||||||
|
unsigned int lcore_id)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
struct pollfd fds;
|
struct pollfd fds;
|
||||||
void *buffer = pkt;
|
|
||||||
int buffer_len = sizeof(*pkt);
|
if (pkt_len == 0 || pkt == NULL)
|
||||||
|
return -1;
|
||||||
|
|
||||||
fds.fd = global_fds[lcore_id];
|
fds.fd = global_fds[lcore_id];
|
||||||
fds.events = POLLIN;
|
fds.events = POLLIN;
|
||||||
@ -161,29 +163,32 @@ int power_guest_channel_read_msg(struct channel_packet *pkt,
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
while (buffer_len > 0) {
|
while (pkt_len > 0) {
|
||||||
ret = read(global_fds[lcore_id],
|
ret = read(global_fds[lcore_id],
|
||||||
buffer, buffer_len);
|
pkt, pkt_len);
|
||||||
|
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
if (errno == EINTR)
|
if (errno == EINTR)
|
||||||
continue;
|
continue;
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ret == 0) {
|
if (ret == 0) {
|
||||||
RTE_LOG(ERR, GUEST_CHANNEL, "Expected more data, but connection has been closed.\n");
|
RTE_LOG(ERR, GUEST_CHANNEL, "Expected more data, but connection has been closed.\n");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
buffer = (char *)buffer + ret;
|
pkt = (char *)pkt + ret;
|
||||||
buffer_len -= ret;
|
pkt_len -= ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int rte_power_guest_channel_receive_msg(struct channel_packet *pkt,
|
int rte_power_guest_channel_receive_msg(void *pkt,
|
||||||
unsigned int lcore_id)
|
size_t pkt_len,
|
||||||
|
unsigned int lcore_id)
|
||||||
{
|
{
|
||||||
return power_guest_channel_read_msg(pkt, lcore_id);
|
return power_guest_channel_read_msg(pkt, pkt_len, lcore_id);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -17,6 +17,7 @@ extern "C" {
|
|||||||
*
|
*
|
||||||
* @param path
|
* @param path
|
||||||
* The path to the serial device on the filesystem
|
* The path to the serial device on the filesystem
|
||||||
|
*
|
||||||
* @param lcore_id
|
* @param lcore_id
|
||||||
* lcore_id.
|
* lcore_id.
|
||||||
*
|
*
|
||||||
@ -73,7 +74,11 @@ int rte_power_guest_channel_send_msg(struct channel_packet *pkt,
|
|||||||
* from the host endpoint.
|
* from the host endpoint.
|
||||||
*
|
*
|
||||||
* @param pkt
|
* @param pkt
|
||||||
* Pointer to a populated struct channel_packet
|
* Pointer to channel_packet or
|
||||||
|
* channel_packet_freq_list struct.
|
||||||
|
*
|
||||||
|
* @param pkt_len
|
||||||
|
* Size of expected data packet.
|
||||||
*
|
*
|
||||||
* @param lcore_id
|
* @param lcore_id
|
||||||
* lcore_id.
|
* lcore_id.
|
||||||
@ -82,7 +87,8 @@ int rte_power_guest_channel_send_msg(struct channel_packet *pkt,
|
|||||||
* - 0 on success.
|
* - 0 on success.
|
||||||
* - Negative on error.
|
* - Negative on error.
|
||||||
*/
|
*/
|
||||||
int power_guest_channel_read_msg(struct channel_packet *pkt,
|
int power_guest_channel_read_msg(void *pkt,
|
||||||
|
size_t pkt_len,
|
||||||
unsigned int lcore_id);
|
unsigned int lcore_id);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -90,7 +96,11 @@ int power_guest_channel_read_msg(struct channel_packet *pkt,
|
|||||||
* from the host endpoint.
|
* from the host endpoint.
|
||||||
*
|
*
|
||||||
* @param pkt
|
* @param pkt
|
||||||
* Pointer to a populated struct channel_packet
|
* Pointer to channel_packet or
|
||||||
|
* channel_packet_freq_list struct.
|
||||||
|
*
|
||||||
|
* @param pkt_len
|
||||||
|
* Size of expected data packet.
|
||||||
*
|
*
|
||||||
* @param lcore_id
|
* @param lcore_id
|
||||||
* lcore_id.
|
* lcore_id.
|
||||||
@ -101,8 +111,10 @@ int power_guest_channel_read_msg(struct channel_packet *pkt,
|
|||||||
*/
|
*/
|
||||||
__rte_experimental
|
__rte_experimental
|
||||||
int
|
int
|
||||||
rte_power_guest_channel_receive_msg(struct channel_packet *pkt,
|
rte_power_guest_channel_receive_msg(void *pkt,
|
||||||
unsigned int lcore_id);
|
size_t pkt_len,
|
||||||
|
unsigned int lcore_id);
|
||||||
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user