Skip to content

Commit efcd3ab

Browse files
authored
Fix for rdc fieldgroups not adding after creation (#3318)
Signed-off-by: yalmusaf_amdeng <[email protected]>
1 parent d03c51c commit efcd3ab

File tree

15 files changed

+194
-3
lines changed

15 files changed

+194
-3
lines changed

projects/rdc/include/rdc/rdc.h

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1244,6 +1244,23 @@ rdc_status_t rdc_group_field_create(rdc_handle_t p_rdc_handle, uint32_t num_fiel
12441244
rdc_field_t* field_ids, const char* field_group_name,
12451245
rdc_field_grp_t* rdc_field_group_id);
12461246

1247+
/**
1248+
* @brief Add a field to an existing field group
1249+
*
1250+
* @details Add a single field ID to an existing field group created by
1251+
* rdc_group_field_create
1252+
*
1253+
* @param[in] p_rdc_handle The RDC handler.
1254+
*
1255+
* @param[in] rdc_field_group_id The field group ID to add the field to
1256+
*
1257+
* @param[in] field_id The field ID to be added to the field group
1258+
*
1259+
* @retval ::RDC_ST_OK is returned upon successful call.
1260+
*/
1261+
rdc_status_t rdc_group_field_add_field(rdc_handle_t p_rdc_handle, rdc_field_grp_t rdc_field_group_id,
1262+
rdc_field_t field_id);
1263+
12471264
/**
12481265
* @brief Get information about a field group
12491266
*

projects/rdc/include/rdc_lib/RdcGroupSettings.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,8 @@ class RdcGroupSettings {
4343
virtual rdc_status_t rdc_group_field_create(uint32_t num_field_ids, rdc_field_t* field_ids,
4444
const char* field_group_name,
4545
rdc_field_grp_t* rdc_field_group_id) = 0;
46+
virtual rdc_status_t rdc_group_field_add_field(rdc_field_grp_t rdc_field_group_id,
47+
rdc_field_t field_id) = 0;
4648
virtual rdc_status_t rdc_group_field_destroy(rdc_field_grp_t rdc_field_group_id) = 0;
4749
virtual rdc_status_t rdc_group_field_get_info(rdc_field_grp_t rdc_field_group_id,
4850
rdc_field_group_info_t* field_group_info) = 0;

projects/rdc/include/rdc_lib/RdcHandler.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,8 @@ class RdcHandler {
5555
virtual rdc_status_t rdc_group_field_create(uint32_t num_field_ids, rdc_field_t* field_ids,
5656
const char* field_group_name,
5757
rdc_field_grp_t* rdc_field_group_id) = 0;
58+
virtual rdc_status_t rdc_group_field_add_field(rdc_field_grp_t rdc_field_group_id,
59+
rdc_field_t field_id) = 0;
5860
virtual rdc_status_t rdc_group_field_get_info(rdc_field_grp_t rdc_field_group_id,
5961
rdc_field_group_info_t* field_group_info) = 0;
6062
virtual rdc_status_t rdc_group_gpu_get_info(rdc_gpu_group_t p_rdc_group_id,

projects/rdc/include/rdc_lib/impl/RdcEmbeddedHandler.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,8 @@ class RdcEmbeddedHandler final : public RdcHandler {
6565
rdc_status_t rdc_group_field_create(uint32_t num_field_ids, rdc_field_t* field_ids,
6666
const char* field_group_name,
6767
rdc_field_grp_t* rdc_field_group_id) override;
68+
rdc_status_t rdc_group_field_add_field(rdc_field_grp_t rdc_field_group_id,
69+
rdc_field_t field_id) override;
6870
rdc_status_t rdc_group_field_get_info(rdc_field_grp_t rdc_field_group_id,
6971
rdc_field_group_info_t* field_group_info) override;
7072
rdc_status_t rdc_group_gpu_get_info(rdc_gpu_group_t p_rdc_group_id,

projects/rdc/include/rdc_lib/impl/RdcGroupSettingsImpl.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,8 @@ class RdcGroupSettingsImpl : public RdcGroupSettings {
4646
rdc_status_t rdc_group_field_create(uint32_t num_field_ids, rdc_field_t* field_ids,
4747
const char* field_group_name,
4848
rdc_field_grp_t* rdc_field_group_id) override;
49+
rdc_status_t rdc_group_field_add_field(rdc_field_grp_t rdc_field_group_id,
50+
rdc_field_t field_id) override;
4951
rdc_status_t rdc_group_field_destroy(rdc_field_grp_t rdc_field_group_id) override;
5052
rdc_status_t rdc_group_field_get_info(rdc_field_grp_t rdc_field_group_id,
5153
rdc_field_group_info_t* field_group_info) override;

projects/rdc/include/rdc_lib/impl/RdcStandaloneHandler.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,8 @@ class RdcStandaloneHandler : public RdcHandler {
5959
rdc_status_t rdc_group_field_create(uint32_t num_field_ids, rdc_field_t* field_ids,
6060
const char* field_group_name,
6161
rdc_field_grp_t* rdc_field_group_id) override;
62+
rdc_status_t rdc_group_field_add_field(rdc_field_grp_t rdc_field_group_id,
63+
rdc_field_t field_id) override;
6264
rdc_status_t rdc_group_field_get_info(rdc_field_grp_t rdc_field_group_id,
6365
rdc_field_group_info_t* field_group_info) override;
6466
rdc_status_t rdc_group_gpu_get_info(rdc_gpu_group_t p_rdc_group_id,

projects/rdc/protos/rdc.proto

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,11 @@ service RdcAPI {
7373
// rdc_field_grp_t* rdc_field_group_id)
7474
rpc CreateFieldGroup(CreateFieldGroupRequest) returns (CreateFieldGroupResponse) {}
7575

76+
// rdc_status_t rdc_group_field_add_field(
77+
// rdc_field_grp_t rdc_field_group_id, rdc_field_t field_id)
78+
rpc AddFieldToFieldGroup(AddFieldToFieldGroupRequest)
79+
returns (AddFieldToFieldGroupResponse) {}
80+
7681
// rdc_status_t rdc_group_field_get_info(
7782
// rdc_field_grp_t rdc_field_group_id,
7883
// rdc_field_group_info_t* field_group_info)
@@ -291,6 +296,15 @@ message CreateFieldGroupResponse {
291296
uint32 field_group_id = 2;
292297
}
293298

299+
message AddFieldToFieldGroupRequest {
300+
uint32 field_group_id = 1;
301+
uint32 field_id = 2;
302+
}
303+
304+
message AddFieldToFieldGroupResponse {
305+
uint32 status = 1;
306+
}
307+
294308
message GetFieldGroupInfoRequest {
295309
uint32 field_group_id = 1;
296310
}

projects/rdc/rdc_libs/bootstrap/src/RdcBootStrap.cc

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -206,6 +206,16 @@ rdc_status_t rdc_group_field_create(rdc_handle_t p_rdc_handle, uint32_t num_fiel
206206
->rdc_group_field_create(num_field_ids, field_ids, field_group_name, rdc_field_group_id);
207207
}
208208

209+
rdc_status_t rdc_group_field_add_field(rdc_handle_t p_rdc_handle, rdc_field_grp_t rdc_field_group_id,
210+
rdc_field_t field_id) {
211+
if (!p_rdc_handle) {
212+
return RDC_ST_INVALID_HANDLER;
213+
}
214+
215+
return static_cast<amd::rdc::RdcHandler*>(p_rdc_handle)
216+
->rdc_group_field_add_field(rdc_field_group_id, field_id);
217+
}
218+
209219
rdc_status_t rdc_group_field_get_info(rdc_handle_t p_rdc_handle, rdc_field_grp_t rdc_field_group_id,
210220
rdc_field_group_info_t* field_group_info) {
211221
if (!p_rdc_handle) {

projects/rdc/rdc_libs/rdc/src/RdcEmbeddedHandler.cc

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -323,6 +323,20 @@ rdc_status_t RdcEmbeddedHandler::rdc_group_field_create(uint32_t num_field_ids,
323323
rdc_field_group_id);
324324
}
325325

326+
rdc_status_t RdcEmbeddedHandler::rdc_group_field_add_field(rdc_field_grp_t rdc_field_group_id,
327+
rdc_field_t field_id) {
328+
if (!group_settings_) {
329+
return RDC_ST_NOT_SUPPORTED;
330+
}
331+
332+
if (!is_field_valid(field_id)) {
333+
RDC_LOG(RDC_INFO, "Fail to add field with unknown field id " << field_id);
334+
return RDC_ST_NOT_SUPPORTED;
335+
}
336+
337+
return group_settings_->rdc_group_field_add_field(rdc_field_group_id, field_id);
338+
}
339+
326340
rdc_status_t RdcEmbeddedHandler::rdc_group_field_get_info(
327341
rdc_field_grp_t rdc_field_group_id, rdc_field_group_info_t* field_group_info) {
328342
if (!field_group_info) {

projects/rdc/rdc_libs/rdc/src/RdcGroupSettingsImpl.cc

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -188,6 +188,34 @@ rdc_status_t RdcGroupSettingsImpl::rdc_group_field_create(uint32_t num_field_ids
188188
return RDC_ST_OK;
189189
}
190190

191+
rdc_status_t RdcGroupSettingsImpl::rdc_group_field_add_field(rdc_field_grp_t rdc_field_group_id,
192+
rdc_field_t field_id) {
193+
std::lock_guard<std::mutex> guard(field_group_mutex_);
194+
195+
auto ite = field_group_.find(rdc_field_group_id);
196+
if (ite == field_group_.end()) {
197+
return RDC_ST_FLDGROUP_NOT_FOUND;
198+
}
199+
200+
// Check if field already exists in the group
201+
for (uint32_t i = 0; i < ite->second.count; i++) {
202+
if (ite->second.field_ids[i] == field_id) {
203+
return RDC_ST_BAD_PARAMETER;
204+
}
205+
}
206+
207+
// Check if we have room for another field
208+
if (ite->second.count >= RDC_MAX_FIELD_IDS_PER_FIELD_GROUP) {
209+
return RDC_ST_MAX_LIMIT;
210+
}
211+
212+
// Add the field to the group
213+
ite->second.field_ids[ite->second.count] = field_id;
214+
ite->second.count++;
215+
216+
return RDC_ST_OK;
217+
}
218+
191219
rdc_status_t RdcGroupSettingsImpl::rdc_group_field_destroy(rdc_field_grp_t rdc_field_group_id) {
192220
if (rdc_field_group_id == JOB_FIELD_ID) {
193221
RDC_LOG(RDC_INFO, "Cannot delete system JOB_FIELD_ID field group");

0 commit comments

Comments
 (0)