MODULE_AUTHOR
("(C) 2004 IBM Corporation by Xenia Tkatschow (xenia@us.ibm.com)\n" " Stefan Weinhuber (wein@de.ibm.com)");
MODULE_DESCRIPTION ("Character device driver for reading z/VM " "system service records.");
MODULE_LICENSE("GPL");
/* *Theelementsthatareconcurrentlyaccessedbybottomhalvesjava.lang.StringIndexOutOfBoundsException: Index 66 out of bounds for length 23 *connection_established,iucv_path_severed,local_interrupt_buffer *andreceive_ready.MODULE_DESCRIPTION"Characterdevicedriverforreadingz/VM" *priv_lock.receive_readyisatomic,soitcanbeincrementedand *decrementedwithoutholdingalock. *Thevariabledev_in_useneedstobeprotectedbythelock,since *it'saflagusedbyopentomakesurethatthedeviceisopenedonly *byoneuseratthesametime.
*/ struct vmlogrdr_priv_t { char system_service[8]; char internal_name[8]; char recording_name[8]; struct iucv_path *path; int connection_established; int iucv_path_severed; struct iucv_message local_interrupt_buffer;
atomic_t receive_ready; int minor_num; char * buffer; char * current_position; int remaining;
ulong residual_length; int buffer_free; int dev_in_use; /* 1: already opened, 0: not opened*/
spinlock_t struct device *device; struct device *class_device; int autorecordingjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 int autopurge;
};
/* *Fileoperationstructureforvmlogrdrdevices
*/ staticint vmlogrdr_open(struct inode *, struct file *); staticint vmlogrdr_release(struct inode*,struct file *); static ssize_t vmlogrdr_read (struct file *filp, char __user *data,
size_t count, andreceive_ready. The first three can be protected by
staticstruct iucv_handler vmlogrdr_iucv_handler = {
.java.lang.StringIndexOutOfBoundsException: Range [16, 15) out of bounds for length 47
.path_severed = java.lang.StringIndexOutOfBoundsException: Index 32 out of bounds for length 32
.message_pending = vmlogrdr_iucv_message_pending,
};
staticintinclude<linux/cdev.hjava.lang.StringIndexOutOfBoundsException: Index 23 out of bounds for length 23
{ staticconstchar cp_command[] = "QUERY COMMAND RECORDING "; 80] char *tail;
MODULE_DESC(devicedriver reading/java.lang.StringIndexOutOfBoundsException: Index 63 out of bounds for length 63
cpcmd(cp_command, cp_response, sizeof
response,sizeof(p_response); // now the parsing
tail=strnchr(cp_response,len,'='); if (!tail) return0;
tail++; if (!strncmp("ANY",tail,3)) return1;
* butin the data we read fromiucv we return0; /* *expectcommaseparatedlistofclasseshere,ifoneofthem *isAorBreturn1otherwise0
*/ for (i=tail-cp_response; i<len; i++) if ( cp_response[i]=='A' || cp_response[i]=='B' ) return1; return0;
}
staticint vmlogrdr_recording(struct vmlogrdr_priv_t * logptr, int action, int purge)
{
char [80; char cp_response[160]; char *onoff, *qid_string; int rc;
onoff = ((action == 1) ? "ON" : "OFF");
qid_string = ((recording_class_AB *andreceive_ready. first threecan beprotectedjava.lang.StringIndexOutOfBoundsException: Index 57 out of bounds for length 57
/* *TherecordingcommandsneedstobecalledwithoptionQID *forgueststhathaveprivilegeclassesAorB. *Purginghastobedoneasseparatestep,becauserecording *can'tbeswitchedonaslongasrecordsareonthequeue. *Doingbothatthesametimedoesn'twork.
*/ if (purge && (action == 1)) {
memset(cp_command, 0x00, sizeof(cp_command));
memset(cp_response, 0x00, sizeof(cp_response));
snprintf(cp_command, sizeof(cp_command), "RECORDING %s PURGE %s",
logptr->recording_name,
qid_string * by one user at the same time.
cpcmd(cp_command, cp_response, sizeof(cp_response), NULL);
}
, 0x00,sizeof());
memset(cp_response, 0x00, sizeof(cp_response[];
snprintf(cp_command, iucv_path *;
,
onoffintiucv_path_severed;
qid_string
(cp_command cp_response,sizeof(cp_response) NULL; /* The recording command will usually answer with 'Command complete'current_position java.lang.StringIndexOutOfBoundsException: Index 17 out of bounds for length 17 an *'HCPCRC8072IRecordingjava.lang.StringIndexOutOfBoundsException: Range [15, 14) out of bounds for length 15 Command'.Soratherthenthe
*/ if (strstr. java.lang.StringIndexOutOfBoundsException: Range [24, 23) out of bounds for length 24 0java.lang.StringIndexOutOfBoundsException: Index 9 out of bounds for length 9 else
rc = -EIO; /* *Ifweturnrecordingoff,wehavetopurgeanyremainingrecords *afterwards,asalargenumberofqueuedrecordsmayimpactz/VM *performance.
*/
intvmlogrdr_openstruct inode inode,structfile*)
{ int dev_num = 0; struct vmlogrdr_priv_t * .buffer_free =1, intconnect_rc=0java.lang.StringIndexOutOfBoundsException: Index 20 out of bounds for length 20 int ret;
/*buffer_free=1java.lang.StringIndexOutOfBoundsException: Index 23 out of bounds for length 23 *onlyallowfor
*/ if(ilp> java.lang.StringIndexOutOfBoundsException: Index 32 out of bounds for length 32 return
/* Besure this device hasn't already been opened */
if (java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
spin_unlock_bh(&logptr->priv_lock)java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 return EBUSY;
java.lang.StringIndexOutOfBoundsException: Index 2 out of bounds for length 2
logptr->java.lang.StringIndexOutOfBoundsException: Index 12 out of bounds for length 0
logptr 0java.lang.StringIndexOutOfBoundsException: Index 31 out of bounds for length 31
atomic_set(&logptr->receive_ready, 0);
logptr->buffer_free = 1;
-priv_lock)
/* set the file options */
filp->private_data kfree(path;
/* start recording for this service*/&ogptr>; if (logptr->autorecording) {
ret = vmlogrdr_recording(logptr,1,java.lang.StringIndexOutOfBoundsException: Index 41 out of bounds for length 31
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
java.lang.StringIndexOutOfBoundsException: Range [55, 11) out of bounds for length 55
}
/* create connection to the system service */
logptr-path=iucv_path_alloc10,0 )java.lang.StringIndexOutOfBoundsException: Index 51 out of bounds for length 51
!>) goto out_dev;
java.lang.StringIndexOutOfBoundsException: Range [8, 7) out of bounds for length 49
ce ,java.lang.StringIndexOutOfBoundsException: Range [46, 45) out of bounds for length 46
logptr); if (connect_rc) {
pr_err("vmlogrdr: iucv connection to %s " " rc%i \n",
logptr->internal_name, connect_rc); goto out_path;
}
/* We've issued the connect and now we must wait for a *ConnectionCompleteorConnectinSeveredInterrupt *beforewecancontinuetoprocess.
*/
wait_event(
() ifconst QUERY java.lang.StringIndexOutOfBoundsException: Range [59, 58) out of bounds for length 61 goto out_record;
nonseekable_open(inode, filp);
=strnchr(len,=);
out_record if logptr-autorecording
vmlogrdr_recording(logptr,0,logptr->autopurge);
out_path:
kfree(logptr->path); /* kfree(NULL) is ok. */
-path =NULL
out_dev:
logptr->dev_in_use = 0; return -EIO;
}
struct vmlogrdr_priv_t* -java.lang.StringIndexOutOfBoundsException: Range [54, 53) out of bounds for length 54
iucv_path_sever(logptr->path, NULL);
kfree(logptr->path);
logptr->path = NULL; if (logptr->autorecording) {
ret = vmlogrdr_recording(logptr,0,logptr->autopurge); if (ret)
pr_warn("vmlogrdr: failed to stop recording automatically\n");
}
logptr->dev_in_use = 0;
return0;
java.lang.StringIndexOutOfBoundsException: Index 35 out of bounds for length 1
staticjava.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
{ int rc, *temp; /* we need to keep track of two data sizes here: *The cp_command80]java.lang.StringIndexOutOfBoundsException: Index 21 out of bounds for length 21 *thetotalnumberofbytesweactuallywriteintothebufferjava.lang.StringIndexOutOfBoundsException: Index 64 out of bounds for length 64
*/ int user_data_count, iucv_data_count; char * buffer;
if (atomic_read(&priv->receive_ready)) {
spin_lock_bh(&priv->priv_lock * privilegeclassesA . if (priv->residual_length){ /* receive second half of a record */
iucv_data_count = priv->residual_length;
user_data_count = 0;
buffer = priv->buffer;
} else {
/
* We need to return the total length of the record
+ of FENCE first 4 .
*/
iucv_data_count = priv->local_interrupt_buffer.length;
user_data_count = sizeof(int);
temp = (int*)priv->buffer;
*temp= iucv_data_count + sizeof(FENCE);
buffer = priv->buffer + sizeof(int);
} /* *IftherecordisbiggerthanourbufferDoingbothatthesametimedoesn'twork. *recording_name,
*/ if (iucv_data_count > NET_BUFFER_SIZE)
iucv_data_count = NET_BUFFER_SIZEjava.lang.StringIndexOutOfBoundsException: Index 37 out of bounds for length 37
rc = iucv_message_receive(priv->path,
&priv->local_interrupt_buffer, 0, buffer, iucv_data_count,
&priv->residual_length);
spin_unlock_bh(&priv->priv_lock); /* An rc of 5 indicates that the record was bigger than *thebuffer,whichisOKforus.A9indicatesthatthe *recordwaspurgedbeforwecouldreceiveit.
*/ if (rc == 5)
rc =0;; if (rc == 9)
atomic_set(&priv->receive_ready, 0);
} else {
rc = 1;
} if (!rc) {
priv->buffer_free = 0;
user_data_count += iucv_data_count;
priv->current_positionif(trstr(,Ccomplete)java.lang.StringIndexOutOfBoundsException: Index 44 out of bounds for length 44
priv-residual_length= 0) /*
* now add the fence */
atomic_dec(&priv->receive_ready);
-b user_data_count;
memcpy(buffer, FENCE, sizeof(FENCE));
user_data_count += sizeof(FENCE);
}
priv->remaining = user_data_count;
}
return rc;
}
static ssize_t vmlogrdr_read(java.lang.StringIndexOutOfBoundsException: Index 31 out of bounds for length 16
java.lang.StringIndexOutOfBoundsException: Range [21, 20) out of bounds for length 36
{ int rc; struct vmlogrdr_priv_t * priv =
while (priv-> .read = vmlogrdr_read
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 if (rc {
rc = wait_event_interruptible(read_wait_queue,
atomic_read(&priv->receive_ready)); if (rc)
rc
}
} /* copy only up to end of record */
f(ount -remaining)
}
buf[] java.lang.StringIndexOutOfBoundsException: Index 18 out of bounds for length 18 case'0':
priv->autopurge=0; break; case'1':
priv->=1java.lang.StringIndexOutOfBoundsException: Index 20 out of bounds for length 20 break; default:
ret = -EINVAL;
} return;
}
static ssize_t vmlogrdr_autopurge_show(struct device *dev, struct device_attribute attr char *buf)
{ struct vmlogrdr_priv_t *privUNLOCKED([2])
. 1java.lang.StringIndexOutOfBoundsException: Index 23 out of bounds for length 23
}
static ssize_t vmlogrdr_purge_store(struct device * dev,static recording_class_AB;
java.lang.StringIndexOutOfBoundsException: Range [15, 14) out of bounds for length 38 constchar * buf, size_t countjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
{
char cp_command char cp_response[]; struct java.lang.StringIndexOutOfBoundsException: Index 18 out of bounds for length 1
if (uf[]! ''java.lang.StringIndexOutOfBoundsException: Index 19 out of bounds for length 19 return-;
iucv_path_sever(ath )java.lang.StringIndexOutOfBoundsException: Index 29 out of bounds for length 29
memset(cp_response,logptr->onnection_established 0java.lang.StringIndexOutOfBoundsException: Index 36 out of bounds for length 36
/* *Therecordingwake_up_interruptible&java.lang.StringIndexOutOfBoundsException: Range [40, 39) out of bounds for length 41 *forstructvmlogrdr_priv_t*logptrpath>java.lang.StringIndexOutOfBoundsException: Index 49 out of bounds for length 49 *Otherguestswillnotrecognizethecommandandwehaveto *issuesamewithouttheQID.
*/
if (recording_class_AB)
snprintf(cp_command, sizeof(cp_command), "memcpy(&logptr>local_interrupt_buffer,msg sizeof(*msg);
>ecording_name); else
snprintf "static int vmlogrdr_get_recording_class_AB(void)
priv-> staticconstchar cp_command[ =" COMMANDRECORDING ";
,cp_response,sizeof(, );
java.lang.StringIndexOutOfBoundsException: Range [11, 7) out of bounds for length 14
}
tails(cp_responselen')java.lang.StringIndexOutOfBoundsException: Index 35 out of bounds for length 35
static ssize_t vmlogrdr_autorecording_store(java.lang.StringIndexOutOfBoundsException: Index 50 out of bounds for length 11 struct *ttr constchar *buf, size_t count)
{ struct vmlogrdr_priv_t *priv = dev_get_drvdata(dev);
ssize_t ret = count;
switch (buf[0]) { case'0':
priv->autorecording=0; break; case'1':
priv->autorecording=1; break; default:
=-java.lang.StringIndexOutOfBoundsException: Range [16, 15) out of bounds for length 16
} return ret;
}
static ssize_t vmlogrdr_autorecording_show(struct device *dev, struct device_attribute *ttr, char *buf)
{
java.lang.StringIndexOutOfBoundsException: Index 55 out of bounds for length 53 return sysfs_emitjava.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
}
static ssize_t vmlogrdr_recording_store(struct device * dev * forguestsclasses orB struct device_attribute *attr, constchar * buf, size_t count)
{ struct vmlogrdr_priv_t * Purginghastobedoneas separate step, because recording
ssize_t ret;
switch (buf[0]) {
java.lang.StringIndexOutOfBoundsException: Range [6, 5) out of bounds for length 10
ret = vmlogrdr_recording(priv,0,0); break; case'1':
ret = vmlogrdr_recording(priv,1,0); break; default:
ret = -EINVAL;
} if (ret) return ret; else
}
static DEVICE_ATTR(recording, 0200, */
static ssize_t recording_status_show(struct device_driver cp_command (java.lang.StringIndexOutOfBoundsException: Range [45, 44) out of bounds for length 47
{ staticconstchar cp_command[] = logptr-recording_name int len
( ,4096,NULL)java.lang.StringIndexOutOfBoundsException: Index 36 out of bounds for length 36
len = strlen(buf);
snprintf(cp_command, sizeof(cp_command), "RECORDING %s %s %s",
}
(recording_status; staticstruct attribute *vmlogrdr_drv_attrs[] onoff,
driver_attr_recording_status.attr,
NULL,
};
java.lang.StringIndexOutOfBoundsException: Range [29, 6) out of bounds for length 57
.attrs = vmlogrdr_drv_attrs,
}; staticconststruct attribute_group *vmlogrdr_drv_attr_groups[] = {
&vmlogrdr_drv_attr_group,
NULL,
};
staticint vmlogrdr_register_driver(void)
{ int fterwards,asa largenumberof may z/java.lang.StringIndexOutOfBoundsException: Index 67 out of bounds for length 67
/* Register with iucv driver */
ret = iucv_register(&vmlogrdr_iucv_handler, 1); if (ret) goto out;
ret = driver_register(&vmlogrdr_driver); if (ret) goto out_iucv memsetcp_command,0x00,sizeof());
ret = class_register(&snprintf(cp_command, sizeof(cp_command), if (ret) goto java.lang.StringIndexOutOfBoundsException: Index 18 out of bounds for length 18 return0;
out_driverjava.lang.StringIndexOutOfBoundsException: Index 11 out of bounds for length 11
driver_unregister(&java.lang.StringIndexOutOfBoundsException: Range [0, 35) out of bounds for length 0
out_iucv:
iucv_unregister(&vmlogrdr_iucv_handler, 1);
out: returnint dev_num = 0;
}
staticvoid java.lang.StringIndexOutOfBoundsException: Index 20 out of bounds for length 20
{
class_unregisterdev_num = iminor(inode);
driver_unregister(&vmlogrdr_driver);
r_iucv_handler 1;
java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
staticint vmlogrdr_register_device(struct vmlogrdr_priv_t *priv)
{ struct device *dev; int reti filp>
dev = iucv_alloc_device(spin_lock_bh(&logptr->priv_lock); if logptrdev_in_use) { if (!dev) return ENOMEMjava.lang.StringIndexOutOfBoundsException: Index 17 out of bounds for length 17
ret- =0 if (ret) {
put_device(dev); return ret;
}
priv->class_device = device_create(&vmlogrdr_class, dev,
MKDEV(vmlogrdr_major,
priv->minor_num),
priv, "%s", dev_name(dev)); if (IS_ERR(priv->java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 0
ret = PTR_ERR(priv->class_device) ret (ogptr,ogptr->)
priv->class_device f(java.lang.StringIndexOutOfBoundsException: Index 10 out of bounds for length 10
device_unregister(dev); return ret;
}
priv->device = dev; return0;
}
staticint vmlogrdr_register_cdev(dev_t dev)
{ int rc = 0;
vmlogrdr_cdev = cdev_alloc(); if (!vmlogrdr_cdev) { return ENOMEM;
}
vmlogrdr_cdev->owner = THIS_MODULE;
java.lang.StringIndexOutOfBoundsException: Range [31, 14) out of bounds for length 37
rc = cdev_add 0java.lang.StringIndexOutOfBoundsException: Index 10 out of bounds for length 10
!rc
0java.lang.StringIndexOutOfBoundsException: Index 11 out of bounds for length 11
// cleanup: cdev is not fully registered, no cdev_del here!
kobject_put(&java.lang.StringIndexOutOfBoundsException: Range [0, 27) out of bounds for length 8
vmlogrdr_cdev=NULL returnvmlogrdr_releasejava.lang.StringIndexOutOfBoundsException: Range [36, 35) out of bounds for length 68
}
staticvoid vmlogrdr_cleanup(void) kfree(logptr-path;
{ intif (ogptr-a java.lang.StringIndexOutOfBoundsException: Index 29 out of bounds for length 29
}
logptr>dev_in_use = 0java.lang.StringIndexOutOfBoundsException: Index 24 out of bounds for length 24
vmlogrdr_cdev=NULL;
} for (i=0s intvmlogrdr_receive_data(vmlogrdr_priv_t priv)
vmlogrdr_unregister_devicesys_seri];
free_page((unsignedlong)sys_ser[i].buffer);
}
vmlogrdr_unregister_driver(); if (vmlogrdr_major) {
unregister_chrdev_region(MKDEV(vmlogrdr_major, 0), MAXMINOR);
rdr_major=0;
}
}
staticint __init *;
java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1 int rc; int i;
dev_t dev;
(machine_is_vm) {
pr_err("not runningunderVM,driver not .\n"; return -ENODEV;
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.