[Devel] Re: [RFC][v4][PATCH 7/7]: Define clone_extended() syscall

Sukadev Bhattiprolu sukadev at linux.vnet.ibm.com
Thu Aug 6 11:23:40 PDT 2009


| I think Suka's suggestion is again inherently limited (in # of
| clone flags) and will force even uglier syscalls for each arch than the
| previous one already does.
| 

Yes other architectures are forced to ignore the flags_high and copy-in the
tid pointers.

But if we want more than 64 bit flags, we may need follow the sigset_t 
model ?

Also, I am listing three approaches below. Do you prefer #2 below ?

1. =====

        struct clone_tid_info {
                void *parent_tid;       /* parent_tid_ptr parameter */
                void *child_tid;        /* child_tid_ptr parameter */
        };

        struct pid_set {
                int num_pids;
                pid_t *pids;
        };

        int clone_extended(int flags_low, int flags_high, void *child_stack,
                        void *unused, struct clone_tid_info *tid_ptrs,
                        struct pid_set *pid_setp);

2. ======

	struct clone_info {
		int flags_high;
		struct pid_set pid_set;
	}

        int clone_extended(int flags_low, void *child_stack, void *unused,
		int *parent_tid, int *child_tid, struct clone_info *clone_info);


	Pros:
		- copy_from_user() needed only for new flags and pid_set

	Cons:
		- splitting the high and low clone-flags is awkward ?

3. =====

	typedef struct {
		unsigned long flags[N_CLONE_FLAGS];
	} clone_flags_t;

	int clone_extended(clone_flags_t *flags, void *child_stack, int *unused,
		int *parent_tid, int *child_tid, struct pid_set *pid_set);


	Pros:
		- extendible clone_flags (like sigset_t)
		- no copy_from_user() when we have 32 clone-flags
		- no copy_from_user for tids

	Cons:
		- copy_from_user() needed on 32-bit architectures for all flags
		  when they exceed 32.


Sukadev
_______________________________________________
Containers mailing list
Containers at lists.linux-foundation.org
https://lists.linux-foundation.org/mailman/listinfo/containers




More information about the Devel mailing list