From owner-freebsd-hackers@freebsd.org Sun Aug 12 23:48:12 2018 Return-Path: Delivered-To: freebsd-hackers@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 74F37105B2DF for ; Sun, 12 Aug 2018 23:48:12 +0000 (UTC) (envelope-from kostikbel@gmail.com) Received: from kib.kiev.ua (kib.kiev.ua [IPv6:2001:470:d5e7:1::1]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id DC51C802B5 for ; Sun, 12 Aug 2018 23:48:11 +0000 (UTC) (envelope-from kostikbel@gmail.com) Received: from tom.home (kib@localhost [127.0.0.1]) by kib.kiev.ua (8.15.2/8.15.2) with ESMTPS id w7CNm029068512 (version=TLSv1.2 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=NO); Mon, 13 Aug 2018 02:48:03 +0300 (EEST) (envelope-from kostikbel@gmail.com) DKIM-Filter: OpenDKIM Filter v2.10.3 kib.kiev.ua w7CNm029068512 Received: (from kostik@localhost) by tom.home (8.15.2/8.15.2/Submit) id w7CNm0VJ068511; Mon, 13 Aug 2018 02:48:00 +0300 (EEST) (envelope-from kostikbel@gmail.com) X-Authentication-Warning: tom.home: kostik set sender to kostikbel@gmail.com using -f Date: Mon, 13 Aug 2018 02:48:00 +0300 From: Konstantin Belousov To: Willem Jan Withagen Cc: FreeBSD Hackers Subject: Re: Write a version for pthread_get_name_np Message-ID: <20180812234800.GD2340@kib.kiev.ua> References: <7fa2b876-9397-da2b-cb29-56badf11b66d@ecoracks.nl> <42689feb-9bd4-429b-63d7-b9193123ee47@digiware.nl> <20180812205835.GB2340@kib.kiev.ua> <20180812225726.GC2340@kib.kiev.ua> MIME-Version: 1.0 Content-Type: text/plain; charset=koi8-r Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: User-Agent: Mutt/1.10.1 (2018-07-13) X-Spam-Status: No, score=-2.0 required=5.0 tests=ALL_TRUSTED,BAYES_00, DKIM_ADSP_CUSTOM_MED,FREEMAIL_FROM,NML_ADSP_CUSTOM_MED autolearn=no autolearn_force=no version=3.4.1 X-Spam-Checker-Version: SpamAssassin 3.4.1 (2015-04-28) on tom.home X-BeenThere: freebsd-hackers@freebsd.org X-Mailman-Version: 2.1.27 Precedence: list List-Id: Technical Discussions relating to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 12 Aug 2018 23:48:12 -0000 On Mon, Aug 13, 2018 at 01:36:28AM +0200, Willem Jan Withagen wrote: > On 13/08/2018 00:57, Konstantin Belousov wrote: > > On Mon, Aug 13, 2018 at 12:01:03AM +0200, Willem Jan Withagen wrote: > >> On 12/08/2018 22:58, Konstantin Belousov wrote: > >>> On Sun, Aug 12, 2018 at 10:33:06PM +0200, Willem Jan Withagen wrote: > >>>> Hi, > >>>> > >>>> For some porting I'm trying to write a pthread_get_name_np(), but > >>>> I have run into a snag.... > >>>> Tried some the the procstat code I would come up with: > >>>> > >>>> int pthread_get_name_np(pthread_t *thread, > >>>> ššššššššššššššššššššššš char *name, size_t len){ > >>>> ššš struct procstat *procstat; > >>>> ššš int pid = getpid(); > >>>> ššš unsigned int count, i; > >>>> ššš struct kinfo_proc *kip, *kipp; > >>>> > >>>> ššš procstat = procstat_open_sysctl(); > >>>> ššš kip = procstat_getprocs(procstat, KERN_PROC_PID | KERN_PROC_INC_THREAD, > >>>> ššššššššššš pid, &count); > >>>> ššš for (i = 0; i < count; i++) { > >>>> ššš ššš kipp = &kip[i]; > >>>> ššš ššš printf("thread: %ld(0x%lx), %ld(0x%lx)\n", thread, thread, > >>>> kipp->ki_tid, kipp->ki_tid); > >>>> ššš ššš if (thread == kipp->ki_tid) { > >>>> ššš ššš ššš kinfo_proc_thread_name(kipp, name, len); > >>>> ššš ššš } > >>>> ššš } > >>>> ššš return 0; > >>>> } > >>>> > >>>> Problem only is that the TID value in what procstat_getprocs returns in > >>>> ki_tid is nowhere near > >>>> what pthread_self() returns. > >>>> But both manual page and the include file describe the value as Thread ID. > >>>> Only in sys/user.h the type is > >>>> ššš lwpid_t ki_tid;šššššššššššššššš /* XXXKSE thread id */ > >>>> > >>>> What do I need to translate one tid into the other so I can really > >>>> compare them? > >>> > >>> You need to cast pthread_t * to struct thread *, this is an internal > >>> libthr structure which represents the thread in userspace. The > >>> structure field tid gives you the tid you want to pass to sysctl. > >> > >> mmmm, > >> > >> I'm afraid I'm not quit able to followup on your answer. > >> > >> Trying to find what to include to be able to cast this, I can only find > >> a small bit defined in /usr/src/lib/libthr/thread/thr_private.h. > >> /* > >> * lwpid_t is 32bit but kernel thr API exports tid as long type > >> * to preserve the ABI for M:N model in very early date (r131431). > >> */ > >> #define TID(thread) ((uint32_t) ((thread)->tid)) > >> > >> But that I cannot just "include" that file without a lot of mess, and > >> then still it does not compile. > >> > >> So could you point me to where this private part of struct thread is > >> hidding? > > I do not understand your confusion. The thr_private.h header is only > > for use by libthr, the FreeBSD threading library implementation. The > > function that you are trying to implement, requires understanding of the > > libthr internals and can only be implemented as part of libthr. > > > > Any other attempt to translate libthr handle for thread into tid needs > > same access to the struct pthread. > > Oke, > > I don't have more knowledge of (p)threads than just how to use it. > I was trying to do this as a piece of code in the compat.cc of my ceph port. > > But trying to reread what you write is boils down to: there is no way to > link a value returned by (struct pthread *)pthread_self() to the kd_tid > value that can be found in the (struct kinfo_proc *) describing that > same thread. No, this is not what I said. I am claiming that this functionality must be implemented in libthr. So if you want this function, it needs to be added to libthr, and it is quite trivial to do. You can code it, or you might provide (draft of the) man page, and I will code it according to the spec. > > And even though (struct thread *) has a field: > lwpid_t td_tid; /* (b) Thread ID. */ > that field seems to be stuck at value td_tid = 32767 every time I look > at it with gdb. > > So it is a pity that this is not going to work this way. > > --WjW >