From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 129999 invoked by alias); 22 Apr 2019 10:01:15 -0000 Mailing-List: contact systemtap-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Post: List-Help: , Sender: systemtap-owner@sourceware.org Received: (qmail 129992 invoked by uid 89); 22 Apr 2019 10:01:14 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-1.9 required=5.0 tests=BAYES_00,SPF_PASS autolearn=ham version=3.3.1 spammy=Giovanni, giovanni, sk:systemt, H*Ad:U*systemtap X-HELO: mx1.suse.de Received: from mx2.suse.de (HELO mx1.suse.de) (195.135.220.15) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Mon, 22 Apr 2019 10:01:13 +0000 Received: from relay2.suse.de (unknown [195.135.220.254]) by mx1.suse.de (Postfix) with ESMTP id 98676AEB5 for ; Mon, 22 Apr 2019 10:01:11 +0000 (UTC) Message-ID: <1555927560.2268.2.camel@suse.cz> Subject: Error when using @container_of From: Giovanni Gherdovich To: systemtap@sourceware.org Date: Mon, 22 Apr 2019 10:01:00 -0000 Content-Type: text/plain; charset="UTF-8" Mime-Version: 1.0 Content-Transfer-Encoding: 7bit X-IsSubscribed: yes X-SW-Source: 2019-q2/txt/msg00033.txt.bz2 Hello, when I use the macro @container_of in systemtap I'm getting an error I don't understand. This is my tapset: #!/root/systemtap-latest/bin/stap probe kernel.function("__update_load_avg_se") { printf("%x\n", @container_of($se, "struct task_struct", se)); exit(); } and this is the error: # ./repro.stp semantic error: 'struct task_struct' (./include/linux/sched.h:602) is being accessed instead of a member such as '->acct_rss_mem1': operator '@cast' at /root/systemtap-latest/share/systemtap/tapset/container_of.stpm:2:5 source: @cast(@ptr - @offsetof(@type, @member), @type) ^ in expansion of macro: operator '@container_of' at ./repro.stp:4:17 source: printf("%x\n", @container_of($se, "struct task_struct", se)); ^ Pass 2: analysis failed. [man error::pass2] What I'm trying to do here is to get an object of type sched_entity (the target variable $se which is a parameter of the function __update_load_avg_se()) and from there grab the task_struct that contains said sched_entity. If the sched_entity in question is actually a task (and not a group), this operation should make sense; for example the inlined function task_of() from kernel/sched/fair.c does exactly that. I'm using a v5.0 kernel and the latest systemtap from the git repo: # /root/systemtap-latest/bin/stap --version Systemtap translator/driver (version 4.1/0.168, commit release-4.0-187-g288c53892665 + changes) Copyright (C) 2005-2019 Red Hat, Inc. and others This is free software; see the source for copying conditions. tested kernel versions: 2.6.18 ... 5.1-rc2 enabled features: BPF PYTHON2 LIBXML2 NLS READLINE Regards, Giovanni Gherdovich