/* * FLoating proportions * * Copyright (C) 2007 Red Hat, Inc., Peter Zijlstra * * This file contains the public data structure and API definitions. */ #ifndef _LINUX_PROPORTIONS_H #define _LINUX_PROPORTIONS_H #include #include #include struct prop_global { /* * The period over which we differentiate * * period = 2^shift */ int shift; /* * The total event counter aka 'time'. * * Treated as an unsigned long; the lower 'shift - 1' bits are the * counter bits, the remaining upper bits the period counter. */ struct percpu_counter events; }; /* * global proportion descriptor * * this is needed to consitently flip prop_global structures. */ struct prop_descriptor { int index; struct prop_global pg[2]; struct mutex mutex; /* serialize the prop_global switch */ }; int prop_descriptor_init(struct prop_descriptor *pd, int shift); void prop_change_shift(struct prop_descriptor *pd, int new_shift); /* * ----- PERCPU ------ */ struct prop_local_percpu { /* * the local events counter */ struct percpu_counter events; /* * snapshot of the last seen global state */ int shift; unsigned long period; raw_spinlock_t lock; /* protect the snapshot state */ }; int prop_local_init_percpu(struct prop_local_percpu *pl); void prop_local_destroy_percpu(struct prop_local_percpu *pl); void __prop_inc_percpu(struct prop_descriptor *pd, struct prop_local_percpu *pl); void prop_fraction_percpu(struct prop_descriptor *pd, struct prop_local_percpu *pl, long *numerator, long *denominator); static inline void prop_inc_percpu(struct prop_descriptor *pd, struct prop_local_percpu *pl) { unsigned long flags; local_irq_save(flags); __prop_inc_percpu(pd, pl); local_irq_restore(flags); } /* * Limit the time part in order to ensure there are some bits left for the * cycle counter and fraction multiply. */ #if BITS_PER_LONG == 32 #define PROP_MAX_SHIFT (3*BITS_PER_LONG/4) #else #define PROP_MAX_SHIFT (BITS_PER_LONG/2) #endif #define PROP_FRAC_SHIFT (BITS_PER_LONG - PROP_MAX_SHIFT - 1) #define PROP_FRAC_BASE (1UL << PROP_FRAC_SHIFT) void __prop_inc_percpu_max(struct prop_descriptor *pd, struct prop_local_percpu *pl, long frac); /* * ----- SINGLE ------ */ struct prop_local_single { /* * the local events counter */ unsigned long events; /* * snapshot of the last seen global state * and a lock protecting this state */ unsigned long period; int shift; raw_spinlock_t lock; /* protect the snapshot state */ }; #define INIT_PROP_LOCAL_SINGLE(name) \ { .lock = __RAW_SPIN_LOCK_UNLOCKED(name.lock), \ } int prop_local_init_single(struct prop_local_single *pl); void prop_local_destroy_single(struct prop_local_single *pl); void __prop_inc_single(struct prop_descriptor *pd, struct prop_local_single *pl); void prop_fraction_single(struct prop_descriptor *pd, struct prop_local_single *pl, long *numerator, long *denominator); static inline void prop_inc_single(struct prop_descriptor *pd, struct prop_local_single *pl) { unsigned long flags; local_irq_save(flags); __prop_inc_single(pd, pl); local_irq_restore(flags); } #endif /* _LINUX_PROPORTIONS_H */ -3.3.y'>linux-3.3.y Hosts the 0x221E linux distro kernel.Ubuntu
summaryrefslogtreecommitdiff
AgeCommit message (Expand)Author
2016-05-23drm/imx: Match imx-ipuv3-crtc components using device node in platform dataPhilipp Zabel
2016-05-05gpu: ipu-v3: Fix imx-ipuv3-crtc module autoloadingPhilipp Zabel
2016-03-31gpu: ipu-v3: ipu-dmfc: Rename ipu_dmfc_init_channel to ipu_dmfc_config_wait4eotLiu Ying
2016-03-31gpu: ipu-v3: ipu-dmfc: Make function ipu_dmfc_init_channel() return voidLiu Ying
2016-03-31gpu: ipu-v3: ipu-dmfc: Protect function ipu_dmfc_init_channel() with mutexLiu Ying
2016-03-31gpu: ipu-cpmem: modify ipu_cpmem_set_yuv_planar_full for better controlPhilipp Zabel
2016-03-14Merge drm-fixes into drm-next.Dave Airlie
2016-03-01gpu: ipu-v3: ipu-dc: Simplify display controller microcode setupPhilipp Zabel
2016-02-10gpu: ipu-v3: Reset IPU before activating IRQDavid Jander
2016-02-10gpu: ipu-v3: Do not bail out on missing optional port nodesPhilipp Zabel
2016-01-11Merge branch 'patchwork' into v4l_for_linusMauro Carvalho Chehab
2015-12-04drm, ipu-v3: use https://linuxtv.org for LinuxTV URLMauro Carvalho Chehab
2015-11-24gpu: ipu-v3: Assign of_node of child platform devices to corresponding portsPhilipp Zabel
2015-11-24gpu: ipu-v3: Remove reg_offset fieldPhilipp Zabel
2015-11-05Merge tag 'imx-drm-next-2015-10-30' of git://git.pengutronix.de/git/pza/linux...Dave Airlie
2015-10-30gpu: ipu-v3: fix div_ratio typeAndrzej Hajda
2015-10-30gpu: ipu-v3: csi: add support for 8 bpp grayscale sensors.Philippe De Muyter
2015-10-30gpu: ipu-v3: add support for ARGB4444 16-bit color formatLucas Stach
2015-10-30gpu: ipu-v3: add support for RGBX8888 and RGBA8888 pixel formatsPhilipp Zabel
2015-10-30gpu: ipu-v3: add support for 15-bit RGB with 1-bit alpha formatsPhilipp Zabel
2015-10-30gpu: ipu-v3: ipu-csi: bool test doesn't need a comparison to falseFabio Estevam
2015-10-06gpu: imx: fix support for interlaced modesRussell King
2015-10-06gpu: imx: simplify sync polarity settingRussell King
2015-09-16gpu/drm: Kill off set_irq_flags usageRob Herring
2015-09-16genirq: Remove irq argument from irq flow handlersThomas Gleixner
2015-09-04Merge tag 'dmaengine-4.3-rc1' of git://git.infradead.org/users/vkoul/slave-dmaLinus Torvalds
2015-07-16dmaengine: ipu: Use irq_desc_get_xxx() to avoid redundant lookup of irq_descJiang Liu
2015-07-10GPU: ipu: fix lockup caused by pending chained interruptsRussell King
2015-06-18GPU: ipu: Fix race in installing IPU chained IRQ handlerRussell King
2015-04-13Merge tag 'imx-drm-next-2015-03-31' of git://git.pengutronix.de/git/pza/linux...Dave Airlie
2015-03-31gpu: ipu-v3: turns out the IPU can only downsize 4:1Philipp Zabel
2015-03-31gpu: ipu-v3: limit pixel clock divider to 8-bitsPhilipp Zabel
2015-03-31drm/imx: consolidate bus format variable namesPhilipp Zabel
2015-03-31drm/imx: switch to use media bus formatsPhilipp Zabel
2015-02-23gpu: ipu-v3: do not divide by zero if the pixel clock is too largePhilipp Zabel
2015-02-11Merge tag 'imx-drm-fixes-2015-01-28' of git://git.pengutronix.de/git/pza/linu...Dave Airlie
2015-01-27gpu: ipu-v3: Fix IC control register offsetPhilipp Zabel
2015-01-27gpu: ipu-v3: wait_for_completion_timeout does not return negative statusNicholas Mc Guire
2015-01-07gpu: ipu-di: Switch to DIV_ROUND_CLOSEST for DI clock divider calcSteve Longerbeam
2015-01-07gpu: ipu-v3: Use videomode in struct ipu_di_signal_cfgSteve Longerbeam
2015-01-07gpu: ipu-di: remove some non-functional codeSteve Longerbeam
2015-01-07gpu: ipu-di: Add ipu_di_adjust_videomode()Jiada Wang