2 * Linux on zSeries Channel Measurement Facility support
4 * Copyright IBM Corp. 2000, 2006
6 * Authors: Arnd Bergmann <arndb@de.ibm.com>
7 * Cornelia Huck <cornelia.huck@de.ibm.com>
9 * original idea from Natarajan Krishnaswami <nkrishna@us.ibm.com>
11 * This program is free software; you can redistribute it and/or modify
12 * it under the terms of the GNU General Public License as published by
13 * the Free Software Foundation; either version 2, or (at your option)
16 * This program is distributed in the hope that it will be useful,
17 * but WITHOUT ANY WARRANTY; without even the implied warranty of
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 * GNU General Public License for more details.
21 * You should have received a copy of the GNU General Public License
22 * along with this program; if not, write to the Free Software
23 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
26 #define KMSG_COMPONENT "cio"
27 #define pr_fmt(fmt) KMSG_COMPONENT ": " fmt
29 #include <linux/bootmem.h>
30 #include <linux/device.h>
31 #include <linux/init.h>
32 #include <linux/list.h>
33 #include <linux/module.h>
34 #include <linux/moduleparam.h>
35 #include <linux/slab.h>
36 #include <linux/timex.h> /* get_tod_clock() */
38 #include <asm/ccwdev.h>
41 #include <asm/div64.h>
50 * parameter to enable cmf during boot, possible uses are:
51 * "s390cmf" -- enable cmf and allocate 2 MB of ram so measuring can be
52 * used on any subchannel
53 * "s390cmf=<num>" -- enable cmf and allocate enough memory to measure
54 * <num> subchannel, where <num> is an integer
55 * between 1 and 65535, default is 1024
57 #define ARGSTRING "s390cmf"
59 /* indices for READCMB */
61 /* basic and exended format: */
64 cmb_device_connect_time
,
65 cmb_function_pending_time
,
66 cmb_device_disconnect_time
,
67 cmb_control_unit_queuing_time
,
68 cmb_device_active_only_time
,
69 /* extended format only: */
71 cmb_initial_command_response_time
,
75 * enum cmb_format - types of supported measurement block formats
77 * @CMF_BASIC: traditional channel measurement blocks supported
78 * by all machines that we run on
79 * @CMF_EXTENDED: improved format that was introduced with the z990
81 * @CMF_AUTODETECT: default: use extended format when running on a machine
82 * supporting extended format, otherwise fall back to
92 * format - actual format for all measurement blocks
94 * The format module parameter can be set to a value of 0 (zero)
95 * or 1, indicating basic or extended format as described for
98 static int format
= CMF_AUTODETECT
;
99 module_param(format
, bint
, 0444);
102 * struct cmb_operations - functions to use depending on cmb_format
104 * Most of these functions operate on a struct ccw_device. There is only
105 * one instance of struct cmb_operations because the format of the measurement
106 * data is guaranteed to be the same for every ccw_device.
108 * @alloc: allocate memory for a channel measurement block,
109 * either with the help of a special pool or with kmalloc
110 * @free: free memory allocated with @alloc
111 * @set: enable or disable measurement
112 * @read: read a measurement entry at an index
113 * @readall: read a measurement block in a common format
114 * @reset: clear the data in the associated measurement block and
115 * reset its time stamp
117 struct cmb_operations
{
118 int (*alloc
) (struct ccw_device
*);
119 void (*free
) (struct ccw_device
*);
120 int (*set
) (struct ccw_device
*, u32
);
121 u64 (*read
) (struct ccw_device
*, int);
122 int (*readall
)(struct ccw_device
*, struct cmbdata
*);
123 void (*reset
) (struct ccw_device
*);
125 struct attribute_group
*attr_group
;
127 static struct cmb_operations
*cmbops
;
130 void *hw_block
; /* Pointer to block updated by hardware */
131 void *last_block
; /* Last changed block copied from hardware block */
132 int size
; /* Size of hw_block and last_block */
133 unsigned long long last_update
; /* when last_block was updated */
137 * Our user interface is designed in terms of nanoseconds,
138 * while the hardware measures total times in its own
141 static inline u64
time_to_nsec(u32 value
)
143 return ((u64
)value
) * 128000ull;
147 * Users are usually interested in average times,
148 * not accumulated time.
149 * This also helps us with atomicity problems
150 * when reading sinlge values.
152 static inline u64
time_to_avg_nsec(u32 value
, u32 count
)
156 /* no samples yet, avoid division by 0 */
160 /* value comes in units of 128 µsec */
161 ret
= time_to_nsec(value
);
168 * Activate or deactivate the channel monitor. When area is NULL,
169 * the monitor is deactivated. The channel monitor needs to
170 * be active in order to measure subchannels, which also need
173 static inline void cmf_activate(void *area
, unsigned int onoff
)
175 register void * __gpr2
asm("2");
176 register long __gpr1
asm("1");
179 __gpr1
= onoff
? 2 : 0;
180 /* activate channel measurement */
181 asm("schm" : : "d" (__gpr2
), "d" (__gpr1
) );
184 static int set_schib(struct ccw_device
*cdev
, u32 mme
, int mbfc
,
185 unsigned long address
)
187 struct subchannel
*sch
= to_subchannel(cdev
->dev
.parent
);
190 sch
->config
.mme
= mme
;
191 sch
->config
.mbfc
= mbfc
;
192 /* address can be either a block address or a block index */
194 sch
->config
.mba
= address
;
196 sch
->config
.mbi
= address
;
198 ret
= cio_commit_config(sch
);
199 if (!mme
&& ret
== -ENODEV
) {
201 * The task was to disable measurement block updates but
202 * the subchannel is already gone. Report success.
209 struct set_schib_struct
{
212 unsigned long address
;
213 wait_queue_head_t wait
;
218 static void cmf_set_schib_release(struct kref
*kref
)
220 struct set_schib_struct
*set_data
;
222 set_data
= container_of(kref
, struct set_schib_struct
, kref
);
226 #define CMF_PENDING 1
228 static int set_schib_wait(struct ccw_device
*cdev
, u32 mme
,
229 int mbfc
, unsigned long address
)
231 struct set_schib_struct
*set_data
;
234 spin_lock_irq(cdev
->ccwlock
);
235 if (!cdev
->private->cmb
) {
239 set_data
= kzalloc(sizeof(struct set_schib_struct
), GFP_ATOMIC
);
244 init_waitqueue_head(&set_data
->wait
);
245 kref_init(&set_data
->kref
);
247 set_data
->mbfc
= mbfc
;
248 set_data
->address
= address
;
250 ret
= set_schib(cdev
, mme
, mbfc
, address
);
254 if (cdev
->private->state
!= DEV_STATE_ONLINE
) {
255 /* if the device is not online, don't even try again */
260 cdev
->private->state
= DEV_STATE_CMFCHANGE
;
261 set_data
->ret
= CMF_PENDING
;
262 cdev
->private->cmb_wait
= set_data
;
264 spin_unlock_irq(cdev
->ccwlock
);
265 if (wait_event_interruptible(set_data
->wait
,
266 set_data
->ret
!= CMF_PENDING
)) {
267 spin_lock_irq(cdev
->ccwlock
);
268 if (set_data
->ret
== CMF_PENDING
) {
269 set_data
->ret
= -ERESTARTSYS
;
270 if (cdev
->private->state
== DEV_STATE_CMFCHANGE
)
271 cdev
->private->state
= DEV_STATE_ONLINE
;
273 spin_unlock_irq(cdev
->ccwlock
);
275 spin_lock_irq(cdev
->ccwlock
);
276 cdev
->private->cmb_wait
= NULL
;
279 kref_put(&set_data
->kref
, cmf_set_schib_release
);
281 spin_unlock_irq(cdev
->ccwlock
);
285 void retry_set_schib(struct ccw_device
*cdev
)
287 struct set_schib_struct
*set_data
;
289 set_data
= cdev
->private->cmb_wait
;
294 kref_get(&set_data
->kref
);
295 set_data
->ret
= set_schib(cdev
, set_data
->mme
, set_data
->mbfc
,
297 wake_up(&set_data
->wait
);
298 kref_put(&set_data
->kref
, cmf_set_schib_release
);
301 static int cmf_copy_block(struct ccw_device
*cdev
)
303 struct subchannel
*sch
;
306 struct cmb_data
*cmb_data
;
308 sch
= to_subchannel(cdev
->dev
.parent
);
310 if (cio_update_schib(sch
))
313 if (scsw_fctl(&sch
->schib
.scsw
) & SCSW_FCTL_START_FUNC
) {
314 /* Don't copy if a start function is in progress. */
315 if ((!(scsw_actl(&sch
->schib
.scsw
) & SCSW_ACTL_SUSPENDED
)) &&
316 (scsw_actl(&sch
->schib
.scsw
) &
317 (SCSW_ACTL_DEVACT
| SCSW_ACTL_SCHACT
)) &&
318 (!(scsw_stctl(&sch
->schib
.scsw
) & SCSW_STCTL_SEC_STATUS
)))
321 cmb_data
= cdev
->private->cmb
;
322 hw_block
= cmb_data
->hw_block
;
323 if (!memcmp(cmb_data
->last_block
, hw_block
, cmb_data
->size
))
324 /* No need to copy. */
326 reference_buf
= kzalloc(cmb_data
->size
, GFP_ATOMIC
);
329 /* Ensure consistency of block copied from hardware. */
331 memcpy(cmb_data
->last_block
, hw_block
, cmb_data
->size
);
332 memcpy(reference_buf
, hw_block
, cmb_data
->size
);
333 } while (memcmp(cmb_data
->last_block
, reference_buf
, cmb_data
->size
));
334 cmb_data
->last_update
= get_tod_clock();
335 kfree(reference_buf
);
339 struct copy_block_struct
{
340 wait_queue_head_t wait
;
345 static void cmf_copy_block_release(struct kref
*kref
)
347 struct copy_block_struct
*copy_block
;
349 copy_block
= container_of(kref
, struct copy_block_struct
, kref
);
353 static int cmf_cmb_copy_wait(struct ccw_device
*cdev
)
355 struct copy_block_struct
*copy_block
;
359 spin_lock_irqsave(cdev
->ccwlock
, flags
);
360 if (!cdev
->private->cmb
) {
364 copy_block
= kzalloc(sizeof(struct copy_block_struct
), GFP_ATOMIC
);
369 init_waitqueue_head(©_block
->wait
);
370 kref_init(©_block
->kref
);
372 ret
= cmf_copy_block(cdev
);
376 if (cdev
->private->state
!= DEV_STATE_ONLINE
) {
381 cdev
->private->state
= DEV_STATE_CMFUPDATE
;
382 copy_block
->ret
= CMF_PENDING
;
383 cdev
->private->cmb_wait
= copy_block
;
385 spin_unlock_irqrestore(cdev
->ccwlock
, flags
);
386 if (wait_event_interruptible(copy_block
->wait
,
387 copy_block
->ret
!= CMF_PENDING
)) {
388 spin_lock_irqsave(cdev
->ccwlock
, flags
);
389 if (copy_block
->ret
== CMF_PENDING
) {
390 copy_block
->ret
= -ERESTARTSYS
;
391 if (cdev
->private->state
== DEV_STATE_CMFUPDATE
)
392 cdev
->private->state
= DEV_STATE_ONLINE
;
394 spin_unlock_irqrestore(cdev
->ccwlock
, flags
);
396 spin_lock_irqsave(cdev
->ccwlock
, flags
);
397 cdev
->private->cmb_wait
= NULL
;
398 ret
= copy_block
->ret
;
400 kref_put(©_block
->kref
, cmf_copy_block_release
);
402 spin_unlock_irqrestore(cdev
->ccwlock
, flags
);
406 void cmf_retry_copy_block(struct ccw_device
*cdev
)
408 struct copy_block_struct
*copy_block
;
410 copy_block
= cdev
->private->cmb_wait
;
415 kref_get(©_block
->kref
);
416 copy_block
->ret
= cmf_copy_block(cdev
);
417 wake_up(©_block
->wait
);
418 kref_put(©_block
->kref
, cmf_copy_block_release
);
421 static void cmf_generic_reset(struct ccw_device
*cdev
)
423 struct cmb_data
*cmb_data
;
425 spin_lock_irq(cdev
->ccwlock
);
426 cmb_data
= cdev
->private->cmb
;
428 memset(cmb_data
->last_block
, 0, cmb_data
->size
);
430 * Need to reset hw block as well to make the hardware start
433 memset(cmb_data
->hw_block
, 0, cmb_data
->size
);
434 cmb_data
->last_update
= 0;
436 cdev
->private->cmb_start_time
= get_tod_clock();
437 spin_unlock_irq(cdev
->ccwlock
);
441 * struct cmb_area - container for global cmb data
443 * @mem: pointer to CMBs (only in basic measurement mode)
444 * @list: contains a linked list of all subchannels
445 * @num_channels: number of channels to be measured
446 * @lock: protect concurrent access to @mem and @list
450 struct list_head list
;
455 static struct cmb_area cmb_area
= {
456 .lock
= __SPIN_LOCK_UNLOCKED(cmb_area
.lock
),
457 .list
= LIST_HEAD_INIT(cmb_area
.list
),
458 .num_channels
= 1024,
461 /* ****** old style CMB handling ********/
464 * Basic channel measurement blocks are allocated in one contiguous
465 * block of memory, which can not be moved as long as any channel
466 * is active. Therefore, a maximum number of subchannels needs to
467 * be defined somewhere. This is a module parameter, defaulting to
468 * a reasonable value of 1024, or 32 kb of memory.
469 * Current kernels don't allow kmalloc with more than 128kb, so the
473 module_param_named(maxchannels
, cmb_area
.num_channels
, uint
, 0444);
476 * struct cmb - basic channel measurement block
477 * @ssch_rsch_count: number of ssch and rsch
478 * @sample_count: number of samples
479 * @device_connect_time: time of device connect
480 * @function_pending_time: time of function pending
481 * @device_disconnect_time: time of device disconnect
482 * @control_unit_queuing_time: time of control unit queuing
483 * @device_active_only_time: time of device active only
484 * @reserved: unused in basic measurement mode
486 * The measurement block as used by the hardware. The fields are described
487 * further in z/Architecture Principles of Operation, chapter 17.
489 * The cmb area made up from these blocks must be a contiguous array and may
490 * not be reallocated or freed.
491 * Only one cmb area can be present in the system.
496 u32 device_connect_time
;
497 u32 function_pending_time
;
498 u32 device_disconnect_time
;
499 u32 control_unit_queuing_time
;
500 u32 device_active_only_time
;
505 * Insert a single device into the cmb_area list.
506 * Called with cmb_area.lock held from alloc_cmb.
508 static int alloc_cmb_single(struct ccw_device
*cdev
,
509 struct cmb_data
*cmb_data
)
512 struct ccw_device_private
*node
;
515 spin_lock_irq(cdev
->ccwlock
);
516 if (!list_empty(&cdev
->private->cmb_list
)) {
522 * Find first unused cmb in cmb_area.mem.
523 * This is a little tricky: cmb_area.list
524 * remains sorted by ->cmb->hw_data pointers.
527 list_for_each_entry(node
, &cmb_area
.list
, cmb_list
) {
528 struct cmb_data
*data
;
530 if ((struct cmb
*)data
->hw_block
> cmb
)
534 if (cmb
- cmb_area
.mem
>= cmb_area
.num_channels
) {
540 list_add_tail(&cdev
->private->cmb_list
, &node
->cmb_list
);
541 cmb_data
->hw_block
= cmb
;
542 cdev
->private->cmb
= cmb_data
;
545 spin_unlock_irq(cdev
->ccwlock
);
549 static int alloc_cmb(struct ccw_device
*cdev
)
554 struct cmb_data
*cmb_data
;
556 /* Allocate private cmb_data. */
557 cmb_data
= kzalloc(sizeof(struct cmb_data
), GFP_KERNEL
);
561 cmb_data
->last_block
= kzalloc(sizeof(struct cmb
), GFP_KERNEL
);
562 if (!cmb_data
->last_block
) {
566 cmb_data
->size
= sizeof(struct cmb
);
567 spin_lock(&cmb_area
.lock
);
570 /* there is no user yet, so we need a new area */
571 size
= sizeof(struct cmb
) * cmb_area
.num_channels
;
572 WARN_ON(!list_empty(&cmb_area
.list
));
574 spin_unlock(&cmb_area
.lock
);
575 mem
= (void*)__get_free_pages(GFP_KERNEL
| GFP_DMA
,
577 spin_lock(&cmb_area
.lock
);
580 /* ok, another thread was faster */
581 free_pages((unsigned long)mem
, get_order(size
));
588 memset(mem
, 0, size
);
590 cmf_activate(cmb_area
.mem
, 1);
594 /* do the actual allocation */
595 ret
= alloc_cmb_single(cdev
, cmb_data
);
597 spin_unlock(&cmb_area
.lock
);
599 kfree(cmb_data
->last_block
);
605 static void free_cmb(struct ccw_device
*cdev
)
607 struct ccw_device_private
*priv
;
608 struct cmb_data
*cmb_data
;
610 spin_lock(&cmb_area
.lock
);
611 spin_lock_irq(cdev
->ccwlock
);
613 priv
= cdev
->private;
614 cmb_data
= priv
->cmb
;
617 kfree(cmb_data
->last_block
);
619 list_del_init(&priv
->cmb_list
);
621 if (list_empty(&cmb_area
.list
)) {
623 size
= sizeof(struct cmb
) * cmb_area
.num_channels
;
624 cmf_activate(NULL
, 0);
625 free_pages((unsigned long)cmb_area
.mem
, get_order(size
));
628 spin_unlock_irq(cdev
->ccwlock
);
629 spin_unlock(&cmb_area
.lock
);
632 static int set_cmb(struct ccw_device
*cdev
, u32 mme
)
635 struct cmb_data
*cmb_data
;
638 spin_lock_irqsave(cdev
->ccwlock
, flags
);
639 if (!cdev
->private->cmb
) {
640 spin_unlock_irqrestore(cdev
->ccwlock
, flags
);
643 cmb_data
= cdev
->private->cmb
;
644 offset
= mme
? (struct cmb
*)cmb_data
->hw_block
- cmb_area
.mem
: 0;
645 spin_unlock_irqrestore(cdev
->ccwlock
, flags
);
647 return set_schib_wait(cdev
, mme
, 0, offset
);
650 static u64
read_cmb(struct ccw_device
*cdev
, int index
)
657 ret
= cmf_cmb_copy_wait(cdev
);
661 spin_lock_irqsave(cdev
->ccwlock
, flags
);
662 if (!cdev
->private->cmb
) {
666 cmb
= ((struct cmb_data
*)cdev
->private->cmb
)->last_block
;
669 case cmb_ssch_rsch_count
:
670 ret
= cmb
->ssch_rsch_count
;
672 case cmb_sample_count
:
673 ret
= cmb
->sample_count
;
675 case cmb_device_connect_time
:
676 val
= cmb
->device_connect_time
;
678 case cmb_function_pending_time
:
679 val
= cmb
->function_pending_time
;
681 case cmb_device_disconnect_time
:
682 val
= cmb
->device_disconnect_time
;
684 case cmb_control_unit_queuing_time
:
685 val
= cmb
->control_unit_queuing_time
;
687 case cmb_device_active_only_time
:
688 val
= cmb
->device_active_only_time
;
694 ret
= time_to_avg_nsec(val
, cmb
->sample_count
);
696 spin_unlock_irqrestore(cdev
->ccwlock
, flags
);
700 static int readall_cmb(struct ccw_device
*cdev
, struct cmbdata
*data
)
703 struct cmb_data
*cmb_data
;
708 ret
= cmf_cmb_copy_wait(cdev
);
711 spin_lock_irqsave(cdev
->ccwlock
, flags
);
712 cmb_data
= cdev
->private->cmb
;
717 if (cmb_data
->last_update
== 0) {
721 cmb
= cmb_data
->last_block
;
722 time
= cmb_data
->last_update
- cdev
->private->cmb_start_time
;
724 memset(data
, 0, sizeof(struct cmbdata
));
726 /* we only know values before device_busy_time */
727 data
->size
= offsetof(struct cmbdata
, device_busy_time
);
729 /* convert to nanoseconds */
730 data
->elapsed_time
= (time
* 1000) >> 12;
732 /* copy data to new structure */
733 data
->ssch_rsch_count
= cmb
->ssch_rsch_count
;
734 data
->sample_count
= cmb
->sample_count
;
736 /* time fields are converted to nanoseconds while copying */
737 data
->device_connect_time
= time_to_nsec(cmb
->device_connect_time
);
738 data
->function_pending_time
= time_to_nsec(cmb
->function_pending_time
);
739 data
->device_disconnect_time
=
740 time_to_nsec(cmb
->device_disconnect_time
);
741 data
->control_unit_queuing_time
742 = time_to_nsec(cmb
->control_unit_queuing_time
);
743 data
->device_active_only_time
744 = time_to_nsec(cmb
->device_active_only_time
);
747 spin_unlock_irqrestore(cdev
->ccwlock
, flags
);
751 static void reset_cmb(struct ccw_device
*cdev
)
753 cmf_generic_reset(cdev
);
756 static struct attribute_group cmf_attr_group
;
758 static struct cmb_operations cmbops_basic
= {
763 .readall
= readall_cmb
,
765 .attr_group
= &cmf_attr_group
,
768 /* ******** extended cmb handling ********/
771 * struct cmbe - extended channel measurement block
772 * @ssch_rsch_count: number of ssch and rsch
773 * @sample_count: number of samples
774 * @device_connect_time: time of device connect
775 * @function_pending_time: time of function pending
776 * @device_disconnect_time: time of device disconnect
777 * @control_unit_queuing_time: time of control unit queuing
778 * @device_active_only_time: time of device active only
779 * @device_busy_time: time of device busy
780 * @initial_command_response_time: initial command response time
783 * The measurement block as used by the hardware. May be in any 64 bit physical
785 * The fields are described further in z/Architecture Principles of Operation,
786 * third edition, chapter 17.
791 u32 device_connect_time
;
792 u32 function_pending_time
;
793 u32 device_disconnect_time
;
794 u32 control_unit_queuing_time
;
795 u32 device_active_only_time
;
796 u32 device_busy_time
;
797 u32 initial_command_response_time
;
799 } __packed
__aligned(64);
801 static struct kmem_cache
*cmbe_cache
;
803 static int alloc_cmbe(struct ccw_device
*cdev
)
805 struct cmb_data
*cmb_data
;
809 cmbe
= kmem_cache_zalloc(cmbe_cache
, GFP_KERNEL
);
813 cmb_data
= kzalloc(sizeof(*cmb_data
), GFP_KERNEL
);
817 cmb_data
->last_block
= kzalloc(sizeof(struct cmbe
), GFP_KERNEL
);
818 if (!cmb_data
->last_block
)
821 cmb_data
->size
= sizeof(*cmbe
);
822 cmb_data
->hw_block
= cmbe
;
824 spin_lock(&cmb_area
.lock
);
825 spin_lock_irq(cdev
->ccwlock
);
826 if (cdev
->private->cmb
)
829 cdev
->private->cmb
= cmb_data
;
831 /* activate global measurement if this is the first channel */
832 if (list_empty(&cmb_area
.list
))
833 cmf_activate(NULL
, 1);
834 list_add_tail(&cdev
->private->cmb_list
, &cmb_area
.list
);
836 spin_unlock_irq(cdev
->ccwlock
);
837 spin_unlock(&cmb_area
.lock
);
841 spin_unlock_irq(cdev
->ccwlock
);
842 spin_unlock(&cmb_area
.lock
);
846 kfree(cmb_data
->last_block
);
848 kmem_cache_free(cmbe_cache
, cmbe
);
853 static void free_cmbe(struct ccw_device
*cdev
)
855 struct cmb_data
*cmb_data
;
857 spin_lock(&cmb_area
.lock
);
858 spin_lock_irq(cdev
->ccwlock
);
859 cmb_data
= cdev
->private->cmb
;
860 cdev
->private->cmb
= NULL
;
862 kfree(cmb_data
->last_block
);
863 kmem_cache_free(cmbe_cache
, cmb_data
->hw_block
);
867 /* deactivate global measurement if this is the last channel */
868 list_del_init(&cdev
->private->cmb_list
);
869 if (list_empty(&cmb_area
.list
))
870 cmf_activate(NULL
, 0);
871 spin_unlock_irq(cdev
->ccwlock
);
872 spin_unlock(&cmb_area
.lock
);
875 static int set_cmbe(struct ccw_device
*cdev
, u32 mme
)
878 struct cmb_data
*cmb_data
;
881 spin_lock_irqsave(cdev
->ccwlock
, flags
);
882 if (!cdev
->private->cmb
) {
883 spin_unlock_irqrestore(cdev
->ccwlock
, flags
);
886 cmb_data
= cdev
->private->cmb
;
887 mba
= mme
? (unsigned long) cmb_data
->hw_block
: 0;
888 spin_unlock_irqrestore(cdev
->ccwlock
, flags
);
890 return set_schib_wait(cdev
, mme
, 1, mba
);
894 static u64
read_cmbe(struct ccw_device
*cdev
, int index
)
897 struct cmb_data
*cmb_data
;
902 ret
= cmf_cmb_copy_wait(cdev
);
906 spin_lock_irqsave(cdev
->ccwlock
, flags
);
907 cmb_data
= cdev
->private->cmb
;
912 cmb
= cmb_data
->last_block
;
915 case cmb_ssch_rsch_count
:
916 ret
= cmb
->ssch_rsch_count
;
918 case cmb_sample_count
:
919 ret
= cmb
->sample_count
;
921 case cmb_device_connect_time
:
922 val
= cmb
->device_connect_time
;
924 case cmb_function_pending_time
:
925 val
= cmb
->function_pending_time
;
927 case cmb_device_disconnect_time
:
928 val
= cmb
->device_disconnect_time
;
930 case cmb_control_unit_queuing_time
:
931 val
= cmb
->control_unit_queuing_time
;
933 case cmb_device_active_only_time
:
934 val
= cmb
->device_active_only_time
;
936 case cmb_device_busy_time
:
937 val
= cmb
->device_busy_time
;
939 case cmb_initial_command_response_time
:
940 val
= cmb
->initial_command_response_time
;
946 ret
= time_to_avg_nsec(val
, cmb
->sample_count
);
948 spin_unlock_irqrestore(cdev
->ccwlock
, flags
);
952 static int readall_cmbe(struct ccw_device
*cdev
, struct cmbdata
*data
)
955 struct cmb_data
*cmb_data
;
960 ret
= cmf_cmb_copy_wait(cdev
);
963 spin_lock_irqsave(cdev
->ccwlock
, flags
);
964 cmb_data
= cdev
->private->cmb
;
969 if (cmb_data
->last_update
== 0) {
973 time
= cmb_data
->last_update
- cdev
->private->cmb_start_time
;
975 memset (data
, 0, sizeof(struct cmbdata
));
977 /* we only know values before device_busy_time */
978 data
->size
= offsetof(struct cmbdata
, device_busy_time
);
980 /* conver to nanoseconds */
981 data
->elapsed_time
= (time
* 1000) >> 12;
983 cmb
= cmb_data
->last_block
;
984 /* copy data to new structure */
985 data
->ssch_rsch_count
= cmb
->ssch_rsch_count
;
986 data
->sample_count
= cmb
->sample_count
;
988 /* time fields are converted to nanoseconds while copying */
989 data
->device_connect_time
= time_to_nsec(cmb
->device_connect_time
);
990 data
->function_pending_time
= time_to_nsec(cmb
->function_pending_time
);
991 data
->device_disconnect_time
=
992 time_to_nsec(cmb
->device_disconnect_time
);
993 data
->control_unit_queuing_time
994 = time_to_nsec(cmb
->control_unit_queuing_time
);
995 data
->device_active_only_time
996 = time_to_nsec(cmb
->device_active_only_time
);
997 data
->device_busy_time
= time_to_nsec(cmb
->device_busy_time
);
998 data
->initial_command_response_time
999 = time_to_nsec(cmb
->initial_command_response_time
);
1003 spin_unlock_irqrestore(cdev
->ccwlock
, flags
);
1007 static void reset_cmbe(struct ccw_device
*cdev
)
1009 cmf_generic_reset(cdev
);
1012 static struct attribute_group cmf_attr_group_ext
;
1014 static struct cmb_operations cmbops_extended
= {
1015 .alloc
= alloc_cmbe
,
1019 .readall
= readall_cmbe
,
1020 .reset
= reset_cmbe
,
1021 .attr_group
= &cmf_attr_group_ext
,
1024 static ssize_t
cmb_show_attr(struct device
*dev
, char *buf
, enum cmb_index idx
)
1026 return sprintf(buf
, "%lld\n",
1027 (unsigned long long) cmf_read(to_ccwdev(dev
), idx
));
1030 static ssize_t
cmb_show_avg_sample_interval(struct device
*dev
,
1031 struct device_attribute
*attr
,
1034 struct ccw_device
*cdev
;
1036 unsigned long count
;
1037 struct cmb_data
*cmb_data
;
1039 cdev
= to_ccwdev(dev
);
1040 count
= cmf_read(cdev
, cmb_sample_count
);
1041 spin_lock_irq(cdev
->ccwlock
);
1042 cmb_data
= cdev
->private->cmb
;
1044 interval
= cmb_data
->last_update
-
1045 cdev
->private->cmb_start_time
;
1046 interval
= (interval
* 1000) >> 12;
1050 spin_unlock_irq(cdev
->ccwlock
);
1051 return sprintf(buf
, "%ld\n", interval
);
1054 static ssize_t
cmb_show_avg_utilization(struct device
*dev
,
1055 struct device_attribute
*attr
,
1058 struct cmbdata data
;
1063 ret
= cmf_readall(to_ccwdev(dev
), &data
);
1064 if (ret
== -EAGAIN
|| ret
== -ENODEV
)
1065 /* No data (yet/currently) available to use for calculation. */
1066 return sprintf(buf
, "n/a\n");
1070 utilization
= data
.device_connect_time
+
1071 data
.function_pending_time
+
1072 data
.device_disconnect_time
;
1074 /* shift to avoid long long division */
1075 while (-1ul < (data
.elapsed_time
| utilization
)) {
1077 data
.elapsed_time
>>= 8;
1080 /* calculate value in 0.1 percent units */
1081 t
= (unsigned long) data
.elapsed_time
/ 1000;
1082 u
= (unsigned long) utilization
/ t
;
1084 return sprintf(buf
, "%02ld.%01ld%%\n", u
/ 10, u
- (u
/ 10) * 10);
1087 #define cmf_attr(name) \
1088 static ssize_t show_##name(struct device *dev, \
1089 struct device_attribute *attr, char *buf) \
1090 { return cmb_show_attr((dev), buf, cmb_##name); } \
1091 static DEVICE_ATTR(name, 0444, show_##name, NULL);
1093 #define cmf_attr_avg(name) \
1094 static ssize_t show_avg_##name(struct device *dev, \
1095 struct device_attribute *attr, char *buf) \
1096 { return cmb_show_attr((dev), buf, cmb_##name); } \
1097 static DEVICE_ATTR(avg_##name, 0444, show_avg_##name, NULL);
1099 cmf_attr(ssch_rsch_count
);
1100 cmf_attr(sample_count
);
1101 cmf_attr_avg(device_connect_time
);
1102 cmf_attr_avg(function_pending_time
);
1103 cmf_attr_avg(device_disconnect_time
);
1104 cmf_attr_avg(control_unit_queuing_time
);
1105 cmf_attr_avg(device_active_only_time
);
1106 cmf_attr_avg(device_busy_time
);
1107 cmf_attr_avg(initial_command_response_time
);
1109 static DEVICE_ATTR(avg_sample_interval
, 0444, cmb_show_avg_sample_interval
,
1111 static DEVICE_ATTR(avg_utilization
, 0444, cmb_show_avg_utilization
, NULL
);
1113 static struct attribute
*cmf_attributes
[] = {
1114 &dev_attr_avg_sample_interval
.attr
,
1115 &dev_attr_avg_utilization
.attr
,
1116 &dev_attr_ssch_rsch_count
.attr
,
1117 &dev_attr_sample_count
.attr
,
1118 &dev_attr_avg_device_connect_time
.attr
,
1119 &dev_attr_avg_function_pending_time
.attr
,
1120 &dev_attr_avg_device_disconnect_time
.attr
,
1121 &dev_attr_avg_control_unit_queuing_time
.attr
,
1122 &dev_attr_avg_device_active_only_time
.attr
,
1126 static struct attribute_group cmf_attr_group
= {
1128 .attrs
= cmf_attributes
,
1131 static struct attribute
*cmf_attributes_ext
[] = {
1132 &dev_attr_avg_sample_interval
.attr
,
1133 &dev_attr_avg_utilization
.attr
,
1134 &dev_attr_ssch_rsch_count
.attr
,
1135 &dev_attr_sample_count
.attr
,
1136 &dev_attr_avg_device_connect_time
.attr
,
1137 &dev_attr_avg_function_pending_time
.attr
,
1138 &dev_attr_avg_device_disconnect_time
.attr
,
1139 &dev_attr_avg_control_unit_queuing_time
.attr
,
1140 &dev_attr_avg_device_active_only_time
.attr
,
1141 &dev_attr_avg_device_busy_time
.attr
,
1142 &dev_attr_avg_initial_command_response_time
.attr
,
1146 static struct attribute_group cmf_attr_group_ext
= {
1148 .attrs
= cmf_attributes_ext
,
1151 static ssize_t
cmb_enable_show(struct device
*dev
,
1152 struct device_attribute
*attr
,
1155 struct ccw_device
*cdev
= to_ccwdev(dev
);
1158 spin_lock_irq(cdev
->ccwlock
);
1159 enabled
= !!cdev
->private->cmb
;
1160 spin_unlock_irq(cdev
->ccwlock
);
1162 return sprintf(buf
, "%d\n", enabled
);
1165 static ssize_t
cmb_enable_store(struct device
*dev
,
1166 struct device_attribute
*attr
, const char *buf
,
1169 struct ccw_device
*cdev
= to_ccwdev(dev
);
1173 ret
= kstrtoul(buf
, 16, &val
);
1179 ret
= disable_cmf(cdev
);
1182 ret
= enable_cmf(cdev
);
1188 return ret
? ret
: c
;
1190 DEVICE_ATTR_RW(cmb_enable
);
1192 int ccw_set_cmf(struct ccw_device
*cdev
, int enable
)
1194 return cmbops
->set(cdev
, enable
? 2 : 0);
1198 * enable_cmf() - switch on the channel measurement for a specific device
1199 * @cdev: The ccw device to be enabled
1201 * Returns %0 for success or a negative error value.
1206 int enable_cmf(struct ccw_device
*cdev
)
1210 device_lock(&cdev
->dev
);
1211 get_device(&cdev
->dev
);
1212 ret
= cmbops
->alloc(cdev
);
1215 cmbops
->reset(cdev
);
1216 ret
= sysfs_create_group(&cdev
->dev
.kobj
, cmbops
->attr_group
);
1221 ret
= cmbops
->set(cdev
, 2);
1223 sysfs_remove_group(&cdev
->dev
.kobj
, cmbops
->attr_group
);
1228 put_device(&cdev
->dev
);
1230 device_unlock(&cdev
->dev
);
1235 * __disable_cmf() - switch off the channel measurement for a specific device
1236 * @cdev: The ccw device to be disabled
1238 * Returns %0 for success or a negative error value.
1241 * non-atomic, device_lock() held.
1243 int __disable_cmf(struct ccw_device
*cdev
)
1247 ret
= cmbops
->set(cdev
, 0);
1251 sysfs_remove_group(&cdev
->dev
.kobj
, cmbops
->attr_group
);
1253 put_device(&cdev
->dev
);
1259 * disable_cmf() - switch off the channel measurement for a specific device
1260 * @cdev: The ccw device to be disabled
1262 * Returns %0 for success or a negative error value.
1267 int disable_cmf(struct ccw_device
*cdev
)
1271 device_lock(&cdev
->dev
);
1272 ret
= __disable_cmf(cdev
);
1273 device_unlock(&cdev
->dev
);
1279 * cmf_read() - read one value from the current channel measurement block
1280 * @cdev: the channel to be read
1281 * @index: the index of the value to be read
1283 * Returns the value read or %0 if the value cannot be read.
1288 u64
cmf_read(struct ccw_device
*cdev
, int index
)
1290 return cmbops
->read(cdev
, index
);
1294 * cmf_readall() - read the current channel measurement block
1295 * @cdev: the channel to be read
1296 * @data: a pointer to a data block that will be filled
1298 * Returns %0 on success, a negative error value otherwise.
1303 int cmf_readall(struct ccw_device
*cdev
, struct cmbdata
*data
)
1305 return cmbops
->readall(cdev
, data
);
1308 /* Reenable cmf when a disconnected device becomes available again. */
1309 int cmf_reenable(struct ccw_device
*cdev
)
1311 cmbops
->reset(cdev
);
1312 return cmbops
->set(cdev
, 2);
1316 * cmf_reactivate() - reactivate measurement block updates
1318 * Use this during resume from hibernate.
1320 void cmf_reactivate(void)
1322 spin_lock(&cmb_area
.lock
);
1323 if (!list_empty(&cmb_area
.list
))
1324 cmf_activate(cmb_area
.mem
, 1);
1325 spin_unlock(&cmb_area
.lock
);
1328 static int __init
init_cmbe(void)
1330 cmbe_cache
= kmem_cache_create("cmbe_cache", sizeof(struct cmbe
),
1331 __alignof__(struct cmbe
), 0, NULL
);
1333 return cmbe_cache
? 0 : -ENOMEM
;
1336 static int __init
init_cmf(void)
1338 char *format_string
;
1339 char *detect_string
;
1343 * If the user did not give a parameter, see if we are running on a
1344 * machine supporting extended measurement blocks, otherwise fall back
1347 if (format
== CMF_AUTODETECT
) {
1348 if (!css_general_characteristics
.ext_mb
) {
1351 format
= CMF_EXTENDED
;
1353 detect_string
= "autodetected";
1355 detect_string
= "parameter";
1360 format_string
= "basic";
1361 cmbops
= &cmbops_basic
;
1364 format_string
= "extended";
1365 cmbops
= &cmbops_extended
;
1374 pr_info("Channel measurement facility initialized using format "
1375 "%s (mode %s)\n", format_string
, detect_string
);
1378 module_init(init_cmf
);
1381 MODULE_AUTHOR("Arnd Bergmann <arndb@de.ibm.com>");
1382 MODULE_LICENSE("GPL");
1383 MODULE_DESCRIPTION("channel measurement facility base driver\n"
1384 "Copyright IBM Corp. 2003\n");
1386 EXPORT_SYMBOL_GPL(enable_cmf
);
1387 EXPORT_SYMBOL_GPL(disable_cmf
);
1388 EXPORT_SYMBOL_GPL(cmf_read
);
1389 EXPORT_SYMBOL_GPL(cmf_readall
);