Skip to content
Open
Show file tree
Hide file tree
Changes from 4 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions orchagent/port.h
Original file line number Diff line number Diff line change
Expand Up @@ -144,6 +144,7 @@ class Port
std::set<std::string> m_members;
std::set<std::string> m_child_ports;
std::vector<sai_object_id_t> m_queue_ids;
std::vector<sai_object_id_t> m_scheduler_group_ids;
std::vector<sai_object_id_t> m_priority_group_ids;
sai_port_priority_flow_control_mode_t m_pfc_asym = SAI_PORT_PRIORITY_FLOW_CONTROL_MODE_COMBINED;
uint8_t m_pfc_bitmask = 0; // PFC enable bit mask
Expand Down
7 changes: 3 additions & 4 deletions orchagent/portsorch.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -4589,7 +4589,6 @@ void PortsOrch::initializeQueues(Port &port)

void PortsOrch::initializeSchedulerGroups(Port &port)
{
std::vector<sai_object_id_t> scheduler_group_ids;
SWSS_LOG_ENTER();

sai_attribute_t attr;
Expand All @@ -4606,16 +4605,16 @@ void PortsOrch::initializeSchedulerGroups(Port &port)
}
SWSS_LOG_INFO("Got %d number of scheduler groups for port %s", attr.value.u32, port.m_alias.c_str());

scheduler_group_ids.resize(attr.value.u32);
port.m_scheduler_group_ids.resize(attr.value.u32);

if (attr.value.u32 == 0)
{
return;
}

attr.id = SAI_PORT_ATTR_QOS_SCHEDULER_GROUP_LIST;
attr.value.objlist.count = (uint32_t)scheduler_group_ids.size();
attr.value.objlist.list = scheduler_group_ids.data();
attr.value.objlist.count = (uint32_t)port.m_scheduler_group_ids.size();
attr.value.objlist.list = port.m_scheduler_group_ids.data();

status = sai_port_api->get_port_attribute(port.m_port_id, 1, &attr);
if (status != SAI_STATUS_SUCCESS)
Expand Down
36 changes: 3 additions & 33 deletions orchagent/qosorch.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1459,44 +1459,14 @@ sai_object_id_t QosOrch::getSchedulerGroup(const Port &port, const sai_object_id
const auto it = m_scheduler_group_port_info.find(port.m_port_id);
if (it == m_scheduler_group_port_info.end())
{
/* Get max sched groups count */
attr.id = SAI_PORT_ATTR_QOS_NUMBER_OF_SCHEDULER_GROUPS;
sai_status = sai_port_api->get_port_attribute(port.m_port_id, 1, &attr);
if (SAI_STATUS_SUCCESS != sai_status)
{
SWSS_LOG_ERROR("Failed to get number of scheduler groups for port:%s", port.m_alias.c_str());
task_process_status handle_status = handleSaiGetStatus(SAI_API_PORT, sai_status);
if (handle_status != task_process_status::task_success)
{
return SAI_NULL_OBJECT_ID;
}
}

/* Get total groups list on the port */
uint32_t groups_count = attr.value.u32;
std::vector<sai_object_id_t> groups(groups_count);

attr.id = SAI_PORT_ATTR_QOS_SCHEDULER_GROUP_LIST;
attr.value.objlist.list = groups.data();
attr.value.objlist.count = groups_count;
sai_status = sai_port_api->get_port_attribute(port.m_port_id, 1, &attr);
if (SAI_STATUS_SUCCESS != sai_status)
{
SWSS_LOG_ERROR("Failed to get scheduler group list for port:%s", port.m_alias.c_str());
task_process_status handle_status = handleSaiGetStatus(SAI_API_PORT, sai_status);
if (handle_status != task_process_status::task_success)
{
return SAI_NULL_OBJECT_ID;
}
}

size_t groups_count = port.m_scheduler_group_ids.size();
m_scheduler_group_port_info[port.m_port_id] = {
.groups = std::move(groups),
.groups = std::move(port.m_scheduler_group_ids),
.child_groups = std::vector<std::vector<sai_object_id_t>>(groups_count),
.group_has_been_initialized = std::vector<bool>(groups_count)
};

SWSS_LOG_INFO("Port %s has been initialized with %u group(s)", port.m_alias.c_str(), groups_count);
SWSS_LOG_INFO("Port %s has been initialized with %zu group(s)", port.m_alias.c_str(), groups_count);
}

/* Lookup groups to which queue belongs */
Expand Down