LCOV - code coverage report
Current view: top level - acl/acl_tdt_queue - queue_process.h (source / functions) Coverage Total Hit
Test: coverage.info Lines: 100.0 % 2 2
Test Date: 2026-07-28 10:53:01 Functions: 66.7 % 3 2

            Line data    Source code
       1              : /**
       2              :  * Copyright (c) 2025 Huawei Technologies Co., Ltd.
       3              :  * This program is free software, you can redistribute it and/or modify it under the terms and conditions of
       4              :  * CANN Open Software License Agreement Version 2.0 (the "License").
       5              :  * Please refer to the License for details. You may not use this file except in compliance with the License.
       6              :  * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED,
       7              :  * INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY, OR FITNESS FOR A PARTICULAR PURPOSE.
       8              :  * See LICENSE in the root of the software repository for the full text of the License.
       9              :  */
      10              : 
      11              : #ifndef QUEUE_PROCESSOR_H
      12              : #define QUEUE_PROCESSOR_H
      13              : 
      14              : #include <mutex>
      15              : #include <memory>
      16              : #include <map>
      17              : #include "queue.h"
      18              : #include "runtime/rt_mem_queue.h"
      19              : #include "mmpa/mmpa_api.h"
      20              : 
      21              : namespace acl {
      22              : 
      23              : using QueueDataMutex = struct TagQueueDataMutex {
      24              :     std::mutex muForEnqueue;
      25              :     std::mutex muForDequeue;
      26              : };
      27              : 
      28              : enum PID_QUERY_TYPE : int32_t { CP_PID, QS_PID };
      29              : 
      30              : constexpr int32_t MSEC_TO_USEC = 1000;
      31              : 
      32              : constexpr size_t QUERY_BUFF_GRP_MAX_NUM = 1024U;
      33              : 
      34              : using QueueDataMutexPtr = std::shared_ptr<QueueDataMutex>;
      35              : 
      36              : class QueueProcessor {
      37              : public:
      38              :     virtual aclError acltdtCreateQueue(const acltdtQueueAttr* const attr, uint32_t* const qid) = 0;
      39              : 
      40              :     virtual aclError acltdtDestroyQueue(const uint32_t qid) = 0;
      41              : 
      42              :     virtual aclError acltdtEnqueue(const uint32_t qid, const acltdtBuf buf, const int32_t timeout);
      43              : 
      44              :     virtual aclError acltdtDequeue(const uint32_t qid, acltdtBuf* const buf, const int32_t timeout);
      45              : 
      46              :     virtual aclError acltdtGrantQueue(
      47              :         const uint32_t qid, const int32_t pid, const uint32_t permission, const int32_t timeout);
      48              : 
      49              :     virtual aclError acltdtAttachQueue(const uint32_t qid, const int32_t timeout, uint32_t* const permission);
      50              : 
      51              :     virtual aclError acltdtBindQueueRoutes(acltdtQueueRouteList* const qRouteList) = 0;
      52              : 
      53              :     virtual aclError acltdtUnbindQueueRoutes(acltdtQueueRouteList* const qRouteList) = 0;
      54              : 
      55              :     virtual aclError acltdtQueryQueueRoutes(
      56              :         const acltdtQueueRouteQueryInfo* const queryInfo, acltdtQueueRouteList* const qRouteList) = 0;
      57              : 
      58              :     virtual aclError acltdtAllocBuf(const size_t size, const uint32_t type, acltdtBuf* const buf) = 0;
      59              : 
      60              :     virtual aclError acltdtAllocBufData(const size_t size, const uint32_t type, acltdtBuf* const buf);
      61              : 
      62              :     virtual aclError acltdtFreeBuf(acltdtBuf buf);
      63              : 
      64              :     virtual aclError acltdtSetBufDataLen(const acltdtBuf buf, const size_t len);
      65              : 
      66              :     virtual aclError acltdtGetBufDataLen(const acltdtBuf buf, size_t* const len);
      67              : 
      68              :     virtual aclError acltdtAppendBufChain(const acltdtBuf headBuf, const acltdtBuf buf);
      69              : 
      70              :     virtual aclError acltdtGetBufChainNum(const acltdtBuf headBuf, uint32_t* const num);
      71              : 
      72              :     virtual aclError acltdtGetBufFromChain(const acltdtBuf headBuf, const uint32_t index, acltdtBuf* const buf);
      73              : 
      74              :     virtual aclError acltdtGetBufData(const acltdtBuf buf, void** const dataPtr, size_t* const size);
      75              : 
      76              :     virtual aclError acltdtGetBufUserData(const acltdtBuf buf, void* dataPtr, const size_t size, const size_t offset);
      77              : 
      78              :     virtual aclError acltdtSetBufUserData(acltdtBuf buf, const void* dataPtr, const size_t size, const size_t offset);
      79              : 
      80              :     virtual aclError acltdtCopyBufRef(const acltdtBuf buf, acltdtBuf* const newBuf);
      81              : 
      82              :     virtual aclError QueryAllocGroup();
      83              : 
      84              :     virtual aclError QueryGroupId(const std::string& grpName);
      85              : 
      86              :     aclError InitQueueSchedule(const int32_t devId) const;
      87              : 
      88              :     aclError acltdtDestroyQueueOndevice(const uint32_t qid, const bool isThreadMode = false);
      89              : 
      90              :     aclError SendBindUnbindMsgOnDevice(
      91              :         acltdtQueueRouteList* const qRouteList, const bool isBind, rtEschedEventSummary_t& eventSum,
      92              :         rtEschedEventReply_t& ack) const;
      93              : 
      94              :     aclError SendConnectQsMsg(const int32_t deviceId, rtEschedEventSummary_t& eventSum, rtEschedEventReply_t& ack);
      95              :     aclError GetDstInfo(
      96              :         const int32_t deviceId, const PID_QUERY_TYPE type, int32_t& dstPid, const bool isThreadMode = false) const;
      97              :     aclError GetQueuePermission(const int32_t deviceId, uint32_t qid, rtMemQueueShareAttr_t& permission) const;
      98              :     aclError GetQueueRouteNum(
      99              :         const acltdtQueueRouteQueryInfo* const queryInfo, const int32_t deviceId, rtEschedEventSummary_t& eventSum,
     100              :         rtEschedEventReply_t& ack, size_t& routeNum) const;
     101              : 
     102              :     aclError QueryQueueRoutesOnDevice(
     103              :         const acltdtQueueRouteQueryInfo* const queryInfo, const size_t routeNum, rtEschedEventSummary_t& eventSum,
     104              :         rtEschedEventReply_t& ack, acltdtQueueRouteList* const qRouteList) const;
     105              : 
     106              :     QueueDataMutexPtr GetMutexForData(const uint32_t qid);
     107              :     void DeleteMutexForData(const uint32_t qid);
     108              : 
     109              :     uint64_t GetTimestamp() const;
     110              : 
     111              :     aclError GetDeviceId(int32_t& deviceId) const;
     112              : 
     113              :     virtual aclError acltdtEnqueueData(
     114              :         const uint32_t qid, const void* const data, const size_t dataSize, const void* const userData,
     115              :         const size_t userDataSize, const int32_t timeout, const uint32_t rsv);
     116              : 
     117              :     aclError acltdtDequeueData(
     118              :         const uint32_t qid, void* const data, const size_t dataSize, size_t* const retDataSize, void* const userData,
     119              :         const size_t userDataSize, const int32_t timeout);
     120              : 
     121              :     // set queue attr to default,depth is 8,name is empty
     122              :     static void acltdtSetDefaultQueueAttr(acltdtQueueAttr& attr);
     123              : 
     124              :     aclError acltdtCreateQueueWithAttr(
     125              :         const int32_t deviceId, const acltdtQueueAttr* const attr, uint32_t* const qid) const;
     126              : 
     127           35 :     QueueProcessor() = default;
     128           35 :     virtual ~QueueProcessor() = default;
     129              : 
     130              :     // not allow copy constructor and assignment operators
     131              :     QueueProcessor(const QueueProcessor&) = delete;
     132              : 
     133              :     QueueProcessor& operator=(const QueueProcessor&) = delete;
     134              : 
     135              :     QueueProcessor(QueueProcessor&&) = delete;
     136              : 
     137              :     QueueProcessor&& operator=(QueueProcessor&&) = delete;
     138              : 
     139              : protected:
     140              :     std::recursive_mutex muForQueueCtrl_;
     141              :     std::mutex muForQueryGroup_;
     142              :     std::mutex muForQueueMap_;
     143              :     std::mutex muForCreateGroup_;
     144              :     std::map<uint32_t, QueueDataMutexPtr> muForQueue_;
     145              :     bool isQsInit_ = false;
     146              :     uint32_t qsContactId_ = 0U;
     147              :     int32_t qsGroupId_ = 0;
     148              :     static bool isInitQs_;
     149              :     static bool isMbufInit_;
     150              :     // new mbuf version is enhanced, mbuf can not be operated after enqueue
     151              :     bool isMbufEnhanced_ = false;
     152              : };
     153              : } // namespace acl
     154              : #endif // QUEUE_PROCESS_H
        

Generated by: LCOV version 2.0-1