From 34d9769988397a1edf93ad1966c167591ab29e79 Mon Sep 17 00:00:00 2001 From: Jon Medhurst Date: Thu, 19 Dec 2013 09:23:06 +0000 Subject: gator: Version 5.17 Signed-off-by: Jon Medhurst --- tools/gator/daemon/Buffer.cpp | 11 ++++++ tools/gator/daemon/Buffer.h | 5 +++ tools/gator/daemon/Child.cpp | 13 ++++--- tools/gator/daemon/Child.h | 4 ++ tools/gator/daemon/ConfigurationXML.h | 4 ++ tools/gator/daemon/Driver.h | 6 ++- tools/gator/daemon/Fifo.h | 4 ++ tools/gator/daemon/Hwmon.cpp | 4 ++ tools/gator/daemon/Hwmon.h | 4 ++ tools/gator/daemon/OlySocket.cpp | 23 +++++++---- tools/gator/daemon/Sender.h | 4 ++ tools/gator/daemon/SessionData.cpp | 12 +++--- tools/gator/daemon/SessionData.h | 6 ++- tools/gator/daemon/SessionXML.h | 4 ++ tools/gator/daemon/StreamlineSetup.h | 4 ++ tools/gator/daemon/common.mk | 2 +- tools/gator/daemon/events-CCI-400.xml | 62 +++++++++++++++++++++++++++++- tools/gator/daemon/events-Linux.xml | 10 ++--- tools/gator/daemon/events-Mali-T6xx.xml | 10 +++++ tools/gator/daemon/events-Mali-T6xx_hw.xml | 5 ++- tools/gator/daemon/main.cpp | 25 +++++++----- 21 files changed, 183 insertions(+), 39 deletions(-) (limited to 'tools') diff --git a/tools/gator/daemon/Buffer.cpp b/tools/gator/daemon/Buffer.cpp index c7abbf3a1820..090a71553277 100644 --- a/tools/gator/daemon/Buffer.cpp +++ b/tools/gator/daemon/Buffer.cpp @@ -193,6 +193,17 @@ bool Buffer::eventHeader (const uint64_t curr_time) { return retval; } +bool Buffer::eventTid (const int tid) { + bool retval = false; + if (checkSpace(2*MAXSIZE_PACK32)) { + packInt(1); // key of 1 indicates a tid + packInt(tid); + retval = true; + } + + return retval; +} + void Buffer::event (const int32_t key, const int32_t value) { if (checkSpace(2 * MAXSIZE_PACK32)) { packInt(key); diff --git a/tools/gator/daemon/Buffer.h b/tools/gator/daemon/Buffer.h index f820cfd851e3..b3c8d78cf758 100644 --- a/tools/gator/daemon/Buffer.h +++ b/tools/gator/daemon/Buffer.h @@ -32,6 +32,7 @@ public: void frame (); bool eventHeader (uint64_t curr_time); + bool eventTid (int tid); void event (int32_t key, int32_t value); void event64 (int64_t key, int64_t value); @@ -56,6 +57,10 @@ private: char *const buf; uint64_t commitTime; sem_t *const readerSem; + + // Intentionally unimplemented + Buffer(const Buffer &); + Buffer &operator=(const Buffer &); }; #endif // BUFFER_H diff --git a/tools/gator/daemon/Child.cpp b/tools/gator/daemon/Child.cpp index c0540762698f..9ee2ef8afb9d 100644 --- a/tools/gator/daemon/Child.cpp +++ b/tools/gator/daemon/Child.cpp @@ -86,7 +86,7 @@ static void child_handler(int signum) { } } -static void* durationThread(void* pVoid) { +static void *durationThread(void *) { prctl(PR_SET_NAME, (unsigned long)&"gatord-duration", 0, 0, 0); sem_wait(&startProfile); if (gSessionData->mSessionIsActive) { @@ -102,7 +102,7 @@ static void* durationThread(void* pVoid) { return 0; } -static void* stopThread(void* pVoid) { +static void *stopThread(void *) { OlySocket* socket = child->socket; prctl(PR_SET_NAME, (unsigned long)&"gatord-stopper", 0, 0, 0); @@ -139,7 +139,7 @@ static void* stopThread(void* pVoid) { return 0; } -void* countersThread(void* pVoid) { +static void *countersThread(void *) { prctl(PR_SET_NAME, (unsigned long)&"gatord-counters", 0, 0, 0); gSessionData->hwmon.start(); @@ -192,7 +192,7 @@ void* countersThread(void* pVoid) { return NULL; } -static void* senderThread(void* pVoid) { +static void *senderThread(void *) { int length = 1; char* data; char end_sequence[] = {RESPONSE_APC_DATA, 0, 0, 0, 0}; @@ -340,7 +340,8 @@ void Child::run() { thread_creation_success = false; } - if (gSessionData->hwmon.countersEnabled()) { + bool startcountersThread = gSessionData->hwmon.countersEnabled(); + if (startcountersThread) { if (pthread_create(&countersThreadID, NULL, countersThread, this)) { thread_creation_success = false; } @@ -378,7 +379,7 @@ void Child::run() { } while (bytesCollected > 0); logg->logMessage("Exit collect data loop"); - if (gSessionData->hwmon.countersEnabled()) { + if (startcountersThread) { pthread_join(countersThreadID, NULL); } diff --git a/tools/gator/daemon/Child.h b/tools/gator/daemon/Child.h index e39d18276407..0330e9d78027 100644 --- a/tools/gator/daemon/Child.h +++ b/tools/gator/daemon/Child.h @@ -26,6 +26,10 @@ private: int mNumConnections; void initialization(); + + // Intentionally unimplemented + Child(const Child &); + Child &operator=(const Child &); }; #endif //__CHILD_H__ diff --git a/tools/gator/daemon/ConfigurationXML.h b/tools/gator/daemon/ConfigurationXML.h index eba7dc4bac46..5650f487b990 100644 --- a/tools/gator/daemon/ConfigurationXML.h +++ b/tools/gator/daemon/ConfigurationXML.h @@ -29,6 +29,10 @@ private: int parse(const char* xmlFile); int configurationsTag(mxml_node_t *node); void configurationTag(mxml_node_t *node); + + // Intentionally unimplemented + ConfigurationXML(const ConfigurationXML &); + ConfigurationXML &operator=(const ConfigurationXML &); }; #endif // COUNTERS_H diff --git a/tools/gator/daemon/Driver.h b/tools/gator/daemon/Driver.h index dd1dc27d1cdb..f3a932f852cb 100644 --- a/tools/gator/daemon/Driver.h +++ b/tools/gator/daemon/Driver.h @@ -29,7 +29,7 @@ public: // Emits available counters virtual void writeCounters(mxml_node_t *root) const = 0; // Emits possible dynamically generated events/counters - virtual void writeEvents(mxml_node_t *root) const {} + virtual void writeEvents(mxml_node_t *) const {} Driver *getNext() const { return next; } @@ -39,6 +39,10 @@ protected: private: static Driver *head; Driver *next; + + // Intentionally unimplemented + Driver(const Driver &); + Driver &operator=(const Driver &); }; #endif // DRIVER_H diff --git a/tools/gator/daemon/Fifo.h b/tools/gator/daemon/Fifo.h index ada42b9fb584..d25cd6882561 100644 --- a/tools/gator/daemon/Fifo.h +++ b/tools/gator/daemon/Fifo.h @@ -39,6 +39,10 @@ private: sem_t* mReaderSem; char* mBuffer; bool mEnd; + + // Intentionally unimplemented + Fifo(const Fifo &); + Fifo &operator=(const Fifo &); }; #endif //__FIFO_H__ diff --git a/tools/gator/daemon/Hwmon.cpp b/tools/gator/daemon/Hwmon.cpp index 07925680c1f6..1d7c0da9cc83 100644 --- a/tools/gator/daemon/Hwmon.cpp +++ b/tools/gator/daemon/Hwmon.cpp @@ -63,6 +63,10 @@ private: double previous_value; sensors_subfeature_type input; + + // Intentionally unimplemented + HwmonCounter(const HwmonCounter &); + HwmonCounter &operator=(const HwmonCounter &); }; HwmonCounter::HwmonCounter(HwmonCounter *next, int key, const sensors_chip_name *chip, const sensors_feature *feature) : next(next), key(key), polled(false), readable(false), enabled(false), duplicate(false), chip(chip), feature(feature) { diff --git a/tools/gator/daemon/Hwmon.h b/tools/gator/daemon/Hwmon.h index 35981dc3d9ad..46bb42e898d7 100644 --- a/tools/gator/daemon/Hwmon.h +++ b/tools/gator/daemon/Hwmon.h @@ -34,6 +34,10 @@ private: HwmonCounter *findCounter(const Counter &counter) const; HwmonCounter *counters; + + // Intentionally unimplemented + Hwmon(const Hwmon &); + Hwmon &operator=(const Hwmon &); }; #endif // HWMON_H diff --git a/tools/gator/daemon/OlySocket.cpp b/tools/gator/daemon/OlySocket.cpp index 132510df584a..ab5c3c2c8938 100644 --- a/tools/gator/daemon/OlySocket.cpp +++ b/tools/gator/daemon/OlySocket.cpp @@ -11,6 +11,7 @@ #include #ifdef WIN32 #include +#include #else #include #include @@ -126,11 +127,17 @@ void OlySocket::createSingleServerConnection(int port) { } void OlySocket::createServerSocket(int port) { + int family = AF_INET6; + // Create socket - mFDServer = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP); + mFDServer = socket(PF_INET6, SOCK_STREAM, IPPROTO_TCP); if (mFDServer < 0) { - logg->logError(__FILE__, __LINE__, "Error creating server socket"); - handleException(); + family = AF_INET; + mFDServer = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP); + if (mFDServer < 0) { + logg->logError(__FILE__, __LINE__, "Error creating server socket"); + handleException(); + } } // Enable address reuse, another solution would be to create the server socket once and only close it when the object exits @@ -141,11 +148,11 @@ void OlySocket::createServerSocket(int port) { } // Create sockaddr_in structure, ensuring non-populated fields are zero - struct sockaddr_in sockaddr; - memset((void*)&sockaddr, 0, sizeof(struct sockaddr_in)); - sockaddr.sin_family = AF_INET; - sockaddr.sin_port = htons(port); - sockaddr.sin_addr.s_addr = INADDR_ANY; + struct sockaddr_in6 sockaddr; + memset((void*)&sockaddr, 0, sizeof(sockaddr)); + sockaddr.sin6_family = family; + sockaddr.sin6_port = htons(port); + sockaddr.sin6_addr = in6addr_any; // Bind the socket to an address if (bind(mFDServer, (const struct sockaddr*)&sockaddr, sizeof(sockaddr)) < 0) { diff --git a/tools/gator/daemon/Sender.h b/tools/gator/daemon/Sender.h index 8f23361a5def..b388f039bad7 100644 --- a/tools/gator/daemon/Sender.h +++ b/tools/gator/daemon/Sender.h @@ -33,6 +33,10 @@ private: FILE* mDataFile; char* mDataFileName; pthread_mutex_t mSendMutex; + + // Intentionally unimplemented + Sender(const Sender &); + Sender &operator=(const Sender &); }; #endif //__SENDER_H__ diff --git a/tools/gator/daemon/SessionData.cpp b/tools/gator/daemon/SessionData.cpp index 4068d4e957f0..cf844075401f 100644 --- a/tools/gator/daemon/SessionData.cpp +++ b/tools/gator/daemon/SessionData.cpp @@ -44,13 +44,13 @@ void SessionData::parseSessionXML(char* xmlString) { SessionXML session(xmlString); session.parse(); - // Set session data values + // Set session data values - use prime numbers just below the desired value to reduce the chance of events firing at the same time if (strcmp(session.parameters.sample_rate, "high") == 0) { - mSampleRate = 10000; + mSampleRate = 9973; // 10000 } else if (strcmp(session.parameters.sample_rate, "normal") == 0) { - mSampleRate = 1000; + mSampleRate = 997; // 1000 } else if (strcmp(session.parameters.sample_rate, "low") == 0) { - mSampleRate = 100; + mSampleRate = 97; // 100 } else if (strcmp(session.parameters.sample_rate, "none") == 0) { mSampleRate = 0; } else { @@ -139,7 +139,9 @@ void SessionData::readCpuInfo() { } int getEventKey() { - // Start one after the gator.ko's value of 1 + // key 0 is reserved as a timestamp + // key 1 is reserved as the marker for thread specific counters + // Odd keys are assigned by the driver, even keys by the daemon static int key = 2; const int ret = key; diff --git a/tools/gator/daemon/SessionData.h b/tools/gator/daemon/SessionData.h index e72fa5d7c5ed..c834251527cf 100644 --- a/tools/gator/daemon/SessionData.h +++ b/tools/gator/daemon/SessionData.h @@ -16,7 +16,7 @@ #define MAX_PERFORMANCE_COUNTERS 50 -#define PROTOCOL_VERSION 16 +#define PROTOCOL_VERSION 17 #define PROTOCOL_DEV 1000 // Differentiates development versions (timestamp) from release versions struct ImageLinkList { @@ -62,6 +62,10 @@ public: private: void readCpuInfo(); + + // Intentionally unimplemented + SessionData(const SessionData &); + SessionData &operator=(const SessionData &); }; extern SessionData* gSessionData; diff --git a/tools/gator/daemon/SessionXML.h b/tools/gator/daemon/SessionXML.h index c7e3798d6950..0fb03bd6627c 100644 --- a/tools/gator/daemon/SessionXML.h +++ b/tools/gator/daemon/SessionXML.h @@ -33,6 +33,10 @@ private: char* mPath; void sessionTag(mxml_node_t *tree, mxml_node_t *node); void sessionImage(mxml_node_t *node); + + // Intentionally unimplemented + SessionXML(const SessionXML &); + SessionXML &operator=(const SessionXML &); }; #endif // SESSION_XML_H diff --git a/tools/gator/daemon/StreamlineSetup.h b/tools/gator/daemon/StreamlineSetup.h index 092d956ec99f..d6d9a6ea2991 100644 --- a/tools/gator/daemon/StreamlineSetup.h +++ b/tools/gator/daemon/StreamlineSetup.h @@ -38,6 +38,10 @@ private: void sendDefaults(); void sendCounters(); void writeConfiguration(char* xml); + + // Intentionally unimplemented + StreamlineSetup(const StreamlineSetup &); + StreamlineSetup &operator=(const StreamlineSetup &); }; #endif //__STREAMLINE_SETUP_H__ diff --git a/tools/gator/daemon/common.mk b/tools/gator/daemon/common.mk index ee2415b8825c..031d16906881 100644 --- a/tools/gator/daemon/common.mk +++ b/tools/gator/daemon/common.mk @@ -6,7 +6,7 @@ # -std=c++0x is the planned new c++ standard # -std=c++98 is the 1998 c++ standard CFLAGS += -O3 -Wall -fno-exceptions -pthread -MMD -DETCDIR=\"/etc\" -Ilibsensors -CXXFLAGS += -fno-rtti +CXXFLAGS += -fno-rtti -Wextra # -Weffc++ ifeq ($(WERROR),1) CFLAGS += -Werror endif diff --git a/tools/gator/daemon/events-CCI-400.xml b/tools/gator/daemon/events-CCI-400.xml index 86db2087e1f5..4fa77117d2d8 100644 --- a/tools/gator/daemon/events-CCI-400.xml +++ b/tools/gator/daemon/events-CCI-400.xml @@ -17,7 +17,7 @@ - + @@ -45,3 +45,63 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tools/gator/daemon/events-Linux.xml b/tools/gator/daemon/events-Linux.xml index 4a30ad6ec4e6..31a90a1d6335 100644 --- a/tools/gator/daemon/events-Linux.xml +++ b/tools/gator/daemon/events-Linux.xml @@ -6,11 +6,11 @@ - - - - - + + + + + diff --git a/tools/gator/daemon/events-Mali-T6xx.xml b/tools/gator/daemon/events-Mali-T6xx.xml index 647e3d5b0fcf..2465238a8bda 100644 --- a/tools/gator/daemon/events-Mali-T6xx.xml +++ b/tools/gator/daemon/events-Mali-T6xx.xml @@ -36,3 +36,13 @@ + + + + + + + diff --git a/tools/gator/daemon/events-Mali-T6xx_hw.xml b/tools/gator/daemon/events-Mali-T6xx_hw.xml index 8cfe7c3084d5..03566cbb06ab 100644 --- a/tools/gator/daemon/events-Mali-T6xx_hw.xml +++ b/tools/gator/daemon/events-Mali-T6xx_hw.xml @@ -60,12 +60,15 @@ - + + + + diff --git a/tools/gator/daemon/main.cpp b/tools/gator/daemon/main.cpp index d1b0913aa78f..bfd36b98766c 100644 --- a/tools/gator/daemon/main.cpp +++ b/tools/gator/daemon/main.cpp @@ -93,7 +93,7 @@ static void handler(int signum) { } // Child exit Signal Handler -static void child_exit(int signum) { +static void child_exit(int) { int status; int pid = wait(&status); if (pid != -1) { @@ -106,13 +106,18 @@ static void child_exit(int signum) { static int udpPort(int port) { int s; - struct sockaddr_in sockaddr; + struct sockaddr_in6 sockaddr; int on; + int family = AF_INET6; - s = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); + s = socket(AF_INET6, SOCK_DGRAM, IPPROTO_UDP); if (s == -1) { - logg->logError(__FILE__, __LINE__, "socket failed"); - handleException(); + family = AF_INET; + s = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); + if (s == -1) { + logg->logError(__FILE__, __LINE__, "socket failed"); + handleException(); + } } on = 1; @@ -122,9 +127,9 @@ static int udpPort(int port) { } memset((void*)&sockaddr, 0, sizeof(sockaddr)); - sockaddr.sin_family = AF_INET; - sockaddr.sin_port = htons(port); - sockaddr.sin_addr.s_addr = INADDR_ANY; + sockaddr.sin6_family = family; + sockaddr.sin6_port = htons(port); + sockaddr.sin6_addr = in6addr_any; if (bind(s, (struct sockaddr *)&sockaddr, sizeof(sockaddr)) < 0) { logg->logError(__FILE__, __LINE__, "socket failed"); handleException(); @@ -173,7 +178,7 @@ static void* answerThread(void* pVoid) { for (;;) { char buf[128]; - struct sockaddr_in sockaddr; + struct sockaddr_in6 sockaddr; socklen_t addrlen; int read; addrlen = sizeof(sockaddr); @@ -386,7 +391,7 @@ static struct cmdline_t parseCommandLine(int argc, char** argv) { } // Gator data flow: collector -> collector fifo -> sender -int main(int argc, char** argv, char* envp[]) { +int main(int argc, char** argv) { // Ensure proper signal handling by making gatord the process group leader // e.g. it may not be the group leader when launched as 'sudo gatord' setsid(); -- cgit v1.2.3