Todo List

Global authorize_for_server (qres_server_t *qres)
It is completely unimplemented, thus it represents a SECURITY FLAW

Global check_open ()
If not open, then open it !

Global device_release (struct inode *inode, struct file *file)
Either force destroy_server() to be called here, or intercept kill hook for handling premature process end.

File kal_config.h
Move KAL-specific configuration here, and remove inclusion of rres_config.h

Global kal_eheap_init (self, N)
Investigate possibility of use of realloc() or similar within the kernel

Global l_mul_div (x, num, den)

Investigate on volatiles, that do not allow optimizations. They should not be required, but without them bw2Q(), which uses l_mul_shr, outputs zero instead of the correct value.

Investigate on volatiles, that do not allow optimizations. They should not be required, but without them bw2Q(), which uses l_mul_shr, outputs zero instead of the correct value.

Global l_mul_shr (x, y, SHF)

Investigate on volatiles, that do not allow optimizations. They should not be required, but without them bw2Q(), which uses l_mul_shr, outputs zero instead of the correct value.

Investigate on volatiles, that do not allow optimizations. They should not be required, but without them bw2Q(), which uses l_mul_shr, outputs zero instead of the correct value.

Global l_shl_div (num, SHF, den)

Investigate on volatiles, that do not allow optimizations. They should not be required, but without them bw2Q(), which uses l_mul_shr, outputs zero instead of the correct value.

Investigate on volatiles, that do not allow optimizations. They should not be required, but without them bw2Q(), which uses l_mul_shr, outputs zero instead of the correct value.

Global MIN_SRV_PERIOD
(high) use types defined in qos_types.h instead of using primitive types likes long long

File qos_memory.h

Check what are the proper flags to use with kmalloc().

These functions may be made static inline.

Global qres_create_server (qres_params_t *param, qres_sid_t *p_sid)
Implement the QRES_WATCHDOG feature.

Global qres_get_exec_time (qres_sid_t sid, qres_time_t *exec_time, qres_atime_t *abs_time)

Global qres_gw_ks (qres_op_t op, void __user *up_iparams, unsigned long size)
avoid copy_from_user and copy_to_user with entire iparams struct when unneeded.

File qres_gw_ks.c
Add creation flag that, if set, allows to set required bandwidth to zero when the rres server has no activations (should be optional as it may introduce a latency in reclaiming back the given-away bandwidth when the server activates back).

File qres_gw_ks.h
Use custom lock in addition to generic_scheduler_lock ?.

File qres_lib.h

Check status of library/QRESMod inside each function

qres library level calls take pid_t; qres supervisor-filtered calls take struct task_struct (they use task info in order to enforce qossup policy); qres lowest level calls (cbs) take struct cbs_struct;

Supervisor (Tom) Invariant-based Ctrl and Pred (Tom) Translation of qosres to IRIS (Luca) Port to 2.4.27 Test inside 2.4.27 Overhead measurements

Global qres_retrieve_from_rres (server_t *rres, int s, void **data)
we want compile out all checks when DEBUG not defined

File qresmod/qres.c
Add creation flag that, if set, allows to set required bandwidth to zero when the rres server has no activations (should be optional as it may introduce a latency in reclaiming back the given-away bandwidth when the server activates back).

File qsup.c

Add synchronization primitives.

After a while the QSUP goes on, the truncations in computations might lead to very bad things. A fix could be a periodic/sporadic recomputation of all values, including partials and totals.

All globals should be placed inside a structure, to be instantiated one time for each RR-enabled processor, for SMP systems.

Global qsup_device_release (struct inode *inode, struct file *file)
Either force destroy_server() to be called here, or intercept kill hook for handling premature process end.

Global qsup_gw_ks (qsup_op_t op, void __user *up_iparams, unsigned long size)
avoid copy_from_user and copy_to_user with entire iparams struct when unneeded.

File qsup_gw_ks.h
Use custom lock in addition to generic_scheduler_lock ?.

Global qsup_init_server (qsup_server_t *srv, int uid, int gid, qres_params_t *param)
lock qsup_servers list ?

Global qsup_lock_coeffs_read (unsigned long *p_flags)

use one for each CPU ?

evaluate if using read_lock_irqsave() is worth for anything

File rres.c

Check flow diagram of task add/remove/block/unblock/stop/continue w.r.t. call to rres_schedule() and/or to sync_with_server() and related

fare versioni con attach/detach_all (pensarle gia' con un interfaccia comoda da usare con dei set di task?)

Global rres_attach_task_nosched (server_t *srv, kal_task_t *task)

Remove the rres_sync_after_add() stuff, which should be dealt with in rres_schedule().

Check that, while moving from default_srv, task is dispatched before removal from default_srv

Global rres_find_by_id (qres_sid_t sid)
(low) move this function to time.c/.h and modify qres that call this function; rename sched_* in kal_*

Global rres_init_server (server_t *new_srv, qres_time_t max_budget, qres_time_t period, unsigned long flags)
rres_move_*_opt (optimized) functions must replace the above functions

File rres_interface.h
(high) TOMMASO distinguish synchronized and not synchronized functions

File rres_kpi_core.h
(high) TOMMASO distinguish synchronized and not synchronized functions

Global rres_move_nosched (server_t *new_srv, kal_task_t *task)
Here we may optimize by avoiding deallocating task_list and reallocating again.

Global rres_update_budget (void)
Budget Should be considered as exhausted when it is slightly positive or at last exactly zero, rather than strictly negative.

Global stop_pending_timers (server_t *srv, int pending_unexpected)
(high) check that is called when needed

Global stop_task_safe (server_t *srv, kal_task_t *task)
With soft servers, tasks should be pushed to a priority below the normal Linux prio. Also, check issues related to pushing tasks always in the same position into the Linux normal priority queues.

Global ul_mul_div (x, num, den)

Investigate on volatiles, that do not allow optimizations. They should not be required, but without them bw2Q(), which uses ul_mul_shr, outputs zero instead of the correct value.

Investigate on volatiles, that do not allow optimizations. They should not be required, but without them bw2Q(), which uses ul_mul_shr, outputs zero instead of the correct value.

Global ul_mul_shr (x, y, SHF)

Investigate on volatiles, that do not allow optimizations. They should not be required, but without them bw2Q(), which uses ul_mul_shr, outputs zero instead of the correct value.

Investigate on volatiles, that do not allow optimizations. They should not be required, but without them bw2Q(), which uses ul_mul_shr, outputs zero instead of the correct value.

Global ul_shl_div (num, SHF, den)

Investigate on volatiles, that do not allow optimizations. They should not be required, but without them bw2Q(), which uses ul_mul_shr, outputs zero instead of the correct value.

Investigate on volatiles, that do not allow optimizations. They should not be required, but without them bw2Q(), which uses ul_mul_shr, outputs zero instead of the correct value.

Generated on Mon Aug 2 22:39:17 2010 for qosres by  doxygen 1.6.3