> Please really add it to thread_sched_info_t.
Fixed. Now working in Hurd patch
El dom., 27 oct. 2019 a las 19:56, Samuel Thibault (<[email protected]>)
escribió:
> Almudena Garcia, le dim. 27 oct. 2019 19:44:23 +0100, a ecrit:
> > > + #if THREAD_BASIC_INFO_COUNT > 10
> >
> > That will be always true. What you want to check is
> *thread_info_count.
> >
> > --- gnumach/kern/thread.c 2019-09-03 01:22:10.932747830 +0200
> > +++ GNUMach_SMP/kern/thread.c 2019-10-27 19:42:15.360761959 +0100
> > @@ -1500,11 +1500,11 @@
> > if (flavor == THREAD_BASIC_INFO) {
> > thread_basic_info_t basic_info;
> >
> > - /* Allow *thread_info_count to be one smaller than the
> > - usual amount, because creation_time is a new member
> > - that some callers might not know about. */
> > + /* Allow *thread_info_count to be two smaller than the
> > + usual amount, because creation_time and last_processor
> > + are new members that some callers might not know about.
> */
> >
> > - if (*thread_info_count < THREAD_BASIC_INFO_COUNT - 1) {
> > + if (*thread_info_count < THREAD_BASIC_INFO_COUNT - 2) {
> [...]
> > + /* Check if the basic_info includes all new members
> (including last_processor) */
> > + if (*thread_info_count == THREAD_BASIC_INFO_COUNT) {
>
> Yes, that's the idea (though you want a >= instead of ==, so that it
> will work after adding another field).
>
> That being said I now realize you added the field to the
> thread_basic_info_t, while the information really belongs to the
> thread_sched_info_t. Please really add it to thread_sched_info_t. You
> have access to it from procfs's process_file_gc_stat by adding
>
> thread_basic_info_t thsi = proc_stat_thread_sched_info (ps);
>
> Samuel
>
>
--- gnumach/include/mach/thread_info.h 2019-09-03 01:22:10.920747802 +0200
+++ GNUMach_SMP/include/mach/thread_info.h 2019-10-27 20:06:55.785860002 +0100
@@ -107,6 +107,7 @@
integer_t cur_priority; /* current priority */
/*boolean_t*/integer_t depressed; /* depressed ? */
integer_t depress_priority; /* priority depressed from */
+ integer_t last_processor; /* last processor used by the thread */
};
typedef struct thread_sched_info thread_sched_info_data_t;
--- gnumach/kern/thread.c 2019-09-03 01:22:10.932747830 +0200
+++ GNUMach_SMP/kern/thread.c 2019-10-27 20:09:10.515836242 +0100
@@ -1609,6 +1609,18 @@
sched_info->depressed = (thread->depress_priority >= 0);
sched_info->depress_priority = thread->depress_priority;
+
+ /* Check if the sched_info includes all new members (including last_processor) */
+ if (*thread_info_count >= THREAD_SCHED_INFO_COUNT) {
+
+ #if NCPUS > 1
+ sched_info->last_processor = thread->last_processor;
+ #else
+ sched_info->last_processor = 0;
+ #endif
+
+ }
+
thread_unlock(thread);
splx(s);