-
Notifications
You must be signed in to change notification settings - Fork 93
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
ICKDSF related changes #615
Comments
First, please review my editing to your above posting/report to ensure there are no mistakes and that I didn't accidentally change what you really meant to say! Thanks!
Given your suspected level of 'git' competence, you did the right thing! For the record however, we prefer that someone create a temporary fork of our repository, make their changes to their fork, and then submit a 'pull' request for their changes. I realize you probably don't know what that means since, as I said, I suspect you're unfamiliar with 'git' and GitHub itself. But that's okay. Uploading (attaching) your new version of the source file in question works just fine too. One thing though: when attaching an updated version of a given source file, it would be nice if you would make clear what specific version of Hercules your changes were made to. In this particular case it looks like your changes were made against Hercules version 4.6.0.10941-SDL-g65c97fd6 (i.e. the current official 4.6 release). Yes? I only mention this since the 4.7 development version of Hercules (still currently under development) of the same source file looks very different from the 4.6 one you attached. That is to say, a lot of changes have been made to But again, that's okay. We understand you're not familiar with Hercules development. You're not familiar with 'git' and GitHub, etc. So what you did was fine. Don't worry about it. I'm only mentioning it for the record.
Not really, no. Well, at least for me anyway. I can't speak for any of the other developers of course. The only testing that I personally do is to perform a That's the only type of testing that I myself do. Other developers who are more experienced with, say, z/OS and/or z/VM for example, may be able to run some things that are able to perform a more thorough test, I don't know. I can only speak for myself. If you could provide for us a very simple channel program consisting of only a couple of CCWs that verify the correct functioning of the changes you mentioned you made however, we would be very appreciative! I'll be happy to add such a test to our E7Prefix test program!
Can 3390's even be attached to 3880 controllers?? I'm somehow doubting it! AFAIK they can only be attached to 3990 controllers, yes? If Hercules is not currently checking for this, it should be! And if it's not, I'll see if I can add that check to Hercules ASAP. (I presume using IN SUMMARY, I would like to thank you, Anders, for taking the time and effort of offer these changes (fixes) to Hercules! We appreciate your effort and thoughtful consideration very much! It's people like you that help make Hercules the quality product it is today! |
(@SE20225) This is not right! In the logic for your new command ...
/* Calculate number of bytes and set residual */
if (dev->devtype == 0x3375)
{
size = 27; // (3375 complete HA length)
HAoff = 18; // (offset to Flag field)
}
else
{
size = 28; // (3380 and 3390 complete HA length)
HAoff = 19; // (offset to Flag field)
}
num = (count < size) ? count : size;
*residual = count - num;
if (count < size) *more = 1;
/* Copy the classical HA fields to the I/O buffer.
Only Flag+CC+HH will contain data. The rest is zeros.
Definitely not correct data, but if written back,
it would at least be ignored!
*/
memset( iobuf, 0, size );
memcpy( &iobuf[ HAoff ], &trkhdr, CKD_TRKHDR_SIZE );
/* Save size and offset of data not used by this CCW */
size = CKD_TRKHDR_SIZE; /* Restore standard HA length */ <-------- WTF?! -------
dev->ckdrem = (U16)(size - num);
dev->ckdpos = (U16)(num); It's the last 3 lines that don't seem right to me: the calculating of
I think the line "Restore standard HA length" shouldn't be there! Would you or others concur? |
Since I did that change, I have learned more about how read or write type CCWs operate including possible Data Chaining. I assume that the negative value of ckdrem went undetected since no DC was used. The line setting size to 5 shall just be taken away. I guess my thought was to avoid permanent changes to the size variable when the code for cmd 0A was copied from the regular Read HA (1A) command code. A bit too careful in this case! Then it should at least have been a couple of lines further below! I will recompile and retest when I set up and try the CCW chains you are asking for. |
Good. Agreed.
Understood. But since it's only a temporary work variable that isn't used any further once the
Actually, it's not needed at all! As I said, once it has been properly calculated (according to the In fact, I would argue that the setting of ....
/* Calculate number of bytes and set residual */
if (dev->devtype == 0x3375)
{
size = 27; // (3375 complete HA length)
HAoff = 18; // (offset to Flag field)
}
else
{
size = 28; // (3380 and 3390 complete HA length)
HAoff = 19; // (offset to Flag field)
}
num = (count < size) ? count : size;
*residual = count - num;
if (count < size) *more = 1;
/* Save size and offset of data not used by this CCW */
dev->ckdpos = (U16)(num);
dev->ckdrem = (U16)(size - num);
/* Copy the classical HA fields to the I/O buffer.
Only Flag+CC+HH will contain data. The rest is zeros.
Definitely not correct data, but if written back,
it would at least be ignored!
*/
memset( iobuf, 0, size );
memcpy( &iobuf[ HAoff ], &trkhdr, CKD_TRKHDR_SIZE );
/* Return normal status */
*unitstat = CSW_CE | CSW_DE;
break;
I would appreciate that very much. Thanks. Your proposed change looks fine otherwise, and I'd like to get it committed. But of course, I would like to test them myself beforehand too. So the sooner I get that/those simple channel programs (CCW chains) that verify (prove) the fix it good, the better. Thanks again for all your hard work, Anders. Much appreciated buddy! |
I am attaching a .zip file with the CCW chains to verify the changes, and a few thoughts about the DASD emulation in combination with the TurnKey MVS systems. I am also including DUMPCORE versions of the 'handloops' I used for verification. Out of interest, I also verified the 0A command with the 'extra', erroneous change back to 5 for the |
THANK YOU, Anders! I am looking over your information right now!
If you understand what "branches" are on git, you can get it yourself. All of our development is done in the "develop" branch (which is where version 4.7 is currently being developed). The default git branch is always "master", which is always the current released version of Hercules (currently 4.6). That's what you have. To relieve you from having to learn about git branches however (I would encourage you to try and do so, but at your leisure), I've attached the current 4.7 development version of I will give your tests a try. Thank you! It will take me some time to integrate them into our existing testing suite however. The only dasd test we have is for 3390 dasd, so I will need to make some changes or create some new tests for the other device types. It will take me some time to do that of course. HOWEVER, once I have confirmed your tests, I will go ahead and commit your changes. The updating of our existing tests with your new tests is not critical and can come later. Thank again for everything, Anders! Your knowledge and effort are greatly appreciated! |
Checked the source for the 4.7 edition. Seemlessly integrated! |
I'm reading the comments you wrote in your "Response.txt" file included in your tests you provided earlier that supposedly explain what results should be expected for each of the tests, but am confused about something. For the first test, you wrote:
Yet, in the series of CCW commands you listed that the test should execute, there is no X'0A' command! |
You are right again. That remark belongs to the next (No 2) test case. The text is there already, so just strike the line out here. I guess this test would be improved by removing the SKIP flag from the 1A (Read HA) CCW so that it becomes possible to verify the data received. I copied all these chains from tracing actual ICKDSF chains which obviously often use SKIP to just verify that a previous write was correctly (no data check) readable from the disk surface. |
Good. I'll do so in my copy.
That's a good idea. I will make that change too. Thanks.
Understood. I'm almost done with my test program. I'll upload it here once it's ready so that you can see it. It's basically your test program but modified to be able to run each test individually one after the other verifying the results of each one as it goes. Like I said, I'll upload it for you later today. |
Closed by commit db4aafb. |
I had a look at the ASM code that you sent. The scheme established is clearly extendable to do other testing of other chains. I guess it is an advantage (for the book-keeping) to have one set of tests for each 'issue' rather than combining all directly CCW related tests into a single module. I assume that you also have some automatic method to move the code from the assembly into storage to create the test? (rather than directly typing?) Otherwise let me suggest that you look into the '3card loader' although it seems it has been better integrated into both the SADUMP code or the 360 HASP workstation code than it was in the 1970s. I am sure that that could be used to IPL the object deck into storage to create the saved storage dump. |
Yes, it's easier that way.
Of course. Hercules has a full suite of automated tests. What I showed you was just the source code for only one of them. The others are all in Hercules's "tests" sub-directory. You'll find the GH615 test there, along with its associated "core".
Thanks, but no thanks. We already have something that we use to build all of our QA tests with. It's called "SATK" (Stand Alone Tool Kit), and was written by one of our developers, a brilliant man by the name of Harold Grovesteen (@s390guy). We've been using it for years now and it's a fantastic product. I couldn't imagine being a Hercules developer without it. We use SATK to create "core" files, which are then automatically loaded, run and verified by our in-house developed QA testing harness, which we call "runtest" (designed and developed by former Hercules developer and former IBM'er John P. Hartmann of CMS Pipelines fame). Our "runtest" testing harness is documented in our internal "Low-level Test Cases" README document. So if you find yourself regularly writing stand alone test programs by hand, I would like to encourage you to give SATK a try. It's a really great tool and it's not that difficult to use. It might be difficult (confusing) to get started with it, but I (or Harold!) would be happy to help you with that if you're interested. It's worth it IMHO if you find yourself manually writing a lot of stand alone tests by hand. I use it a lot because I'm a Hercules developer and we need to be constantly writing tests to verify that Hercules is operating properly. If you don't regularly write a lot of stand alone tests however, then it would probably be just a curiosity to you. Hope that helps! |
FYI: Here is the report that gets generated by our "runtest" automated testing script that I ran recently. As you'll notice, the "GH615 ICKDSF related changes" test is now included among the many other tests that we always run before each release of a new version of Hercules: Begin: "runtest -d "..\hyperion-0\tests" -n * -f tst -64 -b release -w hyp0\work\allTests-64-release" ... On: Thu 02/08/2024 at 9:12:29 AM Variable $platform set to "Windows" Variable $ptrsize set to "8" Variable $can_s370_mode set to "1" Variable $can_esa390_mode set to "1" Variable $can_zarch_mode set to "1" Variable $max_cpu_engines set to "64" Variable $libraries set to "Shared" Variable $threading_model set to "Fish" Variable $locking_model set to "Error" Variable $shared_devices set to "1" Variable $HDL set to "1" Variable $externalgui set to "1" Variable $keepalive set to "Partial" Variable $IPV6 set to "1" Variable $HTTP set to "1" Variable $sqrtl set to "1" Variable $sighandling set to "1" Variable $CCKD_BZIP2 set to "1" Variable $HET_BZIP2 set to "1" Variable $ZLIB set to "1" Variable $regex set to "1" Variable $rexx_supported set to "1" Variable $HAO set to "1" Variable $NLS set to "0" Variable $cmpxchg1 set to "1" Variable $cmpxchg4 set to "1" Variable $cmpxchg8 set to "1" Variable $cmpxchg16 set to "1" Variable $hatomics set to "msvcIntrinsics" Variable $rexx_package set to "OORexx" Variable $rexx_VERSION set to "REXX-ooRexx_4.2.0(MT)_64-bit 6.04 22 Feb 2014" Variable $rexx_SOURCE set to "WindowsNT" Variable $rexx_Mode set to "Subroutine" Variable $rexx_MsgLevel set to "0" Variable $rexx_MsgPrefix set to "0" Variable $rexx_ErrPrefix set to "0" Variable $rexx_Resolver set to "1" Variable $rexx_SysPath set to "1" Variable $rexx_RexxPath set to "" Variable $rexx_Extensions set to ".REXX;.rexx;.REX;.rex;.CMD;.cmd;.RX;.rx" Test "1403 printer Load UCS Buffer": 2 OK compares. All pass. Test "3211 printer (OORexx)": 2 OK compares. All pass. Test "agf 20161211 12.44": 10 OK compares. All pass. Test "S/370 AWS tape BSF into Load Point": 5 OK compares. All pass. Test "BC-mode ILC Handling": 4 OK compares. All pass. Test "bfp-001-divtoint: Test IEEE Divide To Integer": 1 OK compares. All pass. Test "bfp-002-loadr: Test IEEE Load Rounded": 1 OK compares. All pass. Test "bfp-003-loadfpi: Test IEEE Load FP Integer": 1 OK compares. All pass. Test "bfp-004-cvttolog: Test IEEE Convert To Logical (uint-32)": 1 OK compares. All pass. Test "bfp-005-cvttolog64: Test IEEE Cvt To Logical (uint-64)": 1 OK compares. All pass. Test "bfp-006-cvttofix: Test IEEE Convert To Fixed (int-32)": 1 OK compares. All pass. Test "bfp-007-cvttofix64: Test IEEE Convert To Fixed (int-64)": 1 OK compares. All pass. Test "bfp-008-cvtfrlog: Test IEEE Convert From Fixed (uint-32)": 1 OK compares. All pass. Test "bfp-009-cvtfrlog64: Test IEEE Cvt From Fixed (uint-64)": 1 OK compares. All pass. Test "bfp-010-cvtfrfix: Test IEEE Convert From Fixed (int-32)": 1 OK compares. All pass. Test "bfp-011-cvtfrfix64: Test IEEE Cvt From Fixed (int-64)": 1 OK compares. All pass. Test "bfp-012-loadtest: Test IEEE Test Data Class, Load And Test": 1 OK compares. All pass. Test "bfp-013-comps: Test IEEE Compare, Compare And Signal": 1 OK compares. All pass. Test "bfp-014-divide: Test IEEE Divide": 1 OK compares. All pass. Test "bfp-015-sqrt: Test IEEE Square Root": 1 OK compares. All pass. Test "bfp-016-add: Test IEEE Add": 1 OK compares. All pass. Test "bfp-017-loadl: Test IEEE Load Lengthened": 1 OK compares. All pass. Test "bfp-018-subtract: Test IEEE Subtract": 1 OK compares. All pass. Test "bfp-019-multiply: Test IEEE Multiply": 1 OK compares. All pass. Test "bfp-020-multlonger: Test IEEE Multiply": 1 OK compares. All pass. Test "bfp-021-multadd: Test IEEE Multiply And Add": 1 OK compares. All pass. Test "bfp-022-multsub: Test IEEE Multiply And Subtract": 1 OK compares. All pass. Test "bim-001-add-sub: Test Basic Integer Math Add & Subtract": 1 OK compares. All pass. Test "CBUC (Concurrent Block Update Consistency)": 2 OK compares. All pass. Test "CCW-ILS (CCW Incorrect Length Suppression)": 2 OK compares. All pass. Test "cmpxchg16 as used by CDSG, STPQ and LPQ instructions": 2 OK compares. All pass. Test "cipher 20161202 12.03": 305 OK compares. All pass. Test "CLCL-et-al (Test CLCL, MVCIN and TRT instructions)": 1 OK compares. All pass. Test "CLCL Unaligned Buffers Test": 1 OK compares. All pass. Test "CLCLE-01-unaligned-buffers Test": 1 OK compares. All pass. Test "CLCLE-02-unaligned-buffers Test": 1 OK compares. All pass. Test "CLCLE-03-basic (Test CLCLE instructions)": 1 OK compares. All pass. Test "CLCLE-04-performance (Test CLCLE instructions)": 1 OK compares. All pass. Test "CMPSC (Compression Call)": 1 OK compares. All pass. Test "Initial control register values": 9 OK compares. All pass. Test "csxtr csdtr cxstr cxutr 20160605 09.38": 8 OK compares. All pass. Test "CUSE-01-basic (Test CUSE instruction)": 1 OK compares. All pass. Test "CUSE-02-performance (Test CUSE instruction)": 1 OK compares. All pass. Test "dfp-080-from-packed.tst: CDPT, CXPT": 162 OK compares. All pass. Test "dfp-080-to-packed.tst: CPDT, CPXT": 393 OK compares. All pass. Test "digest 20161202 12.03": 57 OK compares. All pass. Test "Various CKD dasd I/O tests": 1 OK compares. All pass. Test "Facility 53 Instructions": 1 OK compares. All pass. Test "FAC5861: Quick Test of Misc. Instr. Ext. 2 & 3": 1 OK compares. All pass. Test "fix-page: Test the Fix Page E502 Assist": 1 OK compares. All pass. Test "HFP Floating Point (370, no AFP, no EXTENSION)": 6 OK compares. All pass. Test "HFP Floating Point (370, with AFP, no EXTENSION)": 6 OK compares. All pass. Test "HFP Floating Point (370, no AFP, with EXTENSION)": 6 OK compares. All pass. Test "HFP Floating Point (370, with AFP, with EXTENSION)": 6 OK compares. All pass. Test "HFP Floating Point (z/Arch, no AFP)": 6 OK compares. All pass. Test "HFP Floating Point (z/Arch, with AFP enabled)": 6 OK compares. All pass. Test "GH615 ICKDSF related changes": 1 OK compares. All pass. Test "S/370 HET (ZLIB) tape BSF into Load Point": 5 OK compares. All pass. Test "S/370 HET (BZIP2) tape BSF into Load Point": 5 OK compares. All pass. Test "IF-ELSE-01": 2 OK compares. All pass. Test "IF-ELSE-02": 2 OK compares. All pass. Test "IF-ELSE-03": 2 OK compares. All pass. Test "IF-ELSE-04": 2 OK compares. All pass. Test "IF-ELSE-05": 2 OK compares. All pass. Test "IF-ELSE-06": 2 OK compares. All pass. Test "IF-ELSE-07": 2 OK compares. All pass. Test "ilc": 3 OK compares. All pass. Test "invpsw processed 16 Jan 2016 12:11:11 by bldhtc.rexx": 1 OK compares. All pass. Test "KIMD fc0": 2 OK compares. All pass. Test "KIMD fc1": 3 OK compares. All pass. Test "KIMD fc2": 3 OK compares. All pass. Test "KIMD fc3": 5 OK compares. All pass. Test "KIMD fc65": 2 OK compares. All pass. Test "KLMD fc0": 2 OK compares. All pass. Test "KLMD fc1": 3 OK compares. All pass. Test "KLMD fc2": 3 OK compares. All pass. Test "KLMD fc3": 5 OK compares. All pass. Test "KM fc0": 2 OK compares. All pass. Test "KM fc1": 3 OK compares. All pass. Test "KM fc2": 3 OK compares. All pass. Test "KM fc3": 3 OK compares. All pass. Test "KM fc9": 3 OK compares. All pass. Test "KM fc10": 3 OK compares. All pass. Test "KM fc11": 3 OK compares. All pass. Test "KM fc18": 3 OK compares. All pass. Test "KM fc19": 3 OK compares. All pass. Test "KM fc20": 3 OK compares. All pass. Test "KM fc26": 3 OK compares. All pass. Test "KM fc27": 3 OK compares. All pass. Test "KM fc28": 3 OK compares. All pass. Test "KM fc50": 3 OK compares. All pass. Test "KM fc52": 3 OK compares. All pass. Test "KM fc58": 3 OK compares. All pass. Test "KM fc60": 3 OK compares. All pass. Test "KMAC fc0": 2 OK compares. All pass. Test "KMAC fcbad": 2 OK compares. All pass. Test "KMAC fc1": 2 OK compares. All pass. Test "KMAC fc2": 2 OK compares. All pass. Test "KMAC fc3": 2 OK compares. All pass. Test "KMAC fc9": 2 OK compares. All pass. Test "KMAC fc10": 2 OK compares. All pass. Test "KMAC fc11": 2 OK compares. All pass. Test "KMAC fc18": 2 OK compares. All pass. Test "KMAC fc19": 2 OK compares. All pass. Test "KMAC fc20": 2 OK compares. All pass. Test "KMAC fc26": 2 OK compares. All pass. Test "KMAC fc27": 2 OK compares. All pass. Test "KMAC fc28": 2 OK compares. All pass. Test "KMC fc0": 2 OK compares. All pass. Test "KMC bad": 2 OK compares. All pass. Test "KMC badreg0": 2 OK compares. All pass. Test "KMC badreg3": 2 OK compares. All pass. Test "KMC fc1": 3 OK compares. All pass. Test "KMC fc2": 3 OK compares. All pass. Test "KMC fc3": 3 OK compares. All pass. Test "KMC fc9": 3 OK compares. All pass. Test "KMC fc10": 3 OK compares. All pass. Test "KMC fc11": 3 OK compares. All pass. Test "KMC fc18": 3 OK compares. All pass. Test "KMC fc19": 3 OK compares. All pass. Test "KMC fc20": 3 OK compares. All pass. Test "KMC fc26": 3 OK compares. All pass. Test "KMC fc27": 3 OK compares. All pass. Test "KMC fc28": 3 OK compares. All pass. Test "KMC fc67": 3 OK compares. All pass. Test "KMCTR fc0": 2 OK compares. All pass. Test "KMCTR bad": 2 OK compares. All pass. Test "KMCTR fc1": 3 OK compares. All pass. Test "KMCTR fc2": 3 OK compares. All pass. Test "KMCTR fc3": 3 OK compares. All pass. Test "KMCTR fc9": 3 OK compares. All pass. Test "KMCTR fc10": 3 OK compares. All pass. Test "KMCTR fc11": 3 OK compares. All pass. Test "KMCTR fc18": 2 OK compares. All pass. Test "KMCTR fc19": 2 OK compares. All pass. Test "KMCTR fc20": 2 OK compares. All pass. Test "KMCTR fc26": 3 OK compares. All pass. Test "KMCTR fc27": 3 OK compares. All pass. Test "KMCTR fc28": 3 OK compares. All pass. Test "KMF fc0": 2 OK compares. All pass. Test "KMF bad": 2 OK compares. All pass. Test "KMF fc1": 3 OK compares. All pass. Test "KMF fc2": 3 OK compares. All pass. Test "KMF fc3": 3 OK compares. All pass. Test "KMF fc9": 3 OK compares. All pass. Test "KMF fc10": 3 OK compares. All pass. Test "KMF fc11": 3 OK compares. All pass. Test "KMF fc18": 3 OK compares. All pass. Test "KMF fc19": 3 OK compares. All pass. Test "KMF fc20": 3 OK compares. All pass. Test "KMF fc26": 3 OK compares. All pass. Test "KMF fc27": 3 OK compares. All pass. Test "KMF fc28": 3 OK compares. All pass. Test "KMO fc0": 2 OK compares. All pass. Test "KMO bad": 2 OK compares. All pass. Test "KMO fc1": 3 OK compares. All pass. Test "KMO fc2": 3 OK compares. All pass. Test "KMO fc3": 3 OK compares. All pass. Test "KMO fc9": 3 OK compares. All pass. Test "KMO fc10": 3 OK compares. All pass. Test "KMO fc11": 3 OK compares. All pass. Test "KMO fc18": 3 OK compares. All pass. Test "KMO fc19": 3 OK compares. All pass. Test "KMO fc20": 3 OK compares. All pass. Test "KMO fc26": 3 OK compares. All pass. Test "KMO fc27": 3 OK compares. All pass. Test "KMO fc28": 3 OK compares. All pass. Test "leapfrog processed 16 Jan 2016 12:11:11 by bldhtc.rexx": 3 OK compares. All pass. Test "logicImmediate processed 12 Nov 2015 12:36:58 by bldhtc.rexx": 17 OK compares. All pass. Test "mainsize check storage size": 26 OK compares. All pass. Test "mhi": 4 OK compares. All pass. Test "mvcle-370": 3 OK compares. All pass. Test "mvcos-001.tst:": 1 OK compares. All pass. Test "PERZAD: Quick PER Zero-Address Detection test": 1 OK compares. All pass. Test "PFPO ORIGINAL": 2 OK compares. All pass. Test "PFPO TRUNCATED": 2 OK compares. All pass. Test "z/Arch prefix register and real/absolute storage set/display": 10 OK compares. All pass. Test "ESA/390 prefix register and real/absolute storage set/display": 10 OK compares. All pass. Test "S/370 prefix register and real/absolute storage set/display": 10 OK compares. All pass. Test "privopisk": 2 OK compares. All pass. Test "privopiske": 2 OK compares. All pass. Test "privopgo": 3 OK compares. All pass. Test "problem": 2 OK compares. All pass. Test "runtest0: all cpus 0 seconds": 5 OK compares. All pass. Test "runtest4: all cpus 1-4 seconds": 5 OK compares. All pass. Test "semipriv": 5 OK compares. All pass. Test "sigp": 1 OK compares. All pass. Test "Storage Keys: pure System/370 only": 1 OK compares. All pass. Test "Storage Keys: S/390 then z/Arch": 1 OK compares. All pass. Test "Storage Keys: Pure z/Arch only": 1 OK compares. All pass. Test "SRSTU: Simple Search String Unicode test": 1 OK compares. All pass. Test "sske#1": 2 OK compares. All pass. Test "sske#2": 53 OK compares. All pass. Test "STFL and STFLE": 6 OK compares. All pass. Test "cpuverid FORCE (z/Arch LPAR FMT-0)": 2 OK compares. All pass. Test "S/370 BASIC FMT-0 CPUs = 1": 2 OK compares. All pass. Test "S/370 BASIC FMT-1 CPUs = 1": 2 OK compares. All pass. Test "S/370 LPAR FMT-0 CPUs = 1": 2 OK compares. All pass. Test "S/370 LPAR FMT-1 CPUs = 1": 2 OK compares. All pass. Test "S/370 BASIC FMT-0 CPUs = 2": 2 OK compares. All pass. Test "S/370 BASIC FMT-1 CPUs = 2": 2 OK compares. All pass. Test "S/370 LPAR FMT-0 CPUs = 2": 2 OK compares. All pass. Test "S/370 LPAR FMT-1 CPUs = 2": 2 OK compares. All pass. Test "ESA/390 BASIC FMT-0 CPUs = 1": 2 OK compares. All pass. Test "ESA/390 BASIC FMT-1 CPUs = 1": 2 OK compares. All pass. Test "ESA/390 LPAR FMT-0 CPUs = 1": 2 OK compares. All pass. Test "ESA/390 LPAR FMT-1 CPUs = 1": 2 OK compares. All pass. Test "ESA/390 BASIC FMT-0 CPUs = 2": 2 OK compares. All pass. Test "ESA/390 BASIC FMT-1 CPUs = 2": 2 OK compares. All pass. Test "ESA/390 LPAR FMT-0 CPUs = 2": 2 OK compares. All pass. Test "ESA/390 LPAR FMT-1 CPUs = 2": 2 OK compares. All pass. Test "z/Arch BASIC FMT-0 CPUs = 1": 2 OK compares. All pass. Test "z/Arch BASIC FMT-1 CPUs = 1": 2 OK compares. All pass. Test "z/Arch LPAR FMT-0 CPUs = 1": 2 OK compares. All pass. Test "z/Arch LPAR FMT-1 CPUs = 1": 2 OK compares. All pass. Test "z/Arch BASIC FMT-0 CPUs = 2": 2 OK compares. All pass. Test "z/Arch BASIC FMT-1 CPUs = 2": 2 OK compares. All pass. Test "z/Arch LPAR FMT-0 CPUs = 2": 2 OK compares. All pass. Test "z/Arch LPAR FMT-1 CPUs = 2": 2 OK compares. All pass. Test "str-001-cksm: Test CKSM Instruction": 1 OK compares. All pass. Test "str-001-clst: Test CLST Instruction": 1 OK compares. All pass. Test "str-001-mvst: Test MVST Instruction": 1 OK compares. All pass. Test "str-001-srst: Test SRST Instruction": 1 OK compares. All pass. Test "Tape Data Chaining": 2 OK compares. All pass. Test "timeout": 1 OK compares. All pass. Test "TRE-01-basic (Test TRE instructions)": 1 OK compares. All pass. Test "TRE-02-performance (Test TRE instructions)": 1 OK compares. All pass. Test "TRTE-01-basic (Test TRTE instruction)": 1 OK compares. All pass. Test "TRTE-02-performance (Test TRTE instruction)": 1 OK compares. All pass. Test "TRTR-01-basic (Test TRTR instruction)": 1 OK compares. All pass. Test "TRTR-02-performance (Test TRTR instruction)": 1 OK compares. All pass. Test "TRTRE-01-basic (Test TRTRE instruction)": 1 OK compares. All pass. Test "TRTRE-02-performance (Test TRTRE instruction)": 1 OK compares. All pass. Test "TXFPER: Test PER Tracing of TXF Transactions": 1 OK compares. All pass. Test "multix": 2 OK compares. All pass. Test "multix1": 2 OK compares. All pass. Test "zeos": 6 OK compares. All pass. Did 237 tests. All OK. Duration: 27 seconds End: ** Success! ** |
I have spent some time on testing running ICKDSF (and IBCDASDI as well!) Stand Alone. Partly because it is fun to use Hercules like this and also in some still unsatisfied hope to again get the most intriguing error message that I ever saw. In the CE school we actually once got an IBC-message with the contents of WRONG ERROR. It happened when a 3880 half reported an error from the other half! I have tested running the 'quick DASDI' type of initialization. Running standalone ICKDSF is my only way to execute ECKD (DX/LR) CCW chains.
I also tried running ICKDSF R13 without the
cu=3880
override, so that the ECKD chains did work. But it took a few changes. I am enclosing the updated source ofckddasd.c
below.Summary of changes made:
Correct erroneous testing for command
19
(WRITE HOME ADDRESS) in an ECKD chain. This prevented use of ICKSADSF and would also kill ICKDSF from a MVS system with ECKD support, so it is a true bug although TK4- (or TK5) MVS users would never experience it! These systems have no ECKD support, socu=3880
is required.Support command
0A
(DIAGNOSTIC READ HOME ADDRESS). It seems that ICKDSF continues in spite of the CMDREJ, so no real harm occurred. And no message was issued, although there were plenty of CMDREJs. Why issue a chain that fails and not report it or kill the job??? Anyway, now it runs and a synthetic HA is returned.Command
64
(READ DEVICE CHARACTERISTICS) receives a correct CMDREJ when executed on pre-3380 dasd, but erroneously sets sense byte 7 (Message code) to02
, whereas it should be set to01
instead. Cosmetic.Handle the actual byte count for command
19
(WRITE HOME ADDRESS) on 3375 and 3380. Rather cosmetic since probably only ICKDSF uses this command and uses the proper byte count.The two different Write HA commands produce the same 'HA' 5 bytes record in the virtual track. The flag byte becomes
00
for the alternate tracks as well. But Hercules has no need for alternate tracks. The contents of the HA is really based on the preceding seek rather than the data sent with the command. And the data received by the corresponding Read HA commands does not really match reality but ICKDSF runs OK with these changes. I tested with ICKDSF R17 too and all was OK, as with IBCDASDI from TK4- too.So my problem now is to submit this suggested change. I hesitate to open it as a problem. But what else can I do?
The source changes are all marked with
/*AE
, so a FIND for this will put you in the right place. Of course the changes will require some editing more than removing the/*AE
tag and the old code, which I have left commented out. And realignment is probably also required to make it all look like it was written by a single programmer! I assume you already have some standard procedures for testing changes to Hercules code before shipping another edition! Further testing should be done with a modern MVS with support for ECKD chains. Almost all these changes involve handling HA, so normal I/O would not care, but ICKDSF does. And do not test withcu=3880
specified for 3390 devices!Anders Edlund
The text was updated successfully, but these errors were encountered: